Modul 5 · 5.3
fail2ban mot gjetteforsøk
Modul 5: Skjerm av nettverket · Lesetid: 10 minutter
Læringsmål: Etter denne leksjonen kan du sette opp fail2ban for SSH, lese statusen og loggen, frigi en adresse igjen og forklare hva fail2ban beskytter mot og hva det ikke beskytter mot.
Nøkkelbegreper: brute force, jail, filter, handling (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local og jail.d, fail2ban-client, recidive
De som rister i dørhåndtakene på internett
Se i SSH-loggen en dag etter installasjonen, så ser du det: hundrevis av innloggingsforsøk, med navn 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 heter tjenesten ssh, på AlmaLinux og Rocky sshd. Prosessnavnet kan være sshd eller sshd-session, avhengig av OpenSSH-versjonen.) Dette er et brute-force-angrep: roboter som rett og slett prøver alle vanlige navn og passord. Når du logger inn med nøkler og passordinnlogging er slått av (leksjon 2.2), kommer de aldri inn, uansett hvor mange ganger de prøver. Men de fyller loggen din, bruker litt regnekraft, og på tjenester der du faktisk trenger et passord (en webmail, et administrasjonspanel) kan de være virkelig farlige.
fail2ban leser logger, gjenkjenner mislykkede forsøk og stenger en adresse som feiler for ofte ute i brannmuren en stund.
Slik tenker fail2ban: jails
fail2ban jobber med jails (celler). En jail kombinerer tre ting:
- et filter: regulære uttrykk som gjenkjenner mislykkede forsøk i en logg (for eksempel linjen "Invalid user ... from <adresse>");
- en handling: hva som skjer ved for mange forsøk, vanligvis en brannmurregel som blokkerer adressen (
banaction, på Debian 13 som standard via nftables); - terskler: hvor mange mislykkede forsøk (
maxretry) innenfor hvilket tidsrom (findtime) som fører til en blokkering, og hvor lenge den varer (bantime).
Standardverdiene i jail.conf er: maxretry = 5, findtime = 10m, bantime = 10m. Altså: fem mislykkede forsøk innen ti minutter gir ti minutters blokkering.
Installering og fellen i Debian 12
anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2banPå Debian og Ubuntu er jailen for SSH ([sshd]) allerede slått på etter installasjonen, via filen /etc/fail2ban/jail.d/defaults-debian.conf.
Det finnes én kjent felle. fail2ban må vite hvor loggen ligger. Tidligere var det tekstfilen /var/log/auth.log. Fra og med Debian 12 installeres ikke rsyslog lenger som standard, og meldingene ligger bare i journalen til systemd (leksjon 6.2). fail2ban-pakken i Debian 12 lette fortsatt etter /var/log/auth.log, fant den ikke og startet ikke. Debian 13 har løst dette ved å sette backend = systemd for SSH i defaults-debian.conf. På Debian 12 løser du det selv (se nedenfor) ved å gjøre det samme. Ubuntu har fortsatt rsyslog som standard, men backend = systemd fungerer der også.
Dine egne innstillinger: jail.local
Endre aldri jail.conf: den filen blir erstattet ved en oppdatering. Legg dine egne innstillinger i /etc/fail2ban/jail.local eller i en fil i /etc/fail2ban/jail.d/ med filendelsen .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 = systemdDette gjør linjene:
bantime = 1h: én times blokkering i stedet for ti minutter.bantime.increment = true: den som kommer tilbake etter en blokkering, får en lengre blokkering hver gang.ignoreip: adresser som aldri blir blokkert. Legg inn den faste IP-adressen til kontoret ditt her, hvis du har en. Ikke legg inn store adresseområder her "for sikkerhets skyld".backend = systemd: les journalen i stedet for en tekstfil (nødvendig på Debian 12, anbefalt overalt). Da må pakkenpython3-systemdvære installert; som regel er den allerede det, som en avhengighet.
Last inn på nytt og kontroller:
anna@web1:~$ sudo fail2ban-client -t # test konfigurasjonen
OK: configuration test is successful
anna@web1:~$ sudo systemctl reload fail2ban
anna@web1:~$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshdLese status, blokkere og frigi
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 som har gjort forsøk, men som ennå ikke har nådd terskelen. "Currently banned" er adressene som er blokkert akkurat nå.
Har du blokkert deg selv (for eksempel ved å prøve noen ganger med feil nøkkel eller feil brukernavn), logger du inn via et annet nettverk eller konsollen og frigir adressen din:
anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20Loggen til fail2ban selv ligger i /var/log/fail2ban.log og viser når hvilken adresse ble blokkert og frigitt:
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.77Gjengangere: recidive
Noen roboter kommer bare tilbake etter hver blokkering. Mot dem finnes det to virkemidler. bantime.increment (over) gjør blokkeringen lengre hver gang. I tillegg finnes jailen recidive: den leser loggen til fail2ban selv, og blokkerer en adresse som er blokkert mange ganger i løpet av ett døgn, i en uke på alle porter. Slå den på i .local-filen din:
[recidive]
enabled = trueHva fail2ban gjør og ikke gjør
fail2ban er nyttig, men det er ikke låsen på døren. Låsen er innlogging med nøkkel, med passord slått av (leksjon 2.2). Vit derfor også hva fail2ban ikke kan:
- Et spredt angrep fra tusenvis av adresser, med ett eller to forsøk hver, kommer aldri over
maxretry. - Et svakt passord forblir svakt. fail2ban gjør gjettingen tregere, ikke mer.
- Bare det som står i en logg: en tjeneste som ikke logger mislykkede forsøk, eller en logg som fail2ban ikke leser, ser den ikke.
- Docker: blokkeringer i den vanlige brannmurkjeden gjelder ikke for publiserte containerporter (leksjon 9.3). For tjenester i containere trenger du en egen innstilling (handling på kjeden
DOCKER-USER).
Det fail2ban gjør godt: holde loggen rolig, redusere belastningen fra roboter og beskytte tjenester der du (ennå) bruker passord, som en webmail eller et administrasjonspanel. For slike tjenester finnes det filtre for nginx, Postfix, Dovecot og mange andre.
På AlmaLinux og Rocky Linux
Der kommer fail2ban fra EPEL: dnf install epel-release og deretter dnf install fail2ban. Pakken fail2ban installerer også koblingen til firewalld. SSH-tjenesten heter sshd. Slå på selve jailen i en .local-fil; i motsetning til på Debian er den ikke slått på automatisk.
Oppsummering
- Roboter prøver å logge inn hele dagen; med nøkler og passordinnlogging slått av kommer de ikke inn, og fail2ban holder dem i tillegg på avstand.
- En jail er filter + handling + terskler (
maxretry,findtime,bantime); standard er 5 forsøk på 10 minutter og 10 minutters blokkering. - Egne innstillinger i
jail.localellerjail.d/*.local, aldri ijail.conf; brukbackend = systemd(nødvendig på Debian 12). fail2ban-client status sshdviser blokkerte adresser,set sshd unbanipfrigir; recidive ogbantime.incrementtar seg av gjengangere.- fail2ban stopper ikke spredte angrep eller svake passord, og ser ikke Docker-porter av seg selv.
Quiz
Oppgave
Oppgave Z5.3: Lese en innbruddslogg. Eksempelfilen ssh-journal-1.txt inneholder et utdrag av journalen fra en SSH-server med fail2ban, pluss utdataene fra fail2ban-client status sshd. Svar på dette: hvilken adresse prøvde flest brukernavn, hvilken adresse klarte å logge inn med en nøkkel og som hvilken bruker, hvilken adresse er blokkert og når, og ville den adressen også ha blitt blokkert med standardinnstillingene (maxretry = 5, findtime = 10m)? Programmet sammenligner svarene dine med fasiten. Har du en egen server med fail2ban, kan du også se på fail2ban-client status sshd der.
Les mer
- Sikre VPS-en din: de første fem minuttene
- Er jeg blokkert? IP-adressen din og brannmuren vår
- fail2ban, standardkonfigurasjon
jail.conf: https://github.com/fail2ban/fail2ban/blob/master/config/jail.conf - Manual for
jail.conf(5): https://manpages.debian.org/trixie/fail2ban/jail.conf.5.en.html
