Hoe u een firewall kunt instellen met UFW op Debian 11

Introductie

UFW, of Uncomplicated Firewall, is een vereenvoudigde firewall-beheerinterface die de complexiteit van lagere pakketfiltertechnologieën zoals iptables en nftables verbergt. Als je wilt beginnen met het beveiligen van je netwerk en je niet zeker weet welke tool je moet gebruiken, kan UFW de juiste keuze voor je zijn.

In deze tutorial wordt getoond hoe je een firewall kunt instellen met UFW op Debian 11.

Vereisten

Om deze tutorial te volgen, heb je een Debian 11-server nodig met een sudo-gebruiker die geen root is, die je kunt opzetten door Stap 1 tot 3 te volgen in de tutorial Initiële serverinstellingen met Debian 11.

Stap 1 – UFW installeren

Debian installeert standaard geen UFW. Als je de volledige Initiële serverinstallatie-zelfstudie hebt gevolgd, heb je UFW geïnstalleerd en ingeschakeld. Zo niet, installeer het dan nu met apt:

  1. sudo apt install ufw

Je gaat UFW instellen en inschakelen in de volgende stappen.

Stap 2 — IPv6 gebruiken met UFW (Optioneel)

Deze zelfstudie is geschreven met IPv4 in gedachten, maar zal ook werken voor IPv6 als je het inschakelt. Als je Debian-server IPv6 ingeschakeld heeft, wil je ervoor zorgen dat UFW geconfigureerd is om IPv6 te ondersteunen. Hiermee zorg je ervoor dat UFW firewallregels beheert voor zowel IPv6 als IPv4. Om dit te configureren, open het UFW-configuratiebestand /etc/default/ufw met nano of je favoriete editor:

  1. sudo nano /etc/default/ufw

Zoek IPV6 in het bestand en zorg ervoor dat de waarde yes is:

/etc/default/ufw excerpt
IPV6=yes

Sla het bestand op en sluit het. Als je nano gebruikt, druk dan op CTRL+X, dan Y, dan ENTER om op te slaan en het bestand te verlaten.

Nu zal UFW, wanneer het is ingeschakeld, geconfigureerd zijn om zowel IPv4- als IPv6-firewallregels te schrijven. Voordat je UFW echter inschakelt, wil je ervoor zorgen dat je firewall geconfigureerd is om verbinding via SSH toe te staan. Begin met het instellen van de standaardbeleidsregels.

Stap 3 — Instellen van Standaardbeleid

Als je net begint met je firewall, zijn de eerste regels die je moet definiëren je standaardbeleid. Deze regels behandelen verkeer dat niet expliciet overeenkomt met andere regels. Standaard staat UFW ingesteld om alle inkomende verbindingen te weigeren en alle uitgaande verbindingen toe te staan. Dit betekent dat iedereen die probeert verbinding te maken met je server, dit niet kan, terwijl elke toepassing binnen de server wel contact kan maken met de buitenwereld.

Stel je UFW-regels terug in op de standaardwaarden zodat je er zeker van kunt zijn dat je deze tutorial kunt volgen. Gebruik deze commando’s om de standaardwaarden te configureren die door UFW worden gebruikt:

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing

Je ontvangt output zoals het volgende:

Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly) Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

Deze commando’s stellen de standaardwaarden in op het weigeren van inkomende en het toestaan van uitgaande verbindingen. Deze firewall-standaardwaarden alleen zijn mogelijk voldoende voor een persoonlijke computer, maar servers moeten doorgaans reageren op inkomende verzoeken van externe gebruikers. Je begint dit proces in de volgende stap.

Stap 4 — SSH-verbindingen toestaan

Je kunt je UFW-firewall nog niet inschakelen, omdat dit alle inkomende verbindingen zou weigeren, inclusief je pogingen om toegang te krijgen tot je server. Dit betekent dat je regels moet maken die expliciet legitieme inkomende verbindingen toestaan — bijvoorbeeld SSH- of HTTP-verbindingen — als je wilt dat je server reageert op dat soort verzoeken. Als je een cloudserver gebruikt, wil je waarschijnlijk inkomende SSH-verbindingen toestaan, zodat je verbinding kunt maken met en je server kunt beheren.

Om je server te configureren om inkomende SSH-verbindingen toe te staan, gebruik je deze opdracht:

  1. sudo ufw allow ssh

Dit zal firewallregels creëren die alle verbindingen op poort 22 toestaan, wat de poort is waar de SSH-daemon standaard naar luistert. UFW weet welke poort is gekoppeld aan allow ssh omdat het vermeld staat als een service in het bestand /etc/services.

Je kunt echter de equivalente regel schrijven door de poort in plaats van de servicenaam te specificeren. Bijvoorbeeld, deze opdracht produceert hetzelfde resultaat als die hierboven:

  1. sudo ufw allow 22

Als je je SSH-daemon hebt geconfigureerd om een andere poort te gebruiken, moet je de juiste poort specificeren. Als bijvoorbeeld je SSH-server luistert op poort 2222, kun je dezelfde opdracht gebruiken maar 22 vervangen door 2222.

