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
- IPv6 inschakelen
- Standaardbeleid instellen
- SSH-verbindingen toestaan
- UFW inschakelen
- Andere vereiste verbindingen toestaan
- Verbindingen weigeren
- Firewallregels verwijderen
- Controleer UFW-status en -regels
- 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:
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 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:
OutputDefault 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:
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 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:
OutputAvailable applications:
OpenSSH
Om het OpenSSH-toepassingsprofiel in te schakelen, voer je 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.
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
.
OutputRule 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:
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 gebruiken:
OutputAdded 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:
OutputCommand 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
ofsudo ufw allow 80
- HTTPS op poort 443, 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 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:
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:
OutputRule 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:
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. 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:
OutputRule 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:
OutputRule 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:
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 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:
OutputRule 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:
OutputRule 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:
OutputRule added
Rule added (v6)
Of als u alle verbindingen vanuit 203.0.113.4
wilt weigeren, kunt u deze opdracht gebruiken:
OutputRule 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:
OutputRule 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:
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:
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. 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:
OutputRule 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:
OutputRule 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
:
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 — UFW-status en -regels controleren
Op elk moment kun je de status van UFW controleren met deze opdracht:
Als UFW uitgeschakeld is, wat standaard het geval is, zie je iets dergelijks:
OutputStatus: 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:
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 — Schakel de firewall uit of reset deze
Als je besluit om de UFW-firewall niet te gebruiken, kun je deze deactiveren met dit commando:
OutputFirewall 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:
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. 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