Hoe configureer je een brandmuur met UFW op Ubuntu?

Inleiding

UFW, of Uncomplicated Firewall, is een interface voor iptables dat is geoptimaliseerd voor het vereenvoudigen 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 gebruiken om een firewall correct te configureren. Als u beginnen gaat met het beveiligen van uw netwerk en u niet weet welk gereedschap u moet gebruiken, is UFW misschien de juiste keuze voor u.

Dit handleiding zal u leren hoe u een firewall kunt instellen met UFW op Ubuntu v18.04 en hoger.

Vereisten

Als u Ubuntu versie 16.04 of lager gebruikt, raden we u aan om te upgraden naar een nieuwere versie, omdat Ubuntu geen ondersteuning meer biedt voor deze versies. Dit verzameling gidsen zal u helpen bij het upgraden van uw Ubuntu-versie.

Om deze handleiding te volgen, heeft u nodig:

  • A server running Ubuntu, met een gebruiker die niet-root is en sudo privilegees heeft. Voor instructies over hoe deze op te stellen, kies je distributie uit deze lijst en volg onze Initial Server Setup Guide.
  • UFW is standaard geïnstalleerd op Ubuntu. Als het voor somethings redenom een andere reden om UFW te installeren, kan je hem installeren met sudo apt install ufw.

Ubuntu firewall met UFW configureren

  1. IPv6 inschakelen
  2. Standaard politieken instellen
  3. Sta SSH-verbindingen toe
  4. UFW inschakelen
  5. Sta andere vereiste verbindingen toe
  6. Verboden verbindingen
  7. Firewallregels verwijderen
  8. Controleer UFW-status en regels
  9. Hoe je de firewall op Ubuntu uitschakelt of herstelt

Stapel 1 — IPv6 inschakelen

In de meeste versies van Ubuntu is IPv6 standaard ingeschakeld. In de praktijk betekent dat het meestal dat alle firewall-regels die op de server worden toegevoegd zowel een IPv4 als een IPv6 versie inhouden, waarbij de laatste door v6 wordt gedetecteerd in de uitvoer van de UFW-statuscommando. Om te vergewissen of IPv6 is ingeschakeld, kun je je configuratiebestand bij /etc/default/ufw openen met nano of je favoriete commando-lijneeditor:

  1. sudo nano /etc/default/ufw

Zorg dan dat de waarde van IPV6 is gezet op yes. Het zou er dan zo uitzien:

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

Sla de wijzigingen op en sluit het bestand af. Als je nano gebruikt, kan je dat doen door CTRL+X, Y en ENTER te typen.

Wanneer UFW later in deze guide wordt ingeschakeld, wordt het geconfigureerd om voor IPv4 en IPv6 firewall-regels te schrijven.

Stapel 2 — Standaardpolitieën instellen

Als je met UFW begint, is een goede eerste stap om te controleren wat de standaard firewall-politieën zijn. Deze regels controleren hoe uw trafiek wordt behandeld wanneer het niet expliciet aan een andere regel komt te pas.

Standaard is UFW ingesteld op ‘weigeren alle inkomende verbindingen’ en ’toestaan alle uitgaande verbindingen’. Dit betekent dat iedereen die probeert met uw server te verbinden niet in staat zal zijn te verbinden, terwijl elke toepassing binnen het server gehecht wel in staat zal zijn de buitenwereld te bereiken. Bijkomende regels om specifieke diensten en poorten toe te staan zijn inbegrepen als uitzonderingen op deze algemene beleid.

Om zeker te zijn dat u verder kunt volgen met de rest van deze handleiding, zal u nu uw UFW standaardbeleid voor inkomende en uitgaande traffic instellen.

Om het standaard UFW inkomende beleid te instellen op weigeren, voert u 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 te instellen op toestaan, voert u 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 standaarden in op weigeren van inkomende en toestaan van uitgaande verbindingen. Deze brandmerk defaults alleen zouden genoeg kunnen zijn voor een persoonlijke computer, maar servers moeten typisch reageren op inkomende aanvragen van externe gebruikers. We zullen dat volgend bekijken.

