Firewall gebruiken met ufw en gufw

Op deze pagina:

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 <?php echo $ip; ?>

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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
4: virbr0-nic: <BROADCAST,MULTICAST> 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 <?php echo $ip; ?>

Verbinding tegenhouden op basis van poort en ip-adres:


sudo ufw deny from ip-adres to protocol port poortnummer

Voorbeeld:


sudo ufw deny from <?php echo $ip; ?> to any port 22

Verbinding tegehouden op basis van een subnet en poort:


sudo ufw deny from <?php echo $ip; ?>/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 <?php echo $ip; ?>

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

Internet:

UFW (ubuntu) Gufw (ubuntu)

 

Verwante artikelen