Nu je firewall is geconfigureerd om inkomende SSH-verbindingen toe te staan, kun je deze inschakelen.

Stap 5 — UFW inschakelen

Om UFW in te schakelen, gebruik je deze opdracht:

  1. sudo ufw enable

U zult een waarschuwing ontvangen die zegt dat de opdracht bestaande SSH-verbindingen kan verstoren. U heeft al een firewallregel ingesteld die SSH-verbindingen toestaat, dus het zou veilig moeten zijn om door te gaan. Antwoord op de prompt met y en druk op ENTER.

De firewall is nu actief. Om de regels die u heeft ingesteld te bekijken, voert u deze opdracht uit:

  1. sudo ufw status verbose

De rest van deze tutorial behandelt hoe u UFW gedetailleerder kunt gebruiken, inclusief het toestaan en weigeren van verschillende soorten verbindingen.

Stap 6 — Andere verbindingen toestaan

Op dit punt moet u alle andere verbindingen toestaan die uw server nodig heeft om correct te functioneren. Welke verbindingen u moet toestaan, hangt af van uw specifieke behoeften. U weet al hoe u regels kunt schrijven die verbindingen toestaan op basis van een servicenaam of poort; dit heeft u gedaan voor SSH op poort 22.

Dit kunt u ook doen voor HTTP op poort 80, wat ongecodeerde webservers gebruiken. Om dit type verkeer toe te staan, zou u typen:

  1. sudo ufw allow http

Dit kunt u ook doen voor HTTPS op poort 443, wat gecodeerde webservers gebruiken. Om dit type verkeer toe te staan, zou u typen:

  1. sudo ufw allow https

In beide scenario’s zou het ook werken om de poorten te specificeren, met HTTP als 80 en HTTPS als 443. Bijvoorbeeld:

  1. sudo ufw allow 80

Er zijn echter ook andere manieren om verbindingen toe te staan, naast het specificeren van een poort of bekende service. Dit wordt hierna besproken.

Specifieke Poortbereiken

Je kunt poortbereiken specificeren met UFW. Sommige toepassingen gebruiken bijvoorbeeld meerdere poorten in plaats van één enkele poort.

Bijvoorbeeld, om X11-verbindingen toe te staan, die poorten 60006007 gebruiken, gebruik je deze commando’s:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

Bij het specificeren van poortbereiken met UFW moet je het protocol opgeven (tcp of udp) waarop de regels van toepassing moeten zijn. Dit werd niet eerder genoemd omdat het niet specificeren van het protocol automatisch beide protocollen toestaat, wat in de meeste gevallen prima is.

Specifieke IP-adressen

Bij het werken met UFW kun je ook IP-adressen specificeren. Als je bijvoorbeeld verbindingen vanaf een specifiek IP-adres wilt toestaan, zoals een werk- of thuis-IP-adres van 203.0.113.4, moet je from en vervolgens het IP-adres specificeren:

  1. sudo ufw allow from 203.0.113.4

Je kunt ook een specifieke poort opgeven waarmee het IP-adres verbinding mag maken door to any port toe te voegen, gevolgd door het poortnummer. Als je bijvoorbeeld wilt toestaan dat 203.0.113.4 verbinding maakt met poort 22 (SSH), gebruik je dit commando:

  1. sudo ufw allow from 203.0.113.4 to any port 22

Subnetten

Als je een subnet van IP-adressen wilt toestaan, kun je dit doen met behulp van CIDR-notatie om een netmasker te specificeren. Bijvoorbeeld, als je alle IP-adressen tussen 203.0.113.1 en 203.0.113.254 wilt toestaan, kun je deze opdracht gebruiken:

  1. sudo ufw allow from 203.0.113.0/24

Op dezelfde manier kun je ook de bestemmingspoort specificeren waarmee het subnet 203.0.113.0/24 verbinding mag maken. Opnieuw, door poort 22 (SSH) als voorbeeld te nemen:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22

Verbindingen naar een Specifiek Netwerkinterface

Als je een firewallregel wilt maken die alleen van toepassing is op een specifiek netwerkinterface, kun je dit doen door allow in on te specificeren, gevolgd door de naam van de netwerkinterface.

Het is handig om je netwerkinterfaces op te zoeken voordat je verder gaat. Gebruik hiervoor deze opdracht:

  1. ip addr
Output
. . . 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

De gemarkeerde uitvoer geeft de namen van de netwerkinterfaces weer. Ze hebben meestal namen zoals eth0 of enp3s2.

Als je server bijvoorbeeld een openbare netwerkinterface met de naam eth0 heeft, kun je HTTP-verkeer ernaar toestaan met deze opdracht:

  1. sudo ufw allow in on eth0 to any port 80

Zo zou je server HTTP-verzoeken van het openbare internet kunnen ontvangen.

Of, als je een MySQL-database server (poort 3306) wilt laten luisteren naar verbindingen op het private netwerkinterface eth1, zou je dit commando kunnen gebruiken:

  1. sudo ufw allow in on eth1 to any port 3306

Dit zou andere servers op je private netwerk toestaan om verbinding te maken met je MySQL-database.

Stap 7 — Verbindingen weigeren

