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

fail2ban mod gætteforsøg

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

Læringsmål: Efter denne lektion kan du sætte fail2ban op til SSH, læse dens status og log, frigive en adresse igen og forklare, hvad fail2ban beskytter mod, og hvad den ikke beskytter mod.

Centrale begreber: brute force, jail, filter, handling (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local og jail.d, fail2ban-client, recidive

Internettets dørhåndtagsprøvere

Kig i SSH-loggen en dag efter installationen, og du ser det med det samme: hundredvis af loginforsøg med navne som root, admin, test, ubuntu og oracle, fra adresser over hele verden.

anna@web1:~$ sudo journalctl -u ssh --since today | grep -c "Invalid user"
412
anna@web1:~$ sudo journalctl -u ssh --since today | grep "Invalid user" | tail -n 3
nov 09 14:02:11 web1 sshd-session[20311]: Invalid user admin from 203.0.113.77 port 51522
nov 09 14:02:13 web1 sshd-session[20313]: Invalid user oracle from 203.0.113.77 port 51544
nov 09 14:02:16 web1 sshd-session[20315]: Invalid user test from 203.0.113.77 port 51560

(På Ubuntu hedder tjenesten ssh, på AlmaLinux og Rocky sshd. Procesnavnet kan være sshd eller sshd-session, afhængigt af OpenSSH-versionen.) Det er et brute force-angreb: bots, der simpelthen prøver alle almindelige navne og adgangskoder. Når du logger ind med nøgler og har slået login med adgangskode fra (lektion 2.2), kommer de aldrig ind, uanset hvor mange gange de prøver. Men de fylder din log, koster lidt regnekraft, og på tjenester, hvor der faktisk skal bruges en adgangskode (en webmail, et administrationspanel), kan de være reelt farlige.

fail2ban læser logfiler, genkender mislykkede forsøg og spærrer i en periode en adresse i firewallen, når den fejler for mange gange.

Sådan tænker fail2ban: jails

fail2ban arbejder med jails (celler). En jail kombinerer tre ting:

  • et filter: regulære udtryk, der genkender mislykkede forsøg i en log (for eksempel linjen "Invalid user ... from <adres>");
  • en handling: hvad der sker ved for mange forsøg, som regel en firewallregel, der blokerer adressen (banaction, på Debian 13 som standard via nftables);
  • tærskler: hvor mange mislykkede forsøg (maxretry) inden for hvilken tid (findtime) der fører til en blokering af hvilken varighed (bantime).

Standardværdierne i jail.conf er: maxretry = 5, findtime = 10m, bantime = 10m. Altså: fem mislykkede forsøg inden for ti minutter giver ti minutters blokering.

Installation og faldgruben i Debian 12

anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2ban

På Debian og Ubuntu er jailen til SSH ([sshd]) allerede slået til efter installationen, via filen /etc/fail2ban/jail.d/defaults-debian.conf.

Der er én kendt faldgrube. fail2ban skal vide, hvor loggen ligger. Tidligere var det tekstfilen /var/log/auth.log. Siden Debian 12 installeres rsyslog ikke længere som standard, og meddelelserne ligger kun i systemds journal (lektion 6.2). fail2ban-pakken i Debian 12 ledte stadig efter /var/log/auth.log, fandt den ikke og startede ikke. Debian 13 har løst det ved at sætte backend = systemd for SSH i defaults-debian.conf. På Debian 12 løser du det selv (se nedenfor) ved at gøre det samme. Ubuntu har stadig rsyslog som standard, men backend = systemd virker også der.

Dine egne indstillinger: jail.local

Ret aldrig i jail.conf: den fil bliver erstattet ved en opdatering. Læg dine egne indstillinger i /etc/fail2ban/jail.local eller i en fil i /etc/fail2ban/jail.d/ med endelsen .local:

# /etc/fail2ban/jail.d/eigen.local
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
bantime.increment = true
ignoreip = 127.0.0.1/8 ::1 198.51.100.20

[sshd]
enabled = true
backend = systemd

Det gør linjerne:

  • bantime = 1h: en times blokering i stedet for ti minutter.
  • bantime.increment = true: den, der kommer igen efter en blokering, får hver gang en længere blokering.
  • ignoreip: adresser, der aldrig bliver blokeret. Skriv her den faste IP-adresse for dit kontor, hvis du har en. Skriv ikke store adresseområder her "for en sikkerheds skyld".
  • backend = systemd: læs journalen i stedet for en tekstfil (nødvendigt på Debian 12, anbefales overalt). Det kræver, at pakken python3-systemd er installeret; det er den som regel allerede som afhængighed.

Genindlæs og kontrollér:

anna@web1:~$ sudo fail2ban-client -t            # test konfigurationen
OK: configuration test is successful
anna@web1:~$ sudo systemctl reload fail2ban
anna@web1:~$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

Læs status, ban og frigiv

anna@web1:~$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 3
|  |- Total failed:     1288
|  `- Journal matches:  _SYSTEMD_UNIT=ssh.service + _COMM=sshd
`- Actions
   |- Currently banned: 2
   |- Total banned:     117
   `- Banned IP list:   203.0.113.77 198.51.100.140

"Currently failed" er adresser, der har lavet forsøg, men endnu ikke er over tærsklen. "Currently banned" er de adresser, der er blokeret lige nu.

Har du blokeret dig selv (for eksempel ved at prøve et par gange med den forkerte nøgle eller det forkerte brugernavn), så log ind via et andet netværk eller konsollen, og frigiv din adresse:

anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20

fail2bans egen log ligger i /var/log/fail2ban.log og viser, hvornår hvilken adresse blev blokeret og frigivet:

2026-11-09 14:02:16,903 fail2ban.actions [811]: NOTICE  [sshd] Ban 203.0.113.77
2026-11-09 15:02:17,120 fail2ban.actions [811]: NOTICE  [sshd] Unban 203.0.113.77

Gengangere: recidive

Nogle bots kommer bare igen efter hver blokering. Til det findes der to værktøjer. bantime.increment (ovenfor) gør blokeringen længere hver gang. Derudover er der jailen recidive: den læser fail2bans egen log og blokerer en adresse, der er blevet blokeret mange gange inden for et døgn, i en uge på alle porte. Slå den til i din .local-fil:

[recidive]
enabled = true

Hvad fail2ban gør, og hvad den ikke gør

fail2ban er nyttig, men den er ikke låsen på døren. Låsen er login med en nøgle og adgangskoder slået fra (lektion 2.2). Vid derfor også, hvad fail2ban ikke kan:

  • Et spredt angreb fra tusindvis af adresser, hver med et eller to forsøg, kommer aldrig over maxretry.
  • En svag adgangskode forbliver svag. fail2ban gør gætteriet langsommere, ikke mere.
  • Kun det, der står i en log: en tjeneste, der ikke logger mislykkede forsøg, eller en log, som fail2ban ikke læser, opdager den ikke.
  • Docker: blokeringer i den almindelige firewallkæde gælder ikke for publicerede containerporte (lektion 9.3). Til tjenester i containere kræves en særskilt indstilling (handling på kæden DOCKER-USER).

Det gør fail2ban godt: holder loggen rolig, mindsker belastningen fra bots og beskytter tjenester, hvor du (stadig) bruger adgangskoder, som en webmail eller et administrationspanel. Til den slags tjenester findes der filtre til nginx, Postfix, Dovecot og mange andre.

På AlmaLinux og Rocky Linux

Her kommer fail2ban fra EPEL: dnf install epel-release og derefter dnf install fail2ban. Pakken fail2ban installerer også koblingen til firewalld. SSH-tjenesten hedder sshd. Slå selv jailen til i en .local-fil; i modsætning til på Debian er den ikke slået til automatisk.

Opsummering

  • Bots prøver at logge ind hele dagen; med nøgler og login med adgangskode slået fra kommer de ikke ind, og fail2ban holder dem desuden på afstand.
  • En jail er filter + handling + tærskler (maxretry, findtime, bantime); som standard 5 forsøg på 10 minutter og 10 minutters blokering.
  • Egne indstillinger i jail.local eller jail.d/*.local, aldrig i jail.conf; brug backend = systemd (nødvendigt på Debian 12).
  • fail2ban-client status sshd viser bannede adresser, set sshd unbanip frigiver; recidive og bantime.increment tager sig af gengangere.
  • fail2ban stopper ikke spredte angreb eller svage adgangskoder og ser ikke Docker-porte af sig selv.

Quiz

1. Du har installeret fail2ban på Debian 12, og den starter ikke, med en meddelelse om, at der ikke er nogen logfil til sshd-jailen. Hvad er årsagen?



2. Hvorfor lægger du dine indstillinger i jail.local og ikke i jail.conf?



3. Standardindstillingerne er maxretry = 5, findtime = 10m, bantime = 10m. En adresse laver et mislykket forsøg kl. 14:00, 14:03, 14:05, 14:08 og 14:09. Hvad sker der?



4. Din server får hver dag tusindvis af loginforsøg, spredt over titusindvis af adresser, hver med ét forsøg. Hvad gør fail2ban mod det?



5. Du har blokeret dig selv ved at skrive det forkerte brugernavn et par gange. Hvad er den pæne løsning?



Opgave

Opgave Z5.3: Læs en indbrudslog. Eksempelfilen ssh-journal-1.txt indeholder et udsnit af journalen fra en SSH-server med fail2ban plus outputtet fra fail2ban-client status sshd. Svar på: hvilken adresse prøvede flest brugernavne, hvilken adresse lykkedes med at logge ind med en nøgle og som hvilken bruger, hvilken adresse er bannet og på hvilket tidspunkt, og ville den adresse også være blevet bannet med standardindstillingerne (maxretry = 5, findtime = 10m)? Programmet sammenligner med den faste facitliste. Har du din egen server med fail2ban, så kig også på fail2ban-client status sshd der.

Opgave Z5.3: Læs en indbrudslog

Fil til denne opgave: ssh-journal-1.txt








Det, du udfylder, og hvad vi finder, gemmer vi ikke. Din browser husker dine svar, og om du har bestået opgaven. Er du logget ind, gemmer vi kun, at du (næsten) bestod opgaven, i Mine kurser; der kan du også slette det.

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…