Stap 3 — Toestaan van SSH-verbindingen

Als u uw UFW vuurwal nu zou activeren, zou het 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 op die soort aanvragen reageert. Als u een cloud-server gebruikt, zal u waarschijnlijk inkomende SSH-verbindingen willen toestaan zodat u naar en uw server kunt beheren.

Sta de OpenSSH UFW Applicatieprofiel Toe

Bij de installatie zal het merendeel van de applicaties die afhankelijk zijn van netwerkverbindingen een applicatieprofiel registreren binnen UFW, wat gebruikers in staat stelt om snel extern toegang tot een dienst toe te staan of te weigeren. Je kunt controleren welke profielen momenteel geregistreerd zijn in UFW met:

  1. sudo ufw app list
Output
Available applications: OpenSSH

Om het OpenSSH applicatieprofiel in te schakelen, voer het volgende uit:

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

Dit zal firewallregels maken om alle verbindingen op poort 22 toe te staan, wat de poort is waar de SSH-daemon standaard naar luistert.

SSH Toestaan op Naam van Dienst

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

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

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

SSH Toestaan op Poortnummer

Uit alternatieve gezichtspunten kunt u de gelijke regel opgeven door het specificeren van de poort in plaats van het toepassingsprofiel of dienstnaam. Bijvoorbeeld, deze opdracht werkt hetzelfde als de voorgaande voorbeelden:

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

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

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

Nu uw brandmaak is ingesteld om inkomende SSH-verbindingen toe te staan, kunt u deze activeren.

Stap 4 — UFW activeren

Uw brandmaak zou nu moeten zijn ingesteld om SSH-verbindingen toe te staan. Om te verifiëren welke regels tot nu toe zijn toegevoegd, zelfs als de brandmaak nog niet is geactiveerd, kunt u gebruik maken van:

  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 brandmaak activeren 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 krijgt een waarschuwing dat zegt dat de opdracht bestaande SSH-verbindingen kan verstoren. U heeft al een brandmaakregel ingesteld die SSH-verbindingen toestaat, dus het zou goed zijn door te gaan. Reactieer op het aanroepingsscherm met y en druk op ENTER.

De brandmaak is nu actief. Voer de opdracht sudo ufw status verbose uit om de ingestelde regels te zien. De rest van deze handleiding beschrijft hoe u UFW in detail kan gebruiken, zoals het toestaan of verhinderen van verschillende soorten verbindingen.

Stapel 5 — Toevoegen van andere connecties

Op deze manier moet je alle andere verbindingen toevoegen die je server nodig heeft om te reageren. De verbindingen die je toevoegt, hangen af van de specifieke behoeften die je hebt. Je kent al hoe je regels schrijft die verbindingen toevoegen gebaseerd zijn op een applicatieprofiel, een servicenaam of een poort; je hebt dit al gedaan voor SSH op poort 22. Je kunt ook zo doen met:

  • HTTP op poort 80, wat ongecryptede webservers gebruiken, met sudo ufw allow http of sudo ufw allow 80
  • HTTPS op poort 443, wat encryptiede webservers gebruiken, met sudo ufw allow https of sudo ufw allow 443
  • Apache met beide HTTP en HTTPS, met sudo ufw allow 'Apache Full'
  • Nginx met beide HTTP en HTTPS, met sudo ufw allow 'Nginx Full'

Vergeten niet te controleren welke applicatieprofielen beschikbaar zijn voor je server met sudo ufw app list.

Er zijn meerdere manieren om verbindingen toe te voegen, buiten het specificeren van een poort of bekende service naam. We zien er een paar van in de volgende stappen.

Specifieke portranges

Je kunt portrangen specificeren met UFW. Sommige applicaties gebruiken meerdere ports in plaats van een enkele port.

Bijvoorbeeld, om X11-connecties toe te laten, die gebruik maken van de poorten 60006007, gebruik je deze opdrachten:

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