Als je de standaardbeleid voor inkomende verbindingen niet hebt gewijzigd, is UFW geconfigureerd om alle inkomende verbindingen te weigeren. Over het algemeen vereenvoudigt dit het proces van het maken van een beveiligingsbeleid voor de firewall door je te verplichten regels te maken die expliciet specifieke poorten en IP-adressen toestaan.

Soms wil je echter specifieke verbindingen weigeren op basis van het bron-IP-adres of subnet, misschien omdat je weet dat je server van daaruit wordt aangevallen. Ook als je je standaard inkomende beleid wilt wijzigen naar toestaan (wat niet wordt aanbevolen), zou je weigeren regels moeten maken voor alle services of IP-adressen waarvoor je geen verbindingen wilt toestaan.

Om weigeren regels te schrijven, kun je de hierboven beschreven commando’s gebruiken, waarbij je toestaan vervangt door weigeren.

Bijvoorbeeld, om HTTP-verbindingen te weigeren, zou je dit commando kunnen gebruiken:

  1. sudo ufw deny http

Of als je alle verbindingen van 203.0.113.4 wilt weigeren, zou je dit commando kunnen gebruiken:

  1. sudo ufw deny from 203.0.113.4

Nu kun je leren hoe je verwijderregels kunt implementeren.

Stap 8 — Regels verwijderen

Het weten hoe je firewallregels moet verwijderen is net zo belangrijk als het weten hoe je ze moet maken. Er zijn twee manieren om aan te geven welke regels moeten worden verwijderd: op basis van het regelnummer of op basis van de regel zelf. Dit is vergelijkbaar met hoe de regels werden gespecificeerd toen ze werden gemaakt.

Op basis van het regelnummer

Als je het regelnummer gebruikt om firewallregels te verwijderen, is het eerste wat je wilt doen een lijst van je firewallregels krijgen. Het UFW status-commando heeft de optie nummering, die nummers weergeeft naast elke regel:

  1. sudo ufw status numbered
Output
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

Als je besluit dat je regel 2 wilt verwijderen, die HTTP-verbindingen op poort 80 toestaat, dan kun je dit specificeren in het volgende UFW delete-commando:

  1. sudo ufw delete 2

Dit zal een bevestigingsprompt tonen, waarop je kunt antwoorden met j/n. Door j in te typen, wordt regel 2 verwijderd. Let op dat als je IPv6 ingeschakeld hebt, je ook de overeenkomstige IPv6-regel wilt verwijderen.

Op basis van de daadwerkelijke regel

De alternatieve aanpak voor regelnummers is om de daadwerkelijke regel die u wilt verwijderen te specificeren. Bijvoorbeeld, als u de regel allow http wilt verwijderen, kunt u het als volgt schrijven:

  1. sudo ufw delete allow http

U kunt ook de regel specificeren met allow 80 in plaats van de servicenaam:

  1. sudo ufw delete allow 80

Met deze methode worden zowel IPv4- als IPv6-regels verwijderd, als ze bestaan.

Stap 9 — Controleren van de status en regels van UFW

Op elk moment kunt u de status van UFW controleren met dit commando:

  1. sudo ufw status verbose

Als UFW uitgeschakeld is, wat de standaardinstelling is, zal de uitvoer als volgt zijn:

Output
Status: inactive

Als UFW actief is, wat het geval zou moeten zijn als u Stap 3 hebt gevolgd, zal de uitvoer aangeven dat het actief is en zullen eventuele ingestelde regels worden weergegeven. Bijvoorbeeld, als de firewall is ingesteld om SSH (poort 22) verbindingen vanaf elke locatie toe te staan, kan de uitvoer iets bevatten als dit:

Output
Status: active To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

Gebruik het status commando als u wilt controleren hoe UFW de firewall heeft geconfigureerd.

Stap 10 — UFW uitschakelen of herstellen (optioneel)

Als u besluit UFW niet te willen gebruiken, kunt u het uitschakelen met dit commando:

  1. sudo ufw disable

Alle regels die je hebt gemaakt met UFW zullen niet langer actief zijn. Je kunt altijd sudo ufw enable uitvoeren als je het later wilt activeren.

Als je al UFW-regels geconfigureerd hebt, maar besluit dat je opnieuw wilt beginnen, kun je het reset-commando gebruiken:

  1. sudo ufw reset

Dit zal UFW uitschakelen en alle regels die je eerder hebt gedefinieerd verwijderen. Houd er rekening mee dat de standaardbeleidsregels niet terugkeren naar hun oorspronkelijke instellingen als je ze op enig moment hebt gewijzigd. Dit zou je een frisse start moeten geven met UFW.

Conclusie

Je firewall is nu geconfigureerd om (minstens) SSH-verbindingen toe te staan. Zorg ervoor dat je andere inkomende verbindingen toestaat die je server nodig heeft, terwijl je ook onnodige verbindingen beperkt. Dit zorgt ervoor dat je server zowel functioneel als veilig is.

Om meer te leren over veelvoorkomende UFW-configuraties, bekijk deze tutorial over UFW Essentials: Common Firewall Rules and Commands.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-debian