web2 logo

Artikel Links Notities

Firewall gebruiken met ufw en gufw

De Linux kernel heeft een packet filtering system dat netfilter heet en deze wordt ingesteld via opdrachten voor iptables. Iptables is een complete firewall oplossing die zowel zeer configurabel als zeer flexibel is. Het instellen van iptables is echter complex en daarom zijn er ook eenvoudiger manieren bedacht om de firewall in te stellen. De naam ufw staat voor Uncomplicated Firewall. In Debian en Ubuntu is ufw het standaard configuratiemiddel voor het instellen van de firewall. Het is ontworpen om het instellen van iptables te vereenvoudigen. Standaard staat ufw echter uit, je moet dit zelf aanzetten, de standaardregels staan dan wel meteen goed voor normaal thuisgebruik. Als je software zoals Samba, Apache, FTP, MySQL, SSH, VNC of experimentele software installeert op een laptop die je ook buiten je thuisnetwerk gebruikt, dan is een firewall geen overbodige luxe. Een firewall kan voorkomen dat ongewenst dataverkeer naar buiten gaat of naar binnen komt. Docker stelt iptables rechtstreeks in, ufw regels die je instelt gelden niet voor Docker containers. Gufw is beschikbaar als grafische interface voor ufw en is niet standaard geinstalleerd, die moet je dus zelf nog installeren als je deze wil gebruiken. sudo apt install gufw

gufw screenshot

gufw screenshot

gufw screenshot

Het bewerken van de instellingen is zeer eenvoudig via de grafische interface van gufw. Wat via de commandline ingesteld kan worden zoals hieronder op deze pagina uitgelegd, kan ook op een eenvoudige, voor de hand liggende manier, via de grafische interface gedaan worden.

ufw defaults

De defaults voor ufw zijn dat alle inkomende verbindingen tegengehouden worden en alle uitgaande verbindingen zijn toegestaan. Je moet dus zelf poorten openzetten om inkomende verbindingen toe te staan. Alle programma's kunnen standaard wel verbindingen naar buiten maken. De defaults staan in /etc/default/ufw. De defaults kan je ook zelf instellen: ufw default deny incoming ufw default allow outgoing Controleren of IPv6 aanstaat in de configuratie: less /etc/default/ufw | grep IPV6 Het resultaat moet zijn: IPV6=yes

ufw configuratie bestanden

ufw-config screenshot

/etc/default/ufw
Hier onder andere: default policies, IPv6 support en te gebruiken kernel modules.
/etc/ufw/before6.rules
Deze regels worden als eerste bekeken, nog voor enige andere regels die via de ufw opdrachten worden toegevoegd.
/etc/ufw/after6.rules
Deze regels worden pas bekeken na de regels die via de ufw opdrachten worden toegevoegd.
/etc/ufw/sysctl.conf
kernel network tunables
/var/lib/ufw/user6.rules of /lib/ufw/user6.rules
Regels die via de ufw opdrachten zijn toegevoegd.
/etc/ufw/ufw.conf
Hier wordt ingesteld of ufw vanaf de start van het systeem ingeschakeld is en ook het LOGLEVEL wordt hier bepaald.
/etc/ufw/after.init
Script dat draait nadat ufw is geinitialiseerd.
/etc/ufw/before.init
Script dat draait voordat ufw is geinitialiseerd.

ufw aan- en uitzetten

Het aanzetten van ufw kan met: sudo ufw enable Let op! Als je via SSH bent ingelogd, dan krijg je een waarschuwing, als je een regel hebt ingesteld dat SSH is toegestaan, dan kan je doorgaan, anders moet eerst een regel instellen om te voorkomen dat je de verbinding met het systeem verliest na het inschakelen van ufw. SSH toestaan kan via: sudo ufw allow ssh Als je SSH niet via de standaardpoort gebruikt, maar via een andere poort, bijvoorbeeld 4538, dan moet je die openzetten: sudo ufw allow 4538/tcp Na het aanzetten krijg je de melding: Firewall is actief en ingeschakeld bij het opstarten van het systeem. Dit betekent dat na een herstart van het systeem de firewall automatisch actief blijft. Het uitzetten van ufw gaat met: sudo ufw disable

ufw status opvragen

De status van ufw opvragen kan met: sudo ufw status Je krijgt dan te zien of ufw actief is en indien deze actief is, krijg je ook de huidige ufw regels te zien die worden toegepast op je iptables. Een uitgebreidere status opvragen kan met sudo ufw status verbose voorbeeld uitvoer: Status: actief Loggen: on (low) Standaardwaarde: deny (inkomend), allow (uitgaand), disabled (omgeleid) Nieuwe profielen: skip Welke regels gelden kan je opvragen met: sudo ufw show raw Deze regels staan in configuratiebestanden die eindigen op .rules in: /etc/ufw

Verbindingen toestaan (poorten openzetten)

