Gå direkte til indholdet

Cookieindstillinger

Vælg for hver type, hvilke cookies du tillader. Du kan altid ændre dit valg via Cookieindstillinger nederst på hver side. Privatlivspolitik

Nødvendige

Altid slået til

Nødvendige for at logge ind, gemme din kurv og huske dine valg. De er altid slået til.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: din session og at forblive logget ind
  • weboke_basket: din kurv
  • wkBtwIncl: vise priser med eller uden moms
  • wok_cookies: dit cookievalg, 12 måneder

Måler, hvilken annonce der fører til et besøg eller en bestilling, så vi ikke betaler for annoncer, der ikke virker.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), op til 90 dage
  • OpenAI Ads, annoncer i ChatGPT
  • wok_aff: hvilken partner der henviste dig til os (affiliateprogram), 60 dage

4,6

Land og sprog

Hvert land har sin egen side med landets priser og moms.

Se

En firewall med ufw og nftables

Modul 5: Afskærm netværket · Læsetid: 12 minutter

Læringsmål: Efter denne lektion kan du sætte en firewall op, der kun tillader det nødvendige, for både IPv4 og IPv6, uden at låse dig selv ude. Du ved også, hvad en firewall på din server ikke beskytter mod.

Centrale begreber: pakkefilter, netfilter, nftables, iptables-nft, ufw, standardpolitik, allow, deny, reject, limit, IPv6 i ufw, udbyderens firewall, firewalld, Docker og firewallen

Hvad en firewall gør

En firewall på din server er et pakkefilter: for hver netværkspakke, der kommer ind, kigger den på en liste med regler og afgør, om pakken må komme igennem. I Linux ligger det filter i kernen og hedder netfilter. Du styrer det med et program:

  • nftables (kommandoen nft) er det nuværende værktøj. Debian har brugt det som standard siden Debian 10.
  • iptables er det gamle værktøj. På moderne systemer er iptables som regel en oversættelse til nftables (iptables-nft), så gamle vejledninger stadig virker.
  • ufw (Uncomplicated Firewall) er et enkelt lag ovenpå, som følger med Ubuntu som standard og kan installeres på Debian med én kommando. Til en enkelt server er ufw det nemmeste valg. Denne lektion bruger ufw og viser bagefter, hvordan de samme regler ser ud i nftables.

En firewall er dit andet forsvarslag. Det første er, at tjenester kun lytter på den rigtige adresse (lektion 5.1). Tilsammen sørger de for, at en fejl i det ene lag ikke straks bliver en åben dør.

Først: hvordan kommer du ind igen, hvis det går galt?

Den klassiske fejl: du slår firewallen til, glemmer at tillade SSH, og din forbindelse falder. Så kan du ikke længere komme ind via SSH. Før du går i gang:

  1. Vid, hvordan du åbner din udbyders konsol (lektion 1.2). Den virker uden om netværket, altså også når firewallen lukker alt. Der logger du ind og skriver ufw disable.
  2. Tag et snapshot, hvis du er i tvivl.
  3. Hold din nuværende SSH-session åben, og test med en anden session.

ufw i fem trin

Trin 1: installér og vælg standarden.

anna@web1:~$ sudo apt install ufw
anna@web1:~$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
anna@web1:~$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'

Standardpolitikken gælder for alt, der ikke har en regel. "Deny incoming" betyder: alt, der kommer ind, er forbudt, undtagen det, du tillader herefter. Det er det eneste sikre udgangspunkt. Udgående trafik (din server, der henter opdateringer) tillader du.

Trin 2: tillad SSH, før du slår firewallen til.

anna@web1:~$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)

OpenSSH er en applikationsprofil, som ufw kender (den svarer til port 22/tcp). Kører SSH på en anden port, så brug nummeret: sudo ufw allow 2222/tcp. Læg mærke til "Rules updated (v6)": ufw laver også reglen for IPv6. Det gør den, fordi der i /etc/default/ufw står IPV6=yes, hvilket er standarden. Tjek det lige; står den på no, gælder din firewall kun for IPv4.

Trin 3: det, du ellers har brug for.

anna@web1:~$ sudo ufw allow 80/tcp
anna@web1:~$ sudo ufw allow 443/tcp
anna@web1:~$ sudo ufw allow 443/udp       # kun hvis du bruger HTTP/3

Du kan begrænse en regel til én kildeadresse, for eksempel en administrationsport, der kun må bruges fra dit kontor:

anna@web1:~$ sudo ufw allow from 198.51.100.20 to any port 9090 proto tcp

Trin 4: slå den til.

anna@web1:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Trin 5: kontrollér. Åbn et andet vindue, og log ind igen. Lykkes det, er SSH sat rigtigt op. Se derefter reglerne:

anna@web1:~$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

En regel fjerner du med numre: sudo ufw status numbered og derefter sudo ufw delete 3.

deny, reject og limit

  • deny lader pakken falde stille: udefra ser du "filtreret" (lektion 5.1).
  • reject sender en afvisning tilbage: udefra ser du "lukket". Pænere for dine egne tjenester, men det afslører, at der er en server.
  • limit tillader en forbindelse, men blokerer en adresse, der forsøger at oprette forbindelse seks gange eller flere inden for 30 sekunder. Praktisk til SSH: sudo ufw limit OpenSSH i stedet for allow. Det er groft (det tæller forbindelser, ikke mislykkede logins); fail2ban (lektion 5.3) er mere præcis.

De samme regler i nftables

