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.

⚠️ Tillad SSH FØR du aktiverer. Kør 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
💡 SSH kun fra LAN: Tilgår du SSH udelukkende fra dit lokale netværk, kan du begrænse adgangen til kun dit LAN-subnet. Se afsnittet om LAN-begrænsning nedenfor.

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
📝 Cloudflare Tunnel (cloudflared): Kører du cloudflared, behøver du ikke åbne nogen indgående port. cloudflared opretter en udgående forbindelse til Cloudflares netværk. Udgående er allerede tilladt med standardpolitikken.

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
📝 Kører du Pi-hole eller AdGuard? Husk at åbne port 53 (DNS) og port 80 (admin) fra dit LAN, som vist ovenfor. AdGuard bruger desuden port 3000 under initial opsætning; du kan fjerne den igen bagefter med 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.

Kilder