Let op! De volgorde van de regels is belangrijk! Zodra een passende geldende regel gevonden is, wordt er niet verder gekeken. De meest specifieke regels moeten daarom vóór de meer algemene regels staan. Als je regels aanpast kan het zijn dat je oude regels moet verwijderen om te zorgen dat de regels in de juiste volgorde staan. Een verbinding toestaan op een poort kan met: sudo ufw allow poort/protocol Het gedeelte met /protocol is optioneel, mag dus ook worden weggelaten indien je zowel tcp als udp wil toestaan. Voorbeelden: #Inkomende verkeer via tcp en udp toestaan met poort 53 (DNS) sudo ufw allow 53 #Inkomend verkeer toestaan via tcp met poort port 53 (DNS) sudo ufw allow 53/tcp #Inkomend verkeer toestaan via udp met poort 53 (DNS) sudo ufw allow 53/udp Je kunt ook verbindingen toestaan voor een service via de naam van de service. Een lijst met services kan je opvragen via: less /etc/services Als je een bepaalde service zoekt, bijvoorbeeld ftp, dan kan je dit gebruiken: less /etc/services | grep ftp Je krijgt dan bijvoorbeeld: ftp-data 20/tcp ftp 21/tcp tftp 69/udp sftp 115/tcp ftps-data 989/tcp # FTP over SSL (data) ftps 990/tcp venus-se 2431/udp # udp sftp side effect codasrv-se 2433/udp # udp sftp side effect gsiftp 2811/tcp gsiftp 2811/udp frox 2121/tcp # frox: caching ftp proxy zope-ftp 8021/tcp # zope management by ftp De algemene vorm voor het toestaan van verbinding via een naam van een service is: sudo ufw allow service-naam Voorbeeld: #ssh toestaan: sudo ufw allow ssh Verkeer van een bepaald ip-adres toestaan: sudo ufw allow from ip-adres Voorbeeld: sudo ufw allow from 54.236.62.49 Verkeer van een bepaald subnet toestaan via het subnetmask: sudo ufw allow from 192.168.1.0/24 Verkeer van een bepaald subnet toestaan via het subnetmask op een specifieke poort: sudo ufw allow from 192.168.1.0/24 to any port 22 Verkeer toestaan op basis van een specifieke poort en ip-adres: sudo ufw allow from doel to bestemming port poortnummer Voorbeeld: #Toegang toestaan voor ip-adres 192.168.0.4 tot poort 22 voor alle protocollen sudo ufw allow from 192.168.0.4 to any port 22 Verkeer toestaan op basis van specifieke poort, ip-adres en protocol: sudo ufw allow from doel to bestemming port poortnummer proto protocolnaam Voorbeeld: #Toegang toestaan voor ip-adres 192.168.0.4 tot poort 22 voor TCP sudo ufw allow from 192.168.0.4 to any port 22 proto tcp Verkeer toestaan voor een reeks opvolgende poorten kan ook, je moet dan wel het protocol verplicht meegeven. Om zowel een reeks voor tcp als udp open te zetten heb je dan 2 regels nodig: sudo ufw allow 7100:7200/tcp sudo ufw allow 7100:7200/udp Verkeer toestaan via de naam van een programma kan ook. In de map /etc/ufw/applications.d staan applicatieprofielen van de programma's die bij de installatie hier een profiel hebben neergezet. Het profiel beschrijft het programma en bevat de instellingen voor ufw. De bestanden in deze map kunnen worden aangepast als er een afwijkend poortnummer wordt gebruikt. Het profiel opvragen, bijvoorbeeld voor 'Samba', kan met: sudo ufw app info 'Samba' Je krijgt dan zoiets: Profiel: Samba Titel: LanManager-like file and printer server for Unix Omschrijving: The Samba software suite is a collection of programs that implements the SMB/CIFS protocol for unix systems, allowing you to serve files and printers to Windows, NT, OS/2 and DOS clients. This protocol is sometimes also referred to as the LanManager or NetBIOS protocol. Poorten: 137,138/udp 139,445/tcp Zien welke profielen er zijn kan met: sudo ufw app list Je krijgt dan bijvoorbeeld: Beschikbare programma's: Apache Apache Full Apache Secure CUPS OpenSSH Samba syncthing syncthing-gui Voorbeeld van poorten openzetten op basis van de naam van een programma: sudo ufw allow Samba Een uitgebreidere regel gebruiken kan ook: sudo ufw allow from 192.168.1.0/24 to any app Samba Poortnummers hoef je nu niet op te geven, die komen uit het bestand in /etc/ufw/applications.d. Verkeer toestaan via een bepaalde netwerk interface is ook mogelijk. Je kunt de interfaces opvragen via: ip addr | grep BROADCAST je krijgt dan bijvoorbeeld: 2: enp5s0: mtu 1500 qdisc mq state UP group default qlen 1000 3: virbr0: mtu 1500 qdisc noqueue state DOWN group default qlen 1000 4: virbr0-nic: mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000 Verkeer toestaan via enp5s0 : sudo ufw allow in on enp5s0 to any port 8080

Verbindingen tegenhouden

