Gå til innholdet

Cookie-innstillinger

Velg hvilke typer cookies du tillater. Du kan når som helst endre valget via Cookie-innstillinger nederst på hver side. Personvernerklæring

Nødvendige

Alltid på

Trengs for å logge inn, beholde handlekurven og huske valgene dine. Disse er alltid på.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: økten din og at du forblir innlogget
  • weboke_basket: handlekurven din
  • wkBtwIncl: visning av priser med eller uten mva.
  • wok_cookies: cookievalget ditt, 12 måneder

Måler hvilken annonse som fører til et besøk eller en bestilling, slik at vi ikke betaler for annonser som ikke gir noe.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), opptil 90 dager
  • OpenAI Ads, annonser i ChatGPT
  • wok_aff: hvilken partner som henviste deg til oss (partnerprogram), 60 dager

4,6

Land og språk

Hvert land har sin egen nettside, med priser og mva. for det landet.

Vis

En brannmur med ufw og nftables

Modul 5: Skjerm av nettverket · Lesetid: 12 minutter

Læringsmål: Etter denne leksjonen kan du sette opp en brannmur som bare slipper inn det som trengs, for både IPv4 og IPv6, uten å stenge deg selv ute. Du vet også hva en brannmur på serveren ikke beskytter mot.

Nøkkelbegreper: pakkefilter, netfilter, nftables, iptables-nft, ufw, standardpolicy, allow, deny, reject, limit, IPv6 i ufw, leverandørens brannmur, firewalld, Docker og brannmuren

Hva en brannmur gjør

En brannmur på serveren din er et pakkefilter: for hver nettverkspakke som kommer inn, ser den på en liste med regler og bestemmer om pakken slipper gjennom. I Linux ligger dette filteret i kjernen og heter netfilter. Du stiller det inn med et program:

  • nftables (kommandoen nft) er dagens verktøy. Debian har brukt det som standard siden Debian 10.
  • iptables er det gamle verktøyet. På moderne systemer er iptables som regel en oversettelse til nftables (iptables-nft), slik at gamle veiledninger fortsatt fungerer.
  • ufw (Uncomplicated Firewall) er et enkelt lag oppå, installert som standard på Ubuntu og mulig å installere med én kommando på Debian. For én enkelt server er ufw det enkleste valget. Denne leksjonen bruker ufw og viser deretter hvordan de samme reglene ser ut i nftables.

En brannmur er det andre forsvarslaget ditt. Det første er at tjenester bare lytter på riktig adresse (leksjon 5.1). Sammen sørger de for at en feil i det ene laget ikke straks blir en åpen dør.

Først: hvordan kommer du tilbake hvis noe går galt?

Den klassiske feilen: du slår på brannmuren, glemmer å tillate SSH, og tilkoblingen din faller ut. Da kommer du ikke lenger inn via SSH. Før du begynner:

  1. Vit hvordan du åpner konsollen hos leverandøren din (leksjon 1.2). Den går utenom nettverket, så den virker også når brannmuren stenger alt. Der logger du inn og skriver ufw disable.
  2. Ta et øyeblikksbilde (snapshot) hvis du er i tvil.
  3. Hold den nåværende SSH-økten åpen og test med en ny økt.

ufw i fem trinn

Trinn 1: installer og velg 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'

Standardpolicyen gjelder for alt som ikke har en egen regel. "Deny incoming" betyr: alt som kommer inn er forbudt, unntatt det du tillater etterpå. Det er det eneste trygge utgangspunktet. Utgående trafikk (serveren din som henter oppdateringer) tillater du.

Trinn 2: tillat SSH før du slår på brannmuren.

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

OpenSSH er en applikasjonsprofil som ufw kjenner (den står for port 22/tcp). Kjører SSH på en annen port, bruker du nummeret: sudo ufw allow 2222/tcp. Legg merke til "Rules updated (v6)": ufw lager regelen også for IPv6. Det gjør den fordi /etc/default/ufw inneholder linjen IPV6=yes, som er standard. Sjekk det likevel. Står den på no, gjelder brannmuren din bare for IPv4.

Trinn 3: det du ellers trenger.

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

Du kan begrense en regel til én kildeadresse, for eksempel en administrasjonsport som bare skal nås fra kontoret ditt:

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

Trinn 4: slå på.

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

Trinn 5: kontroller. Åpne et nytt vindu og logg inn på nytt. Går det, er SSH riktig satt opp. Se deretter på reglene:

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)

Du fjerner en regel ved hjelp av nummer: sudo ufw status numbered og deretter sudo ufw delete 3.

deny, reject og limit

  • deny forkaster pakken i stillhet: utenfra ser du "filtrert" (leksjon 5.1).
  • reject sender tilbake et avslag: utenfra ser du "lukket". Ryddigere for dine egne tjenester, men det avslører at det finnes en server der.
  • limit tillater en tilkobling, men blokkerer en adresse som prøver å koble til seks ganger eller mer innen 30 sekunder. Nyttig for SSH: sudo ufw limit OpenSSH i stedet for allow. Det er grovt (det teller tilkoblinger, ikke mislykkede innlogginger). fail2ban (leksjon 5.3) er mer presis.

De samme reglene i nftables

Under panseret skriver ufw netfilter-regler. Vil du klare deg uten ufw, skriver du en nftables-fil selv. På Debian ligger den i /etc/nftables.conf, og du laster 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;
    }
}