Wanneer je portrangen specifiek wilt definieren met UFW, moet je het protocool (tcp of udp) specificeren waar de regels van toepassing zijn. We hebben dit niet eerder gezegd omdat je bij het niet specificeren automatisch beide protocollen toestaat, wat in de meeste gevallen goed is.

Specifieke IP-adressen

Wanneer je werkt met UFW, kun je ook IP-adressen specificeren binnen je regels. Bijvoorbeeld, als je verbindingen wilt toestaan van een specifieke IP-adres, zoals een werk- of thuis IP-adres van 203.0.113.4, moet je de from parameter gebruiken, met daarin het IP-adres dat je toestaan wil:

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

Je kan ook een poort toevoegen waarop het IP-adres wordt toegestaan door to any port te volgen met de poortnummer. Bijvoorbeeld, als je 203.0.113.4 wilt verbinden aan poort 22 (SSH), gebruik je deze opdracht:

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

Subnetten

Als je een subnet van IP-adressen wilt toevoegen, kun je dat doen met behulp van de CIDR-notatie, om een netmask te specificeren. Bijvoorbeeld, als je alle IP-adressen wilt toevoegen die van 203.0.113.1 tot en met 203.0.113.254 zijn, kunt je dit commando gebruiken:

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

Zoals bij het toevoegen van een subnet aan een bepaalde netwerkinterface; we zullen hierbij de poort 22 (SSH) als voorbeeld nemen:

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

Toekomstige verbindingen naar een specifieke netwerkinterface

Als je een firewallregel wilt maken die alleen toegepast wordt op een specifieke netwerkinterface, kan je dat doen door “allow in on” te gebruiken gevolgd door de naam van de netwerkinterface.

Je moet mogelijk je netwerkinterfaces bekijken voordat je verdergaat. Om dat te doen, gebruik je deze 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 uitvoer onder de lijn geeft aan welke netwerkinterface namen er zijn. Ze zijn vaak genaamd iets als eth0 of enp3s2.

Dus, als je een publieke netwerkinterface hebt genaamd eth0, kunt je HTTP-traffic (poort 80) toevoegen met deze commando:

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

Door deze opdracht zouden je server enkel HTTP-verzoeken kunnen ontvangen van de openbare internet.

Om je MySQL-databaserver (poort 3306) te laten luisteren voor verbindingen op de privénetwerkinterface eth1, bijvoorbeeld, kunt u deze commando gebruiken:

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

Dit zou ervoor zorgen dat andere servers op je privénetwerk aan de MySQL-database kunnen verbinden.

Stap 6 — Toekomstige verbindingen afsluiten

Als u het standaard beleid voor inkomende connecties niet heeft gewijzigd, is UFW ingesteld om alle inkomende connecties te blokkeren. In principe maakt dit het proces van het maken van een veilige brandweerpolitie simpeler door u te verplichten om regels te schrijven die specifiek toelaten welke poorten en IP-adressen er toegestaan moeten worden.

Maar soms wilt u specifieke verbindingen afsluiten op basis van de bron-IP-adres of subnet, misschien omdat u weet dat uw server wordt aangevallen van daar. Ook als u wilt veranderen van de standaard incomende politie naar toevoegen (waarvan niet geadviseerd wordt), moet u afsluitenregels schrijven voor elke dienst of IP-adres waarvoor u geen connecties wilt toevoegen.

Om afsluitenregels te schrijven, kunt u de eerder beschreven commando’s gebruiken, met toevoegen in plaats van blokkeren.

Bijvoorbeeld, om HTTP-verbindingen te blokkeren, kan u deze commando gebruiken:

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

Of als u alle verbindingen wilt blokkeren van 203.0.113.4 gebruikt u deze commando:

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

