Hoe een Firewall op te zetten met UFW op Ubuntu

Introductie

UFW, of Uncomplicated Firewall, is een interface naar iptables die is ontworpen om het proces van het configureren van een firewall te vereenvoudigen. Hoewel iptables een solide en flexibel hulpmiddel is, kan het voor beginners moeilijk zijn om te leren hoe ze het moeten gebruiken om een firewall correct te configureren. Als je wilt beginnen met het beveiligen van je netwerk en je niet zeker weet welk hulpmiddel je moet gebruiken, kan UFW de juiste keuze voor je zijn.

In deze tutorial laten we zien hoe je een firewall instelt met UFW op Ubuntu v18.04 en hoger.

Vereisten

Als je Ubuntu versie 16.04 of lager gebruikt, raden we je aan te upgraden naar een recentere versie, aangezien Ubuntu geen ondersteuning meer biedt voor deze versies. Deze verzameling gidsen zal je helpen bij het upgraden van je Ubuntu-versie.

Om deze tutorial te volgen, heb je het volgende nodig:

  • Een server die Ubuntu draait, samen met een niet-rootgebruiker met sudo-rechten. Voor begeleiding over hoe je deze kunt instellen, kies je je distributie uit deze lijst en volg je onze Gids voor het initiële serverinstellingen.

  • UFW is standaard geïnstalleerd op Ubuntu. Als het om een of andere reden is verwijderd, kunt u het installeren met sudo apt install ufw.

Configureer de Ubuntu-firewall met UFW

  1. Activeer IPv6
  2. Stel standaardbeleidsregels in
  3. Sta SSH-verbindingen toe
  4. UFW inschakelen
  5. Sta alle andere vereiste verbindingen toe
  6. Weiger verbindingen
  7. Firewallregels verwijderen
  8. Controleer de status en regels van UFW
  9. Hoe de firewall uitschakelen of resetten op Ubuntu

Stap 1 – Zorg ervoor dat IPv6 is ingeschakeld

In recente versies van Ubuntu is IPv6 standaard ingeschakeld. In de praktijk betekent dit dat de meeste firewallregels die aan de server zijn toegevoegd, zowel een IPv4- als een IPv6-versie bevatten, de laatste geïdentificeerd door v6 binnen de uitvoer van het statuscommando van UFW. Om ervoor te zorgen dat IPv6 is ingeschakeld, kunt u uw UFW-configuratiebestand controleren op /etc/default/ufw. Open dit bestand met nano of uw favoriete opdrachtregelbewerker:

  1. sudo nano /etc/default/ufw

Zorg er vervolgens voor dat de waarde van IPV6 is ingesteld op yes. Het zou er zo uit moeten zien:

/etc/default/ufw excerpt
  1. IPV6=yes

Sla het bestand op en sluit het af. Als u nano gebruikt, kunt u dat doen door CTRL+X te typen, vervolgens Y en ENTER om te bevestigen.

Wanneer UFW is ingeschakeld in een latere stap van deze handleiding, zal het geconfigureerd zijn om zowel IPv4- als IPv6-firewallregels te schrijven.

Stap 2 — Instellen van Standaardbeleid

Als je net begint met UFW, is een goede eerste stap om je standaard firewallbeleid te controleren. Deze regels bepalen hoe het verkeer moet worden afgehandeld 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, geen verbinding kan maken, terwijl elke applicatie binnen de server wel verbinding kan maken met de buitenwereld. Extra regels om specifieke services en poorten toe te staan, worden als uitzonderingen op dit algemene beleid opgenomen.

Om ervoor te zorgen dat je de rest van deze handleiding kunt volgen, stel je nu je standaard UFW-beleid in voor inkomend en uitgaand verkeer.

Om het standaard UFW inkomende beleid in te stellen op weigeren, voer je het volgende uit:

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

Om het standaard UFW uitgaande beleid in te stellen op toestaan, voer je het volgende uit:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

Deze commando’s stellen de standaardinstellingen in op het weigeren van inkomende en het toestaan van uitgaande verbindingen. Deze firewall-standaarden kunnen alleen voldoende zijn voor een persoonlijke computer, maar servers moeten doorgaans reageren op inkomende verzoeken van buitengebruikers. Daar gaan we nu naar kijken.

Stap 3 — SSH-verbindingen toestaan

