Hoppa till innehållet

Cookieinställningar

Välj vilka typer av cookies du tillåter. Du kan alltid ändra ditt val via Cookieinställningar längst ned på varje sida. Integritetspolicy

Nödvändiga

Alltid på

Behövs för att logga in, spara din varukorg och komma ihåg dina val. De är alltid på.

Vilka cookies?
  • weboke_sessie, weboke_klant, weboke_remember: din session och att du förblir inloggad
  • weboke_basket: din varukorg
  • wkBtwIncl: visa priser med eller utan moms
  • wok_cookies: ditt cookieval, 12 månader

Mäter vilken annons som leder till ett besök eller en beställning, så att vi inte betalar för annonser som inte ger något.

Vilka cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), upp till 90 dagar
  • OpenAI Ads, annonser i ChatGPT
  • wok_aff: via vilken partner du kom till oss (affiliateprogram), 60 dagar

4,6

Land och språk

Varje land har en egen webbplats med landets priser och moms.

Visa

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 fail2ban

På 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 = systemd

Vad 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 paketet python3-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:   sshd

Lä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.20

fail2bans 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 = true

Vad 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.local eller jail.d/*.local, aldrig i jail.conf; använd backend = systemd (nödvändigt på Debian 12).
  • fail2ban-client status sshd visar blockerade adresser, set sshd unbanip släpper; recidive och bantime.increment tar hand om återfallare.
  • fail2ban stoppar inte utspridda attacker eller svaga lösenord och ser inte Docker-portar av sig själv.

Quiz

1. Du har installerat fail2ban på Debian 12 och den startar inte, med meddelandet att det inte finns någon loggfil för sshd-jailen. Vad är orsaken?



2. Varför lägger du dina inställningar i jail.local och inte i jail.conf?



3. Standardinställningarna är maxretry = 5, findtime = 10m, bantime = 10m. En adress gör ett misslyckat försök kl. 14:00, 14:03, 14:05, 14:08 och 14:09. Vad händer?



4. Din server får tusentals inloggningsförsök varje dag, utspridda över tiotusentals adresser, ett försök var. Vad gör fail2ban mot det?



5. Du har blockerat dig själv genom att skriva fel användarnamn några gånger. Vilken är den snygga lösningen?



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.

Uppgift Z5.3: Läsa en intrångslogg

Fil till den här uppgiften: ssh-journal-1.txt








Det du fyller i och det vi hittar sparar vi inte. Din webbläsare kommer ihåg dina svar och om du klarade uppgiften. Är du inloggad sparar vi bara att du klarade uppgiften (nästan) i Mina kurser; där kan du också ta bort det.

Läs mer

Ett ögonblick…

Ställ in dina domäner

Ställ in namnservrar, koppling till ditt webbhotell och vem som blir innehavare för varje domän.

Hämtar dina domäner…