Als je sommige gevallen wilt blokkeren waarin de server uitgaande verbindingen maakt, kun je alle gebruikers van de server blokkeren die een poort op de server gebruiken, zoals poort 25 voor SMTP-traffic. Om alle uitgaande SMTP-traffic op de server te blokkeren, kunt u deny out volgens het portnummer gebruiken:

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

Dit zal alle uitgaande SMTP-traffic op de server blokkeren.

Stap 7: Delete Rules

Kennis over hoe je regels van de firewall verwijdert is net zo belangrijk als over hoe je ze aanmaakt. Er zijn twee verschillende manieren om te specificeren welke regels te verwijderen: door middel van het regelnummer of door middel van een menselijke benaming (zelfs als de regels werden gecreerd).

Verwijderen van een UFW-regel Naar Nummer

Om een UFW-regel te verwijderen met behulp van zijn nummer, moet je eerst een nummerslijst van alle firewall-regels krijgen. De UFW status commando heeft een optie om nummers bij elke regel te laten weergeven, zoals hieronder getoond wordt:

  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 de regel met het nummer 2 wilt verwijderen, die toegestaan heeft aan connecties via poort 80 (HTTP), dan kan je deze specificeren in een UFW delete commando zoals dit:

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

Dit zal je prompt voor een bevestiging brengen en regel 2, die HTTP-connecties toestaat, verwijderen. Noteer dat je ook de corresponderende IPv6-regel zou moeten verwijderen als je IPv6 is ingeschakeld.

Verwijderen van een UFW-regel op naam

In plaats van regelnummers te gebruiken, kun je ook verwijzen naar een regel op basis van de voor mensen leesbare naam, die gebaseerd is op het type regel (meestal allow of deny) en de naam van de dienst of het poortnummer dat het doel van deze regel was, of de naam van het toepassingprofiel indien dat werd gebruikt. Bijvoorbeeld, als je een allow-regel wilt verwijderen voor een toepassingprofiel genaamd Apache Full dat eerder is ingeschakeld, kun je 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 referentie naar een dienst op naam of poort. Bijvoorbeeld, als je eerder een regel hebt ingesteld om HTTP-verbindingen toe te staan met sudo ufw allow http, dit is hoe je die regel kunt verwijderen:

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

Omdat dienstnamen wisselbaar zijn met poortnummers bij het specificeren van regels, kun je ook verwijzen naar dezelfde regel 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 gedisabled, wat het standaard is, zie je iets als dit:

Output
Status: inactive

Als UFW actief is, wat je moet hebben als je de stap 3 volgde, zegt de uitvoer dat het actief is en lijst alle regels die zijn ingesteld. Bijvoorbeeld, als de firewall is ingesteld om SSH-connecties te accepteren vanuit elke locatie (poort 22), ziet de uitvoer er dan bijvoorbeeld als volgende uit:

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 weten hoe UFW de firewall heeft configureerd.

Stap 9 — Deactiveren of Resetten van de Firewall

Als je besluit dat je geen gebruik wilt maken van de UFW firewall, kunt je hem deactiveringen met deze commando:

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

Alle regels die je met UFW hebt gemaakt zullen niet meer actief zijn. Je kan altijd sudo ufw enable gebruiken als je later noodzaak hebt om het te activeren.

Als je al UFW-regels hebt geconfigureerd maar je besluit dat je een nieuwe start wil beginnen, kun je de reset-opdracht 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 deactiveren en alle eerder definiënde regels verwijderen. Dit zou je normale instellingen laten blijven, als je ze op enige moment had gewijzigd.

Deploy your frontend applications from GitHub using DigitalOcean App Platform. Let DigitalOcean focus on scaling your app.

Conclusie

Uw firewall is nu geconfigureerd om ten minste SSH-verbindingen toe te staan. Zorg ervoor dat u ook andere inkomende verbindingen toestaat die uw server nodig heeft, terwijl u onnodige verbindingen beperkt, zodat uw server functioneel en veilig blijft.

Om meer algemene UFW-configuraties te leren, kunt u de handleiding UFW Essentials: Common Firewall Rules and Commands raadplegen.

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