Als u nu uw UFW-firewall zou inschakelen, zou deze alle inkomende verbindingen weigeren. Dit betekent dat u regels moet maken die expliciet legitieme inkomende verbindingen toestaan — bijvoorbeeld SSH- of HTTP-verbindingen — als u wilt dat uw server reageert op die soorten verzoeken. Als u een cloudserver gebruikt, wilt u waarschijnlijk inkomende SSH-verbindingen toestaan zodat u verbinding kunt maken met en uw server kunt beheren.

Het toestaan van het OpenSSH UFW-toepassingsprofiel

Na installatie registreren de meeste toepassingen die afhankelijk zijn van netwerkverbindingen een toepassingsprofiel binnen UFW, waarmee gebruikers snel externe toegang tot een service kunnen toestaan ​​of weigeren. U kunt controleren welke profielen momenteel zijn geregistreerd in UFW met:

  1. sudo ufw app list
Output
Available applications: OpenSSH

Om het OpenSSH-toepassingsprofiel in te schakelen, voert u het volgende uit:

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

Dit zal firewallregels creëren om alle verbindingen op poort 22 toe te staan, wat de poort is waarop de SSH-daemon standaard luistert.

Het toestaan van SSH op basis van servicenaam

Een andere manier om UFW te configureren om inkomende SSH-verbindingen toe te staan, is door te verwijzen naar de servicenaam: ssh.

  1. sudo ufw allow ssh
Output
Rule added Rule added (v6)

UFW weet welke poorten en protocollen een service gebruikt op basis van het /etc/services-bestand.

Het toestaan van SSH op basis van poortnummer

Als alternatief kunt u de equivalente regel schrijven door de poort in plaats van het toepassingsprofiel of de servicenaam te specificeren. Bijvoorbeeld, deze opdracht werkt hetzelfde als de vorige voorbeelden:

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

Als u uw SSH-daemon hebt geconfigureerd om een andere poort te gebruiken, moet u de juiste poort specificeren. Bijvoorbeeld, als uw SSH-server luistert op poort 2222, kunt u deze opdracht gebruiken om verbindingen op die poort toe te staan:

  1. sudo ufw allow 2222
Output
Rule added Rule added (v6)

Nu uw firewall is geconfigureerd om inkomende SSH-verbindingen toe te staan, kunt u deze inschakelen.

Stap 4 — UFW inschakelen

Uw firewall moet nu geconfigureerd zijn om SSH-verbindingen toe te staan. Om te controleren welke regels tot nu toe zijn toegevoegd, zelfs wanneer de firewall nog steeds is uitgeschakeld, kunt u het volgende gebruiken:

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

Nadat u hebt bevestigd dat u een regel heeft om inkomende SSH-verbindingen toe te staan, kunt u de firewall inschakelen met:

  1. sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup

U ontvangt een waarschuwing die zegt dat het commando 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. Voer het commando sudo ufw status verbose uit om de ingestelde regels te zien. De rest van deze handleiding gaat in op hoe u UFW gedetailleerder kunt gebruiken, zoals het toestaan ​​of weigeren van verschillende soorten verbindingen.

Stap 5 — Andere verbindingen toestaan

Op dit punt moet u alle andere verbindingen toestaan ​​waarop uw server moet reageren. De verbindingen die u moet toestaan, zijn afhankelijk van uw specifieke behoeften. U weet al hoe u regels kunt schrijven die verbindingen toestaan ​​op basis van een toepassingsprofiel, een servicenaam of een poort; dit heeft u al gedaan voor SSH op poort 22. U kunt dit ook doen voor:

  • HTTP op poort 80, dat is wat ongecodeerde webservers gebruiken, met behulp van sudo ufw allow http of sudo ufw allow 80
  • HTTPS op poort 443, dat is wat versleutelde webservers gebruiken, met behulp van sudo ufw allow https of sudo ufw allow 443
  • Apache met zowel HTTP als HTTPS, met behulp van sudo ufw allow ‘Apache Full’
  • Nginx met zowel HTTP als HTTPS, met behulp van sudo ufw allow ‘Nginx Full’

Vergeet niet te controleren welke applicatieprofielen beschikbaar zijn voor uw server met sudo ufw app list.

Er zijn verschillende andere manieren om verbindingen toe te staan, naast het specificeren van een poort of bekende servicenaam. We zullen hiervan enkele volgende zien.

Specifieke poortreeksen

