UFW je izmišljen da bi se zaštitni zid mogao podesiti sa tri komande, i u tome uspeva. Problem je drugde: ufw status prikazuje namere, a ne rezultate. Pravilo može biti na listi i ne zatvarati apsolutno ništa — iz tri različita razloga, a svi se redovno javljaju na stvarnim serverima.

Početak koji vas ne zaključava napolje

Redosled komandi je bitan. Prvo dozvolite SSH, pa onda uključite:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable

ufw enable pre dozvole za SSH preseca vašu sopstvenu sesiju, a odatle nadalje ostaje samo konzola provajdera. Ako je server već podešen a niste sigurni, držite drugu vezu otvorenom — ona preživljava neuspelu izmenu.

Pogledajte detaljan status; kratki krije podrazumevanu politiku:

sudo ufw status verbose

Prva greška: pravilo postoji, a port je otvoren celom svetu

Najčešći red u tuđim konfiguracijama:

sudo ufw allow 3306

Tako se MySQL otvara „da bih se povezivao od kuće" — i otvara se celom internetu. Postoje dve ispravne varijante i obe su bolje:

sudo ufw allow from 203.0.113.25 to any port 3306

ili, još pouzdanije, uopšte ne puštajte servis napolje: bind-address = 127.0.0.1 u MySQL konfiguraciji, a spoljni pristup preko SSH tunela. Zaštitni zid je druga linija; prva je da servis ne osluškuje na javnoj adresi. Pravilo u UFW-u može biti obrisano greškom, dok se bind-address ne menja sam od sebe.

Druga greška: IPv6

Pravilo poput ufw allow from 203.0.113.25 važi samo za IPv4. Ako server ima IPv6 adresu — a većina VPS-ova ima, uključenu — servis ostaje dostupan preko nje. Provajder je dodelio adresu, vi je se ne sećate, skener je se seća.

Proverite da li je v6 filtriranje uopšte uključeno (IPV6=yes u /etc/default/ufw) i da servis bez potrebe ne osluškuje na :::

ss -tulpn | grep ':::'

Pravila koja izričito navode adresu moraju se pisati posebno za svaku verziju protokola.

Treća greška: Docker

Najviše nervira. Docker objavljuje portove dodajući sopstvena pravila u iptables lance pre onih koje upisuje UFW. Kao rezultat, kontejner pokrenut sa -p 5432:5432 dostupan je sa interneta iako UFW prijavljuje Status: active i politiku deny incoming. Zaštitni zid nije pokvaren — prosto nikada ne dođe na red.

Lek nije u UFW-u nego u načinu objavljivanja porta:

ports:
  - "127.0.0.1:5432:5432"

Vezivanje za lokalnu adresu najjednostavnije je i najpouzdanije rešenje. Napolje treba da gleda samo ono što zaista opslužuje posetioce: obično portovi 80 i 443 obrnutog posrednika.

Redosled pravila

UFW primenjuje prvo pravilo koje se poklapa i tu staje. Tako zabrana dodata posle dozvole neće raditi: nikada ne dođe na red. Pogledajte numeraciju i ubacite gde treba:

sudo ufw status numbered
sudo ufw insert 1 deny from 198.51.100.0/24
sudo ufw delete 7

Pravila se brišu po broju, ali se brojevi pomeraju posle svakog brisanja — brišite jedno po jedno i ponovo čitajte listu.

Provera spolja

Lokalne komande prikazuju šta je podešeno. Šta je zaista ispalo vidi se samo sa druge mašine:

nmap -Pn -p- 203.0.113.25
nc -zv 203.0.113.25 3306

Poslužiće bilo koji drugi server ili vaš kućni računar. To je jedina provera koja ne laže i vredi je pokrenuti posle svake primetne rekonfiguracije — naročito posle instalacije nečega što „samo podešava mrežu": Docker, kontrolni paneli, VPN-ovi.

Dnevnici

Podrazumevano UFW ne beleži gotovo ništa. Uključite to sa:

sudo ufw logging low

Zapisi idu u /var/log/ufw.log — ali samo ako u sistemu postoji rsyslog. Na Debianu 12 i Ubuntuu 24.04 njega možda nema, pa sve ide u systemd dnevnik:

sudo journalctl -k | grep -i '\[UFW'

Prazan /var/log/ufw.log sam po sebi ne znači ništa — prvo pogledajte u dnevnik.

Šta očekivati od zaštitnog zida

UFW zatvara ono što ne bi trebalo da bude dostupno. On ne ispituje sadržaj zahteva ka onome što je otvoreno: port 443 otvoren je svima, i šta god stigne na sajt stiže nesmetano. To je posao drugih alata — WAF-a na nivou aplikacije, IDS-a na nivou saobraćaja. Posao zaštitnog zida je skromniji i važniji: da se lista otvorenih portova poklapa sa onim u šta verujete. Kako ta lista izgleda zajedno sa aktivnim pravilima na jednoj stranici pokazuje demo ispod.