ufw skriver netfilter-regler under motorhjelmen. Vil du arbejde uden ufw, skriver du selv en nftables-fil. På Debian ligger den i /etc/nftables.conf, og du indlæser den med tjenesten nftables:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        ct state invalid drop
        iif "lo" accept
        meta l4proto { icmp, ipv6-icmp } accept
        tcp dport { 22, 80, 443 } accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Læs den sådan. Tabellen hedder filter og tilhører familien inet: én tabel for både IPv4 og IPv6 på samme tid, så du ikke kan glemme IPv6. I kæden input er politikken drop. Derefter: svar på forbindelser, der allerede findes, må komme tilbage (established,related), alt på loopback er tilladt, ICMP er tilladt (nødvendigt blandt andet for IPv6 og fejlmeddelelser om pakkestørrelse), og portene 22, 80 og 443 er tilladt.

anna@web1:~$ sudo nft -c -f /etc/nftables.conf    # tjek uden at indlæse
anna@web1:~$ sudo systemctl enable --now nftables
anna@web1:~$ sudo nft list ruleset

Brug enten ufw eller en egen nftables-fil, ikke begge: de skriver i samme netfilter og kan komme i vejen for hinandens regler.

Hvad din firewall ikke beskytter mod

  • Tjenester, du selv tillader. Port 443 er åben for dit website; et hul i dit website kan altså stadig nås. Firewallen beskytter kun de porte, der er lukkede.
  • Docker. Når du publicerer en port med Docker (-p 5432:5432), sætter Docker sine egne netfilter-regler, som omdirigerer trafikken, før ufw's regler gælder. Docker-dokumentationen siger direkte, at Docker og ufw ikke passer godt sammen. En container-port kan altså være åben udefra, mens ufw status ikke viser den. Løsningen (publicér på 127.0.0.1) lærer du i lektion 9.3.
  • Udgående trafik. Med "allow outgoing" kan et hacket program sende trafik hvor som helst hen. For de fleste små servere er det et acceptabelt valg; strenge miljøer begrænser også udgående trafik.

Din udbyders firewall

Mange udbydere har også en firewall i netværket, foran din server, som du sætter op i kundepanelet (nogle gange kaldet "cloud firewall" eller "security group"). Den er et fint ekstra lag, og den virker også, hvis du laver en fejl på selve serveren. Men den erstatter ikke firewallen på serveren: flytter du serveren eller skifter udbyder, følger den ikke med, og ikke alle udbydere tilbyder den. Hav derfor altid en firewall på selve serveren.

På AlmaLinux og Rocky Linux

Her er firewalld slået til som standard, med zoner. De vigtigste kommandoer:

[root@web1 ~]# firewall-cmd --list-all
[root@web1 ~]# firewall-cmd --permanent --add-service=http --add-service=https
[root@web1 ~]# firewall-cmd --reload

Uden --permanent gælder en ændring kun til næste genstart; med --permanent først efter --reload. SSH er allerede åben i standardzonen.

I praksis

Låser du alligevel dig selv ude på en VPS hos WebOké, åbner du konsollen i VPS-skærmbilledet, logger ind og slår firewallen fra (ufw disable) eller ruller den sidste regel tilbage. Hos andre udbydere hedder den nødindgang også konsol, VNC eller rescue. Vid, hvor knappen sidder, før du får brug for den.

Opsummering

  • En firewall er dit andet lag efter "lyt kun, hvor det er nødvendigt"; nftables er værktøjet i kernen, ufw et enkelt lag ovenpå.
  • Start med default deny incoming, tillad SSH før ufw enable, test med en anden session, og kend din udbyders konsol.
  • Kontrollér, at ufw også dækker IPv6 (IPV6=yes); i nftables klarer familien inet det i ét hug.
  • deny giver "filtreret" udefra, reject giver "lukket"; limit bremser gentagne forbindelser.
  • Docker-porte går uden om ufw (lektion 9.3); din udbyders firewall er et ekstra lag, ikke en erstatning.

Quiz

1. I hvilken rækkefølge slår du ufw til for første gang på en server, hvor du er logget ind via SSH?



2. Efter ufw enable virker dit website ikke længere via IPv4, men SSH virker. Hvad er den mest sandsynlige årsag?



3. Du publicerer port 5432 fra en database-container med Docker. ufw status viser ingen regel for 5432. Kan databasen nås udefra?



4. Hvorfor bruger nftables-eksemplet en tabel fra familien inet?



5. Din udbyder har en netværksfirewall i kundepanelet. Har du så stadig brug for en firewall på serveren?



Opgave

Opgave O5.2: Sæt din firewall op. Slå en firewall til på din server med ufw (eller nftables, eller firewalld på AlmaLinux/Rocky): alt indgående lukket som standard, SSH og det, du ellers virkelig har brug for. Test med en anden session, kontrollér at IPv6 er dækket, og tjek udefra med nc, at en port, der ikke er tilladt, er lukket eller filtreret. Udfyld tjeklisten, og indsæt din ufw status verbose (eller nft list ruleset); angiv for hver åben port, hvad den bruges til.

Opgave O5.2: Sæt din firewall op

Denne opgave laver du selv; ingen tjekker den. Afkryds hvad du har gjort, og markér opgaven som udført.



Dine afkrydsninger og noter forbliver kun i denne browser; vi sender dem ingen steder hen. Er du logget ind, gemmer vi kun i Mine kurser, at du har udført opgaven.

Læs mere

Et øjeblik…

Opsæt dine domæner

Angiv for hvert domæne navneserverne, tilknytningen til din hosting, og hvem der bliver ejer.

Indlæser dine domæner…