U kunt poortreeksen specificeren met UFW. Sommige toepassingen gebruiken meerdere poorten, in plaats van een enkele poort.

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

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

Als u poortreeksen specificeert met UFW, moet u het protocol (tcp of udp) opgeven waarop de regels van toepassing moeten zijn. We hebben dit 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 kunt u ook IP-adressen specificeren binnen uw regels. Bijvoorbeeld, als u verbindingen van een specifiek IP-adres wilt toestaan, zoals een werk- of thuis-IP-adres van 203.0.113.4, moet u de van-parameter gebruiken en het IP-adres opgeven dat u wilt toestaan:

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

U kunt ook een poort specificeren waarmee het IP-adres verbinding mag maken door naar elke poort toe te voegen, gevolgd door het poortnummer. Als u bijvoorbeeld 203.0.113.4 wilt toestaan om verbinding te maken met poort 22 (SSH), gebruikt u deze opdracht:

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

Subnetten

Als u een subnet van IP-adressen wilt toestaan, kunt u dit doen met behulp van CIDR-notatie om een netmasker op te geven. Als u bijvoorbeeld alle IP-adressen wilt toestaan variërend van 203.0.113.1 tot 203.0.113.254, kunt u deze opdracht gebruiken:

  1. sudo ufw allow from 203.0.113.0/24
Output
Rule added

Evenzo kunt u ook de bestemmingspoort specificeren waarmee het subnet 203.0.113.0/24 verbinding mag maken. Opnieuw zullen we poort 22 (SSH) als voorbeeld gebruiken:

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

Verbindingen met een specifiek netwerkinterface

Als u een firewall-regel wilt maken die alleen van toepassing is op een specifieke netwerkinterface, kunt u dit doen door “toestaan in op” te specificeren gevolgd door de naam van de netwerkinterface.

U wilt mogelijk uw netwerkinterfaces opzoeken voordat u doorgaat. Gebruik hiervoor deze opdracht:

  1. ip addr
Output Excerpt
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 aan. Ze hebben meestal namen zoals eth0 of enp3s2.

Dus, als uw server een openbare netwerkinterface heeft genaamd eth0, kunt u HTTP-verkeer (poort 80) ernaar toestaan met deze opdracht:

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

Door dit te doen, kan uw server HTTP-verzoeken ontvangen van het openbare internet.

Of, als u wilt dat uw MySQL-databaseserver (poort 3306) luistert naar verbindingen op de privénetwerkinterface eth1, kunt u bijvoorbeeld deze opdracht gebruiken:

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

Dit zou andere servers in uw privénetwerk toestaan om verbinding te maken met uw MySQL-database.

Stap 6 — Verbindingen weigeren

Als u het standaardbeleid voor inkomende verbindingen niet heeft gewijzigd, is UFW geconfigureerd om alle inkomende verbindingen te weigeren. Over het algemeen vereenvoudigt dit het proces van het maken van een veilig firewallbeleid door u te verplichten regels te maken die expliciet bepaalde poorten en IP-adressen toestaan.

Echter wilt u soms specifieke verbindingen weigeren op basis van het bron-IP-adres of subnet, misschien omdat u weet dat uw server daarvandaan wordt aangevallen. Ook als u uw standaardinvoerbeleid wilt wijzigen naar toestaan (wat niet wordt aanbevolen), moet u weiger-regels maken voor alle services of IP-adressen waarvoor u geen verbindingen wilt toestaan.

Om weiger-regels te schrijven, kunt u de eerder beschreven commando’s gebruiken en toestaan vervangen door weigeren.

Bijvoorbeeld, om HTTP-verbindingen te weigeren, kunt u dit commando gebruiken:

  1. sudo ufw deny http
Output
Rule added Rule added (v6)

Of als u alle verbindingen vanuit 203.0.113.4 wilt weigeren, kunt u dit commando gebruiken:

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

In sommige gevallen wilt u ook uitgaande verbindingen vanaf de server blokkeren. Om alle gebruikers te verbieden een poort op de server te gebruiken, zoals poort 25 voor SMTP-verkeer, kunt u deny out gebruiken gevolgd door het poortnummer:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

Dit blokkeert al het uitgaande SMTP-verkeer op de server.

Stap 7 — Regels verwijderen

