Hvad er UFW?
UFW er en kommandolinjegrænseflade til iptables, som er Linux-kernens pakkefiltreringsmotor. Du behøver ikke forstå iptables for at bruge UFW. Det er pointen.
Det er inkluderet i Ubuntu siden version 8.04 og er tilgængeligt på alle Debian-baserede distributioner: Debian, Raspberry Pi OS, Ubuntu Server. Pakken hedder ufw. Tjek om den er installeret:
sudo ufw version
# Bør returnere noget ala: ufw 0.36.1
Hvis den ikke er installeret:
sudo apt update && sudo apt install -y ufw
UFW er ikke aktiveret som standard. Kør sudo ufw status og du får sandsynligvis Status: inactive. Det ændrer vi.
sudo ufw allow ssh inden du kører sudo ufw enable. Springer du det over på en fjernserver, låser du dig selv ude og kan ikke komme ind igen uden fysisk adgang til maskinen.
Standard politik: afvis alt indgående
Udgangspunktet er to regler der dækker al trafik du ikke eksplicit åbner for:
sudo ufw default deny incoming # afvis alt indgående som standard
sudo ufw default allow outgoing # tillad alt udgående som standard
Disse to linjer er fundamentet. Alt hvad du tilføjer bagefter er undtagelser til den indgående regel.
Tillad SSH inden alt andet
Gør dette nu, inden du aktiverer firewallen:
# Kort form (bruger /etc/services til at slå port 22 op)
sudo ufw allow ssh
# Alternativt, eksplicit:
sudo ufw allow 22/tcp
Tillad de services du bruger
Åbn kun de porte du faktisk bruger. Eksempler:
# HTTP og HTTPS (webserver)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# DNS (Pi-hole eller AdGuard Home)
sudo ufw allow 53
# WireGuard VPN
sudo ufw allow 51820/udp
# AdGuard Home initial setup-port (kun nødvendig under opsætning)
sudo ufw allow 3000/tcp
Named profiles
UFW kan bruge navngivne profiler til kendte applikationer. Profilerne ligger i /etc/ufw/applications.d/. List hvad der er tilgængeligt:
sudo ufw app list
Åbn en profil:
sudo ufw allow "OpenSSH" # SSH via named profile
sudo ufw allow "Nginx Full" # HTTP + HTTPS via named profile
LAN-begrænsning: tillad kun fra dit lokale netværk
I stedet for at åbne en port for hele internettet, kan du begrænse adgangen til dit LAN-subnet. Det er god praksis for SSH, DNS og admin-interfaces:
# SSH kun fra 192.168.1.x
sudo ufw allow from 192.168.1.0/24 to any port 22
# DNS kun fra LAN
sudo ufw allow from 192.168.1.0/24 to any port 53
# Pi-hole admin (port 80) kun fra LAN
sudo ufw allow from 192.168.1.0/24 to any port 80
Tilpas 192.168.1.0/24 til dit faktiske subnet. Tjek dit subnet med ip route og se linjen der starter med dit LAN-interface (typisk eth0 eller wlan0).
Aktivér firewallen
Når dine regler er på plads:
sudo ufw enable
UFW spørger om bekræftelse. Svar y. Firewallen er nu aktiv og overlever genstart automatisk.
Tjek status og regler
sudo ufw status verbose
Output viser aktive regler, standardpolitikker og IPv6-status. verbose er mere informativt end blot status.
Fra en anden maskine på LAN kan du verificere med nmap:
nmap -p 22,53,80,443 [din-pi-ip]
Porte du har åbnet skal vises som open. Porte du ikke har åbnet skal vises som filtered.
Rate limiting på SSH
UFW kan begrænse SSH-forsøg: forbindelser der overskrider 6 forsøg pr. 30 sekunder fra samme IP blokeres midlertidigt. Én kommando:
sudo ufw limit ssh
Det er ikke en fuld erstatning for fail2ban, men det er langt bedre end ingen beskyttelse og kræver nul konfiguration.
Slet regler
Slet en regel med den præcise syntax du brugte til at tilføje den:
sudo ufw delete allow 80/tcp
Alternativt kan du slette via regelnummer:
sudo ufw status numbered # vis regler med numre
sudo ufw delete 3 # slet regel nummer 3
Logging
UFW kan logge blokeret trafik til /var/log/ufw.log:
sudo ufw logging on
Brug low, medium eller high for at styre mængden af log-output. on svarer til low. Overvåg loggen live:
sudo tail -f /var/log/ufw.log
IPv6
UFW understøtter IPv6. Tjek at IPV6=yes er sat i /etc/default/ufw. Det er standardindstillingen på nyere systemer, men værd at verificere:
grep IPV6 /etc/default/ufw
# Skal returnere: IPV6=yes
Når IPv6 er aktiveret, opretter UFW automatisk de tilsvarende IPv6-regler for de porte du åbner.
Komplet Pi-homelab eksempel
En Raspberry Pi der kører Pi-hole og SSH, tilgængeligt kun fra dit LAN. Fra bunden:
# Sæt standardpolitik
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH kun fra LAN (gør dette FØR enable)
sudo ufw allow from 192.168.1.0/24 to any port 22
# DNS fra LAN (Pi-hole/AdGuard)
sudo ufw allow from 192.168.1.0/24 to any port 53
# Pi-hole admin-interface fra LAN
sudo ufw allow from 192.168.1.0/24 to any port 80
# Rate limiting på SSH
sudo ufw limit ssh
# Logging
sudo ufw logging on
# Aktivér
sudo ufw enable
# Verificér
sudo ufw status verbose
sudo ufw delete allow 3000/tcp.
Hvad UFW ikke gør
UFW er et netværksfirewall-værktøj. Det er ikke et intrusion detection-system. Det inspicerer ikke pakkeindhold. Det ved ingenting om, om den trafik der passerer port 22 faktisk er SSH, eller om den er noget andet der bruger port 22.
Det beskytter dig ikke mod angreb fra maskiner på dit eget LAN. Har du LAN-regler åbne fra 192.168.1.0/24, kan alle på det netværk nå de porte.
Det erstatter ikke en VPN til fjernadgang. Skal du have sikker adgang til dit netværk udefra, er WireGuard det rette valg.
Ofte stillede spørgsmål
Lukker UFW alle porte som standard?
UFW er ikke aktiveret som standard — kører du sudo ufw status på en frisk installation, får du sandsynligvis Status: inactive. Men når du sætter standardpolitikken med sudo ufw default deny incoming og aktiverer UFW, er svaret ja: alle indgående forbindelser der ikke er eksplicit tilladt blokeres. Udgående trafik er tilladt som standard. Det er derfor det er kritisk at tillade SSH med sudo ufw allow ssh inden du aktiverer, ellers låser du dig selv ude.
Blokerer UFW Docker-trafik?
Det er et velkendt problem: Docker manipulerer iptables direkte og kan omgå UFW-regler. En container der eksponerer en port med -p 8080:80 kan være tilgængelig fra internettet, selv om UFW burde blokere port 8080. Det skyldes at Docker skriver sine regler i iptables-kæder UFW ikke styrer. Løsningen er at binde Docker-porte til localhost (127.0.0.1:8080:80) og bruge en reverse proxy som Nginx eller Cloudflare Tunnel til at styre ekstern adgang. Alternativt sæt DOCKER_OPTS="--iptables=false" og håndtér routing manuelt, men det er komplekst.
Hvad gør jeg hvis jeg låser mig selv ude via SSH?
Har du aktiveret UFW uden at tillade SSH, og du sidder på en fjernserver, er der ingen nem vej ind via netværket. Løsningerne afhænger af din adgang til maskinen: har du fysisk adgang eller konsoladgang (fx via en cloud-udbyders web-konsol), log ind der og kør sudo ufw allow ssh eller sudo ufw disable. På en Raspberry Pi med direkte adgang: tilslut skærm og tastatur. Til fremtiden: tillad SSH FØR du aktiverer UFW, og overvej at sætte UFW-regler op i et script der nulstiller alt efter 30 minutter hvis du ikke bekræfter.
Kilder
- UFW – Ubuntu Community Documentation: officiel dokumentation med eksempler og avancerede use cases
- ufw(8) man page – Ubuntu Manpages: komplet kommandoreference for alle UFW-optioner
- Uncomplicated Firewall (ufw) – Debian Wiki: Debian-specifik opsætning og konfigurationsnuancer