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
- Activeer IPv6
- Stel standaardbeleidsregels in
- Sta SSH-verbindingen toe
- UFW inschakelen
- Sta alle andere vereiste verbindingen toe
- Weiger verbindingen
- Firewallregels verwijderen
- Controleer de status en regels van UFW
- 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:
Zorg er vervolgens voor dat de waarde van IPV6
is ingesteld op yes
. Het zou er zo uit moeten zien:
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:
OutputDefault 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:
OutputDefault 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:
OutputAvailable applications:
OpenSSH
Om het OpenSSH-toepassingsprofiel in te schakelen, voert u het volgende uit:
OutputRule 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
.
OutputRule 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:
OutputRule 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:
OutputRule 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:
OutputAdded 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:
OutputCommand 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
ofsudo ufw allow 80
- HTTPS op poort 443, dat is wat versleutelde webservers gebruiken, met behulp van
sudo ufw allow https
ofsudo 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 6000
–6007
gebruiken, gebruikt u deze commando’s:
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:
OutputRule 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:
OutputRule 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:
OutputRule 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:
OutputRule 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:
Output Excerpt2: 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:
OutputRule 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:
OutputRule 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:
OutputRule added
Rule added (v6)
Of als u alle verbindingen vanuit 203.0.113.4
wilt weigeren, kunt u dit commando gebruiken:
OutputRule 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:
OutputRule 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:
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:
OutputDeleting:
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:
OutputRule 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:
OutputRule 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
:
OutputRule 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:
Als UFW is uitgeschakeld, wat standaard het geval is, zie je iets als dit:
OutputStatus: 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:
OutputStatus: 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:
OutputFirewall 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:
OutputResetting 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