De default voor inkomende verbindingen is: alles tegenhouden tenzij het specifiek is opengezet. Regels maken om verbindingen tegen te houden gaat op dezelfde manier als het maken van regels om verbindingen toe te staan, alleen in plaats van allow gebruk je nu deny. Verbindingen tegenhouden op een poort kan met: sudo ufw deny poort/protocol Het gedeelte met /protocol is optioneel, mag dus ook worden weggelaten indien je zowel tcp als udp wil tegenhouden. Voorbeelden: #Inkomende verkeer via tcp en udp tegenhouden met poort 53 (DNS) sudo ufw deny 53 #Inkomend verkeer tegenhouden via tcp met poort port 53 (DNS) sudo ufw deny 53/tcp #Inkomend verkeer tegenhouden via udp met poort 53 (DNS) sudo ufw deny 53/udp Je kunt ook verbindingen tegenhouden voor een service via de naam van de service: sudo ufw deny service-naam Voorbeeld: #ssh tegehouden: sudo ufw deny ssh Verbinding tegenhouden op basis van ip-adres: sudo ufw deny from ip-adres Voorbeeld: sudo ufw deny from 54.236.62.49 Verbinding tegenhouden op basis van poort en ip-adres: sudo ufw deny from ip-adres to protocol port poortnummer Voorbeeld: sudo ufw deny from 54.236.62.49 to any port 22 Verbinding tegehouden op basis van een subnet en poort: sudo ufw deny from 54.236.62.49/24 to any port 22

Verkeer beperken

Je kunt verkeer ook beperken als je bijvoorbeeld bang bent voor een Denial of Service attack, bijvoorbeeld via poort 80 (HTTP): sudo ufw limit 80/tcp Standaard zal met deze regel de verbinding nu worden geblokkeerd na 6 pogingen in 30 seconden.

Bestaande regels verwijderen of tussenvoegen

Een regel verwijderen kan door delete te plaatsen voor de originele regel (na sudo ufw): Originele regel (poort 80 wordt gebruikt voor HTTP): sudo ufw deny 80/tcp Deze regel verwijderen: sudo ufw delete deny 80/tcp Het verwijderen van ingewikkelde regels kan eenvoudiger door het nummer van de regel te gebruiken. Eerst de nummers van de regels opvragen: sudo ufw status numbered Dan de regel verwijderen met het nummer van de regel: sudo ufw delete nummer De regel met het nummer dat je hebt opgegeven wordt nu verwijderd. Je kan ook een regel tussenvoegen via een regelnummer: sudo ufw insert 1 allow from 54.236.62.49

Logging

Logging aanzetten: sudo ufw logging on Logging uitzetten: sudo ufw logging off Het niveau van logging kan ingesteld worden op 'low', 'medium', 'high' en 'full'. Standaard is logging ingesteld op 'low'. sudo ufw logging medium Logs bekijken kan via: less /var/log/ufw.log In de logs kom je onder andere de datum en tijd tegen, een gat hier in kan betekenen dat er met de logs is geknoeid. De hostnaam staat er in en de uptime (tussen vierkante haken) en je kan deze zaken tegenkomen:

[UFW BLOCK]
De gebeurtenis tussen vierkante haken, hier is een geblokkeerde verbinding gelogd.
IN
Indien dit een waarde bevat, dan ging het om een inkomende verbinding.
OUT
Indien dit een waarde bevat, dan ging het om een uitgaande verbinding.
MAC
Een combinatie van de bestemming en de bron MAC adressen.
SRC
Het IP van de pakket bron.
DST
Het IP van de pakket bestemming.
LEN
Pakket lengte.
TTL
De pakket TTL (Time To Live).
PROTO
Het protocol van het pakket.
SPT
De bron poort van het pakket.
DPT
De bestemming poort van het pakket.
WINDOW
De pakketgrootte die de verzender kan ontvangen.
SYN URGP
Geeft aan of een drieweg handshake nodig is, 0 betekent van niet.

Ping toestaan of juist niet

Standaard staat ufw ping verzoeken toe. Voor het onderzoeken van netwerkproblemen is het ook handig als ping verzoeken worden toegestaan. Mocht je toch ping verzoeken willen uitzetten, dan moet dat via het bewerken van het bestand /etc/ufw/before.rules. Er zijn 2 methoden om ping uit te zetten: methode 1: via het verwijderen van deze regels: # ok icmp codes -A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT -A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT -A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT -A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT methode 2: via het aanpassen van deze regels: verander op elke regel hier "ACCEPT" in "DROP": # ok icmp codes -A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP -A ufw-before-input -p icmp --icmp-type source-quench -j DROP -A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP -A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP -A ufw-before-input -p icmp --icmp-type echo-request -j DROP

Proefdraaien

Als ufw met de optie --dry-run wordt uitgevoerd, worden de filterregels getoond maar niet toegepast. Voorbeeld voor het openstellen van de HTTP netwerkpoort: sudo ufw --dry-run allow http

Opnieuw beginnen

Als je opnieuw wilt beginnen en alles terug wil zetten naar de default instellingen, dan kan dat met: sudo ufw reset Alle actieve regels worden dan gewist.

Meer info over ufw en gufw

De help is te vinden met: ufw --help De manpages hebben ook info over ufw: man ufw

naar boven

term zoeken

Notitieruimte