Het is net zo belangrijk om te weten hoe u firewallregels moet verwijderen als om ze te maken. Er zijn twee verschillende manieren om aan te geven welke regels u wilt verwijderen: per regelnummer of aan de hand van de menselijk leesbare benaming (vergelijkbaar met hoe de regels werden gespecificeerd toen ze werden gemaakt).

Een UFW-regel verwijderen op basis van nummer

Om een UFW-regel te verwijderen op basis van het nummer, wilt u eerst een genummerde lijst van al uw firewallregels verkrijgen. Het UFW-statuscommando heeft een optie om nummers weer te geven naast elke regel, zoals hier gedemonstreerd:

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

Als u besluit dat u regelnummer 2 wilt verwijderen, degene die poort 80 (HTTP) verbindingen toestaat, kunt u dit specificeren in een UFW verwijderopdracht als volgt:

  1. sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted

Dit zal om een bevestiging vragen en vervolgens regel 2 verwijderen, die HTTP-verbindingen toestaat. Merk op dat als u IPv6 ingeschakeld heeft, u ook de overeenkomstige IPv6-regel wilt verwijderen.

Een UFW-regel verwijderen op naam

In plaats van het gebruik van regelnummers, kunt u ook verwijzen naar een regel op basis van zijn menselijk leesbare benaming, die gebaseerd is op het type regel (typisch toestaan of weigeren) en de servicenaam of poortnummer dat het doelwit was voor deze regel, of de naam van het toepassingsprofiel in het geval dat dit werd gebruikt. Bijvoorbeeld, als u een toestaan-regel voor een toepassingsprofiel genaamd Apache Full wilt verwijderen dat eerder was ingeschakeld, kunt u gebruiken:

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

De delete opdracht werkt op dezelfde manier voor regels die zijn gemaakt met verwijzing naar een service op basis van naam of poort. Als je bijvoorbeeld eerder een regel hebt ingesteld om HTTP-verbindingen toe te staan met sudo ufw allow http, dan kun je deze regel als volgt verwijderen:

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

Omdat servicenamen uitwisselbaar zijn met poortnummers bij het specificeren van regels, kun je dezelfde regel ook aanduiden als allow 80, in plaats van allow http:

  1. sudo ufw delete allow 80
Output
Rule deleted Rule deleted (v6)

Bij het verwijderen van UFW-regels op naam worden zowel IPv4- als IPv6-regels verwijderd als ze bestaan.

Stap 8 — Controleren van UFW-status en regels

Op elk moment kun je de status van UFW controleren met deze opdracht:

  1. sudo ufw status verbose

Als UFW is uitgeschakeld, wat standaard het geval is, zie je iets als dit:

Output
Status: inactive

Als UFW actief is, wat het geval zou moeten zijn als je Stap 3 hebt gevolgd, zal de uitvoer aangeven dat het actief is en eventuele ingestelde regels vermelden. Bijvoorbeeld, als de firewall is ingesteld om SSH (poort 22) verbindingen van overal toe te staan, zou de uitvoer er ongeveer zo uit kunnen zien:

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

Gebruik de status opdracht als je wilt controleren hoe UFW de firewall heeft geconfigureerd.

Stap 9 — Firewall uitschakelen of resetten

Als je besluit om de UFW-firewall niet te gebruiken, kun je deze deactiveren met dit commando:

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

Eventuele regels die je hebt gemaakt met UFW zullen niet langer actief zijn. Je kunt altijd sudo ufw enable uitvoeren als je deze later weer 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
Output
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353' Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353' Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

Dit zal UFW uitschakelen en alle eerder gedefinieerde regels verwijderen. Hiermee krijg je een frisse start met UFW. Houd er rekening mee dat de standaardbeleidsregels niet terugkeren naar hun oorspronkelijke instellingen als je ze op enig moment hebt aangepast.

Implementeer je frontend-applicaties vanuit GitHub met DigitalOcean App Platform. Laat DigitalOcean zich richten op het schalen van je app.

Conclusie

Je firewall is nu geconfigureerd om (minstens) SSH-verbindingen toe te staan. Zorg ervoor dat je alle andere inkomende verbindingen toestaat die je server nodig heeft, terwijl je onnodige verbindingen beperkt, zodat je server functioneel en veilig blijft.

Om meer te leren over gangbare UFW-configuraties, bekijk de UFW Essentials: Veelvoorkomende Firewall-regels en Opdrachten handleiding.

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