Hoe een firewall in te stellen met UFW op Ubuntu

Introductie

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

In deze handleiding 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 nieuwere versie, aangezien Ubuntu geen ondersteuning meer biedt voor deze versies. Deze verzameling handleidingen zal je helpen bij het upgraden van je Ubuntu-versie.

Om deze handleiding te volgen, heb je nodig:

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

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

Setup Ubuntu-firewall met UFW

  1. IPv6 inschakelen
  2. Standaardbeleid instellen
  3. SSH-verbindingen toestaan
  4. UFW inschakelen
  5. Andere vereiste verbindingen toestaan
  6. Verbindingen weigeren
  7. Firewallregels verwijderen
  8. Controleer UFW-status en -regels
  9. Hoe de firewall uitschakelen of herstellen 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, waarbij de laatste wordt geïdentificeerd door v6 binnen de uitvoer van het UFW-statuscommando. 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 dit 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 — Het instellen van standaardbeleid

Als je net begint met UFW, is een goede eerste stap om je standaard firewallbeleid te controleren. Deze regels bepalen hoe verkeer behandeld moet worden 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 niemand die probeert verbinding te maken met je server, verbinding zal kunnen 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 toegevoegd als uitzonderingen op dit algemene beleid.

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

Om het standaard UFW inkomende beleid in te stellen op deny, 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 allow, 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 voldoende zijn voor een persoonlijke computer, maar servers moeten meestal reageren op inkomende verzoeken van buiten gebruikers. Daar gaan we hierna naar kijken.

Stap 3 — SSH-verbindingen toestaan

Als je nu je UFW-firewall zou inschakelen, zou het alle inkomende verbindingen weigeren. Dit betekent dat je regels moet maken die expliciet legitieme inkomende verbindingen toestaan — SSH- of HTTP-verbindingen, bijvoorbeeld — 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.

Het toestaan van het OpenSSH UFW-toepassingsprofiel

Bij 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. Je 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, voer je 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.

SSH toestaan 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.

SSH toestaan op basis van poortnummer

Als alternatief kunt u de equivalentie 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 gebruiken:

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

Na het bevestigen 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 dat 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 tutorial behandelt 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 ​​die uw server moet kunnen beantwoorden. 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 sudo ufw allow http of sudo ufw allow 80
  • HTTPS op poort 443, 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 toepassingsprofielen 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 enkele hiervan hieronder bekijken.

Specifieke poortbereiken

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

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

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

Wanneer u poortbereiken specificeert met UFW, moet u het protocol (tcp of udp) opgeven waaraan de regels moeten worden toegepast. We hebben dit nog niet 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 vanaf een specifiek IP-adres wilt toestaan, zoals een werk- of thuis-IP-adres van 203.0.113.4, moet u de from-parameter gebruiken en vervolgens 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 to any port toe te voegen gevolgd door het poortnummer. Bijvoorbeeld, als u 203.0.113.4 wilt toestaan om verbinding te maken met poort 22 (SSH), gebruikt u dit commando:

  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. Bijvoorbeeld, als u alle IP-adressen wilt toestaan variërend van 203.0.113.1 tot 203.0.113.254, kunt u dit commando gebruiken:

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

Vergelijkbaar kunt u ook de bestemmingspoort specificeren waarmee het subnet 203.0.113.0/24 verbinding mag maken. We gebruiken opnieuw poort 22 (SSH) als voorbeeld:

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

Verbindingen met een specifieke netwerkinterface

Als u een firewallregel wilt maken die alleen van toepassing is op een specifieke netwerkinterface, kunt u dat 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 dit commando:

  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 output 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, zou u met dit commando HTTP-verkeer (poort 80) ernaar kunnen toestaan:

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

Dit zou uw server in staat stellen HTTP-verzoeken van het openbare internet te ontvangen.

Of, als u wilt dat uw MySQL-databaseserver (poort 3306) luistert naar verbindingen op de privénetwerkinterface eth1, zou u bijvoorbeeld dit commando kunnen 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 verbinding te maken met uw MySQL-database.

Stap 6 — Verbindingen weigeren

Als u de standaardbeleidslijn 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 veilig firewallbeleid door u te verplichten regels te maken die expliciet bepaalde poorten en IP-adressen doorlaten.

Echter, soms wilt u 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 standaard inkomende beleid wilt wijzigen naar toestaan (wat niet wordt aanbevolen), zou u weigeren regels moeten maken voor alle services of IP-adressen waarvoor u geen verbindingen wilt toestaan.

Om weigeren regels te schrijven, kunt u de eerder beschreven opdrachten gebruiken en toestaan vervangen door weigeren.

Bijvoorbeeld, om HTTP-verbindingen te weigeren, kunt u deze opdracht 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 deze opdracht gebruiken:

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

In sommige gevallen wilt u mogelijk ook uitgaande verbindingen vanaf de server blokkeren. Om alle gebruikers te weigeren om 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 zal al het uitgaande SMTP-verkeer op de server blokkeren.

Stap 7 — Regels verwijderen

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

Het verwijderen van een UFW-regel op nummer

Om een UFW-regel te verwijderen op basis van het nummer ervan, wil je eerst een genummerde lijst krijgen van al je firewallregels. Het UFW-statuscommando heeft een optie om naast elke regel nummers weer te geven, 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 je besluit dat je regelnummer 2 wilt verwijderen, degene die poort 80 (HTTP) verbindingen toestaat, kun je dit specificeren in een UFW-verwijderingscommando zoals dit:

  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. Let op dat als je IPv6 hebt ingeschakeld, je ook de overeenkomstige IPv6-regel wilt verwijderen.

Het verwijderen van een UFW-regel op naam

In plaats van regelnummers te gebruiken, kun je ook verwijzen naar een regel aan de hand van zijn menselijk leesbare aanduiding, die is gebaseerd op het type regel (meestal 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 je een toestaan-regel wilt verwijderen voor een toepassingsprofiel genaamd Apache Volledig dat eerder was ingeschakeld, kun je dit gebruiken:

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

De opdracht delete werkt op dezelfde manier voor regels die zijn gemaakt met verwijzing naar een service op basis van de naam of poort. Bijvoorbeeld, als je eerder een regel hebt ingesteld om HTTP-verbindingen toe te staan met sudo ufw allow http, zo zou je die regel kunnen verwijderen:

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

Omdat servicenamen uitwisselbaar zijn met poortnummers bij het specificeren van regels, zou je ook naar dezelfde regel kunnen verwijzen 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 — UFW-status en -regels controleren

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

  1. sudo ufw status verbose

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

Output
Status: inactive

Als UFW actief is, zoals het zou moeten zijn als je Stap 3 hebt gevolgd, zal de uitvoer aangeven dat het actief is en eventuele ingestelde regels weergeven. Bijvoorbeeld, als de firewall is ingesteld om SSH (poort 22) verbindingen vanaf elke locatie 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 — Schakel de firewall uit of reset deze

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

Alle 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 hebt geconfigureerd maar je besluit opnieuw te willen 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. Dit zou je een frisse start moeten geven 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 behulp van DigitalOcean App Platform. Laat DigitalOcean zich richten op het schalen van je app.

Conclusie

Je firewall is nu geconfigureerd om (ten minste) 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 zal zijn.

Om meer te weten te komen over veel voorkomende UFW-configuraties, bekijk de UFW Essentials: Veelvoorkomende Firewall-regels en Commando’s tutorial.

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