Modul 5 · 5.3
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 fail2banPå 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 = systemdDet 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 pakkenpython3-systemder 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: sshdLæ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.20fail2bans 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.77Gengangere: 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 = trueHvad 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.localellerjail.d/*.local, aldrig ijail.conf; brugbackend = systemd(nødvendigt på Debian 12). fail2ban-client status sshdviser bannede adresser,set sshd unbanipfrigiver; recidive ogbantime.incrementtager sig af gengangere.- fail2ban stopper ikke spredte angreb eller svage adgangskoder og ser ikke Docker-porte af sig selv.
Quiz
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.
Læs mere
- Sikr din VPS: de første fem minutter
- Er jeg blokeret? Din IP-adresse og vores firewall
- fail2ban, standardkonfiguration
jail.conf: https://github.com/fail2ban/fail2ban/blob/master/config/jail.conf - Manual
jail.conf(5): https://manpages.debian.org/trixie/fail2ban/jail.conf.5.en.html - VPS: fra første login til sikker server 3.5: fail2ban mod gætteforsøg