Les det slik. Tabellen heter filter og tilhører familien inet: én tabell for IPv4 og IPv6 samtidig, så du ikke kan glemme IPv6. I kjeden input er policyen drop. Deretter: svar på tilkoblinger som allerede finnes, slipper tilbake (established,related), alt på loopback er tillatt, ICMP er tillatt (nødvendig blant annet for IPv6 og for feilmeldinger om pakkestørrelse), og portene 22, 80 og 443 er tillatt.

anna@web1:~$ sudo nft -c -f /etc/nftables.conf    # kontroller uten å laste inn
anna@web1:~$ sudo systemctl enable --now nftables
anna@web1:~$ sudo nft list ruleset

Bruk enten ufw eller en egen nftables-fil, ikke begge: de skriver til samme netfilter og kan komme i veien for hverandres regler.

Hva brannmuren ikke beskytter mot

  • Tjenester du selv slipper inn. Port 443 er åpen for nettstedet ditt, så et sikkerhetshull i nettstedet er fortsatt tilgjengelig. Brannmuren beskytter bare portene som er stengt.
  • Docker. Når du publiserer en port med Docker (-p 5432:5432), lager Docker sine egne netfilter-regler, som videresender trafikken før reglene til ufw gjelder. Docker-dokumentasjonen sier rett ut at Docker og ufw ikke fungerer godt sammen. En containerport kan dermed være åpen utenfra selv om ufw status ikke viser den. Løsningen (publisere på 127.0.0.1) lærer du i leksjon 9.3.
  • Utgående trafikk. Med "allow outgoing" kan et hacket program nå hvor som helst. For de fleste små servere er det et akseptabelt valg. Strenge miljøer begrenser også utgående trafikk.

Leverandørens brannmur

Mange leverandører har også en brannmur i nettverket, foran serveren din, som du stiller inn i kundepanelet (noen ganger kalt "cloud firewall" eller "security group"). Den er et fint ekstra lag, og den virker også om du gjør noe feil på selve serveren. Men den erstatter ikke brannmuren på serveren: flytter du serveren eller bytter leverandør, blir den ikke med, og ikke alle leverandører tilbyr den. Ha derfor alltid en brannmur på selve serveren.

På AlmaLinux og Rocky Linux

Der er firewalld slått på som standard, med soner. De viktigste kommandoene:

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

Uten --permanent gjelder en endring bare til neste omstart. Med --permanent gjelder den først etter --reload. SSH er allerede åpen i standardsonen.

I praksis

Stenger du deg likevel ute på en VPS hos WebOké, åpner du konsollen i VPS-skjermbildet, logger inn og slår av brannmuren (ufw disable) eller tilbakestiller den siste regelen. Hos andre leverandører heter denne nødinngangen også konsoll, VNC eller rescue. Finn ut hvor den knappen er før du trenger den.

Oppsummering

  • En brannmur er det andre laget ditt etter "lytt bare der det trengs". nftables er verktøyet i kjernen, ufw et enkelt lag oppå.
  • Start med default deny incoming, tillat SSH før ufw enable, test med en ny økt, og kjenn konsollen hos leverandøren din.
  • Kontroller at ufw også dekker IPv6 (IPV6=yes). I nftables gjør familien inet det i én operasjon.
  • deny gir "filtrert" utenfra, reject gir "lukket". limit bremser gjentatte tilkoblinger.
  • Docker-porter går forbi ufw (leksjon 9.3). Leverandørens brannmur er et ekstra lag, ikke en erstatning.

Quiz

1. I hvilken rekkefølge slår du på ufw for første gang på en server der du er logget inn via SSH?



2. Etter ufw enable fungerer ikke nettstedet ditt lenger via IPv4, men SSH gjør det. Hva er den mest sannsynlige årsaken?



3. Du publiserer port 5432 for en databasecontainer med Docker. ufw status viser ingen regel for 5432. Kan databasen nås utenfra?



4. Hvorfor bruker nftables-eksempelet en tabell av familien inet?



5. Leverandøren din har en nettverksbrannmur i kundepanelet. Trenger du da fortsatt en brannmur på serveren?



Oppgave

Oppgave O5.2: Sett opp brannmuren din. Slå på en brannmur på serveren din med ufw (eller nftables, eller firewalld på AlmaLinux/Rocky): alt innkommende stengt som standard, SSH, og det du ellers virkelig trenger. Test med en ny økt, kontroller at IPv6 er dekket, og sjekk utenfra med nc at en port som ikke er tillatt, er lukket eller filtrert. Fyll ut sjekklisten og lim inn ufw status verbose (eller nft list ruleset). Oppgi for hver åpen port hva den brukes til.

Oppgave O5.2: Sett opp brannmuren din

Denne oppgaven gjør du selv; ingen kontrollerer den. Kryss av det du har gjort, og merk oppgaven som fullført.



Avkrysningene og notatene dine blir kun i denne nettleseren; vi sender dem ikke noe sted. Er du logget inn, lagrer vi kun i Mine kurs at du har gjort oppgaven.

Les mer

Et øyeblikk …

Sett opp domenene dine

Ordne for hvert domene navnetjenerne, koblingen til hostingen din og hvem som blir innehaver.

Laster inn domenene dine…