UFW is bedacht opdat een firewall met drie commando's kon worden ingesteld, en daarin slaagt hij. Het probleem ligt elders: ufw status toont bedoelingen, geen resultaten. Een regel kan in de lijst staan en helemaal niets afsluiten — om drie verschillende redenen, die op echte servers alle regelmatig voorkomen.
Een begin waarbij u zichzelf niet buitensluit
De volgorde van de commando's doet ertoe. Eerst SSH toestaan, dan inschakelen:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
ufw enable vóór het toestaan van SSH verbreekt uw eigen sessie, en daarna rest alleen de console van de hoster. Is de server al ingericht en twijfelt u, houd dan een tweede verbinding open: die overleeft een mislukte wijziging.
Bekijk de uitgebreide status; de korte verbergt het standaardbeleid:
sudo ufw status verbose
Fout één: de regel staat er en de poort is voor de hele wereld open
De meest voorkomende regel in andermans configuraties:
sudo ufw allow 3306
Zo wordt MySQL opengezet «om vanuit huis te kunnen verbinden» — en opengezet voor het hele internet. Er zijn twee juiste varianten, en beide zijn beter:
sudo ufw allow from 203.0.113.25 to any port 3306
of, nog betrouwbaarder, de dienst helemaal niet naar buiten laten: bind-address = 127.0.0.1 in de MySQL-configuratie en externe toegang via een SSH-tunnel. De firewall is de tweede lijn; de eerste is dat de dienst niet op een openbaar adres luistert. Een UFW-regel kan per ongeluk worden verwijderd, bind-address verandert niet vanzelf.
Fout twee: IPv6
Een regel als ufw allow from 203.0.113.25 betreft alleen IPv4. Heeft de server een IPv6-adres — en de meeste VPS'en hebben er een, ingeschakeld — dan blijft de dienst daarover bereikbaar. De hoster gaf het adres uit, u herinnert het zich niet, de scanner kent het.
Controleer of het v6-filteren überhaupt aanstaat (IPV6=yes in /etc/default/ufw) en of de dienst niet zonder noodzaak op :: luistert:
ss -tulpn | grep ':::'
Regels die een adres uitdrukkelijk noemen moeten voor elke protocolversie apart worden geschreven.
Fout drie: Docker
De ergerlijkste. Docker publiceert poorten door eigen regels vóór die van UFW in de iptables-ketens te schrijven. Daardoor is een container die met -p 5432:5432 is gestart bereikbaar vanaf internet, ook al meldt UFW Status: active en een deny incoming-beleid. De firewall is daarbij niet stuk — hij komt eenvoudigweg niet aan de beurt.
Dat wordt niet in UFW verholpen maar in de manier waarop de poort wordt gepubliceerd:
ports:
- "127.0.0.1:5432:5432"
Binden aan het lokale adres is de eenvoudigste en betrouwbaarste oplossing. Naar buiten mag alleen kijken wat werkelijk bezoekers bedient: doorgaans de poorten 80 en 443 van een reverse proxy.
De volgorde van de regels
UFW past de eerste passende regel toe en stopt daar. Een verbod dat na een toestemming is toegevoegd werkt dus niet: men komt er nooit aan toe. Bekijk de nummering en voeg op de juiste plek in:
sudo ufw status numbered
sudo ufw insert 1 deny from 198.51.100.0/24
sudo ufw delete 7
Regels worden op nummer verwijderd, maar de nummers schuiven na elke verwijdering op — verwijder er één tegelijk en lees de lijst telkens opnieuw.
De controle van buitenaf
Lokale commando's tonen wat er is ingesteld. Wat er werkelijk uit is gekomen ziet u alleen vanaf een andere machine:
nmap -Pn -p- 203.0.113.25
nc -zv 203.0.113.25 3306
Elke andere server of uw computer thuis volstaat. Dat is de enige controle die niet liegt, en ze loont na elke noemenswaardige herconfiguratie — vooral na het installeren van iets dat «het netwerk zelf inricht»: Docker, beheerpanelen, VPN.
De logboeken
Standaard schrijft UFW vrijwel niets. Aanzetten gaat zo:
sudo ufw logging low
De regels komen in /var/log/ufw.log — maar alleen als rsyslog in het systeem aanwezig is. Op Debian 12 en Ubuntu 24.04 kan die ontbreken, en dan gaat alles naar het systemd-journaal:
sudo journalctl -k | grep -i '\[UFW'
Een leeg /var/log/ufw.log betekent op zichzelf niets — kijk eerst in het journaal.
Wat u van een firewall mag verwachten
UFW sluit af wat niet bereikbaar hoort te zijn. De inhoud van verzoeken aan wat wél open is onderzoekt hij niet: poort 443 staat voor iedereen open, en wat er bij de site aankomt, komt ongehinderd aan. Dat is het werk van andere hulpmiddelen — een WAF op toepassingsniveau, een IDS op verkeersniveau. De taak van de firewall is bescheidener en belangrijker: dat de lijst met open poorten overeenkomt met wat u erover denkt. Hoe die lijst samen met de actieve regels op één pagina oogt, toont de demo hieronder.