Modul 5 · 5.3
fail2ban mot gissningsförsök
Modul 5: Skydda nätverket · Lästid: 10 minuter
Lärandemål: Efter den här lektionen kan du konfigurera fail2ban för SSH, läsa dess status och logg, släppa en adress igen och förklara vad fail2ban skyddar mot och inte.
Nyckelbegrepp: brute force, jail, filter, åtgärd (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local och jail.d, fail2ban-client, recidive
Internets dörrknackare
Titta i SSH-loggen en dag efter installationen så ser du det: hundratals inloggningsförsök, med namn som root, admin, test, ubuntu och oracle, från adresser över hela världen.
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 tjänsten ssh, på AlmaLinux och Rocky sshd. Processnamnet kan vara sshd eller sshd-session, beroende på OpenSSH-version.) Det är en brute force-attack: botar som helt enkelt provar alla vanliga namn och lösenord. Med inloggning via nycklar och lösenordsinloggning avstängd (lektion 2.2) kommer de aldrig in, hur många gånger de än försöker. Men de fyller din logg, kostar lite beräkningskraft, och på tjänster där ett lösenord faktiskt behövs (en webbmejl, en administrationspanel) kan de vara verkligt farliga.
fail2ban läser loggar, känner igen misslyckade försök och låser en adress som misslyckas för ofta i brandväggen under en tid.
Hur fail2ban tänker: jails
fail2ban arbetar med jails (celler). En jail kombinerar tre saker:
- ett filter: reguljära uttryck som känner igen misslyckade försök i en logg (till exempel raden "Invalid user ... from <adres>");
- en åtgärd: vad som händer vid för många försök, oftast en brandväggsregel som blockerar adressen (
banaction, på Debian 13 som standard via nftables); - gränsvärden: hur många misslyckade försök (
maxretry) inom vilken tid (findtime) som leder till en blockering och hur länge (bantime).
Standardvärdena i jail.conf är: maxretry = 5, findtime = 10m, bantime = 10m. Alltså: fem misslyckade försök inom tio minuter ger tio minuters blockering.
Installera, och fällan i Debian 12
anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2banPå Debian och Ubuntu är jailen för SSH ([sshd]) redan påslagen efter installationen, via filen /etc/fail2ban/jail.d/defaults-debian.conf.
Det finns en känd fälla. fail2ban måste veta var loggen finns. Förr var det textfilen /var/log/auth.log. Sedan Debian 12 installeras rsyslog inte längre som standard och meddelandena finns bara i systemd-journalen (lektion 6.2). fail2ban-paketet i Debian 12 letade fortfarande efter /var/log/auth.log, hittade den inte och startade inte. Debian 13 har löst det genom att sätta backend = systemd för SSH i defaults-debian.conf. På Debian 12 löser du det själv (se nedan) genom att göra samma sak. Ubuntu har fortfarande rsyslog som standard, men backend = systemd fungerar även där.
Dina egna inställningar: jail.local
Ändra aldrig jail.conf: den filen ersätts vid en uppdatering. Lägg dina egna inställningar i /etc/fail2ban/jail.local eller i en fil i /etc/fail2ban/jail.d/ med filändelsen .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 = systemdVad raderna gör:
bantime = 1h: en timmes blockering i stället för tio minuter.bantime.increment = true: den som kommer tillbaka efter en blockering får en längre blockering varje gång.ignoreip: adresser som aldrig blockeras. Skriv in den fasta IP-adressen till ditt kontor här, om du har en. Lägg inte in stora adressintervall "för säkerhets skull".backend = systemd: läs journalen i stället för en textfil (nödvändigt på Debian 12, rekommenderas överallt). Det kräver att paketetpython3-systemdär installerat; oftast är det redan det som beroende.
Läs om och kontrollera:
anna@web1:~$ sudo fail2ban-client -t # testa 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äsa status, blockera och släppa
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" är adresser som redan har gjort försök men ännu inte nått gränsen. "Currently banned" är de adresser som är blockerade just nu.
Har du blockerat dig själv (till exempel genom att försöka några gånger med fel nyckel eller användarnamn), logga då in via ett annat nätverk eller konsolen och släpp din adress:
anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20fail2bans egen logg finns i /var/log/fail2ban.log och visar när vilken adress blockerades och släpptes:
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Återfallare: recidive
Vissa botar kommer helt enkelt tillbaka efter varje blockering. För det finns två verktyg. bantime.increment (ovan) gör blockeringen längre varje gång. Dessutom finns jailen recidive: den läser fail2bans egen logg och blockerar en adress som har blockerats ofta inom ett dygn i en vecka, på alla portar. Slå på den i din .local-fil:
[recidive]
enabled = trueVad fail2ban gör och inte gör
fail2ban är användbart, men det är inget lås på dörren. Låset är inloggning med nyckel, med lösenord avstängda (lektion 2.2). Därför ska du också veta vad fail2ban inte klarar:
- En utspridd attack från tusentals adresser, med ett eller två försök var, når aldrig över
maxretry. - Ett svagt lösenord förblir svagt. fail2ban gör gissandet långsammare, inget mer.
- Bara det som står i en logg: en tjänst som inte loggar misslyckade försök, eller en logg som fail2ban inte läser, ser den inte.
- Docker: blockeringar i den vanliga brandväggskedjan gäller inte för publicerade containerportar (lektion 9.3). För tjänster i containrar behövs en separat inställning (åtgärd på kedjan
DOCKER-USER).
Det fail2ban gör bra: håller loggen lugn, minskar belastningen från botar och skyddar tjänster där du (fortfarande) använder lösenord, som en webbmejl eller en administrationspanel. För sådana tjänster finns filter för nginx, Postfix, Dovecot och många andra.
På AlmaLinux och Rocky Linux
fail2ban kommer där från EPEL: dnf install epel-release och sedan dnf install fail2ban. Paketet fail2ban installerar även kopplingen till firewalld. SSH-tjänsten heter sshd. Slå på jailen själv i en .local-fil; till skillnad från Debian är den inte påslagen automatiskt.
Sammanfattning
- Botar försöker logga in hela dagen; med nycklar och lösenordsinloggning avstängd kommer de inte in, och fail2ban håller dem dessutom på avstånd.
- En jail är filter + åtgärd + gränsvärden (
maxretry,findtime,bantime); som standard 5 försök på 10 minuter, 10 minuters blockering. - Egna inställningar i
jail.localellerjail.d/*.local, aldrig ijail.conf; användbackend = systemd(nödvändigt på Debian 12). fail2ban-client status sshdvisar blockerade adresser,set sshd unbanipsläpper; recidive ochbantime.incrementtar hand om återfallare.- fail2ban stoppar inte utspridda attacker eller svaga lösenord och ser inte Docker-portar av sig själv.
Quiz
Uppgift
Uppgift Z5.3: Läsa en intrångslogg. Exempelfilen ssh-journal-1.txt innehåller ett utdrag ur journalen från en SSH-server med fail2ban, plus utdata från fail2ban-client status sshd. Svara på: vilken adress provade flest användarnamn, vilken adress lyckades logga in med en nyckel och som vilken användare, vilken adress blockerades och vid vilken tid, och skulle den adressen också ha blockerats med standardinställningarna (maxretry = 5, findtime = 10m)? Programmet jämför med den fasta svarsnyckeln. Har du en egen server med fail2ban, titta då även där på fail2ban-client status sshd.
Läs mer
- Skydda din VPS: de första fem minuterna
- Är jag blockerad? Din IP-adress och vår brandvägg
- 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
