Gå til innholdet

Cookie-innstillinger

Velg hvilke typer cookies du tillater. Du kan når som helst endre valget via Cookie-innstillinger nederst på hver side. Personvernerklæring

Nødvendige

Alltid på

Trengs for å logge inn, beholde handlekurven og huske valgene dine. Disse er alltid på.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: økten din og at du forblir innlogget
  • weboke_basket: handlekurven din
  • wkBtwIncl: visning av priser med eller uten mva.
  • wok_cookies: cookievalget ditt, 12 måneder

Måler hvilken annonse som fører til et besøk eller en bestilling, slik at vi ikke betaler for annonser som ikke gir noe.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), opptil 90 dager
  • OpenAI Ads, annonser i ChatGPT
  • wok_aff: hvilken partner som henviste deg til oss (partnerprogram), 60 dager

4,6

Land og språk

Hvert land har sin egen nettside, med priser og mva. for det landet.

Vis

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 fail2ban

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

Dette 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å pakken python3-systemd væ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:   sshd

Lese 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.20

Loggen 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.77

Gjengangere: 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 = true

Hva 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.local eller jail.d/*.local, aldri i jail.conf; bruk backend = systemd (nødvendig på Debian 12).
  • fail2ban-client status sshd viser blokkerte adresser, set sshd unbanip frigir; recidive og bantime.increment tar seg av gjengangere.
  • fail2ban stopper ikke spredte angrep eller svake passord, og ser ikke Docker-porter av seg selv.

Quiz

1. Du har installert fail2ban på Debian 12, og den starter ikke, med meldingen om at det ikke finnes noen loggfil for sshd-jailen. Hva er årsaken?



2. Hvorfor legger du innstillingene dine i jail.local og ikke i jail.conf?



3. Standardinnstillingene er maxretry = 5, findtime = 10m, bantime = 10m. En adresse gjør et mislykket forsøk kl. 14:00, 14:03, 14:05, 14:08 og 14:09. Hva skjer?



4. Serveren din får tusenvis av innloggingsforsøk hver dag, spredt over titusenvis av adresser, med ett forsøk hver. Hva gjør fail2ban mot dette?



5. Du har blokkert deg selv ved å skrive feil brukernavn noen ganger. Hva er den ryddige løsningen?



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.

Oppgave Z5.3: Lese en innbruddslogg

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








Det du fyller inn, og det vi finner, lagrer vi ikke. Nettleseren din husker svarene dine og om du har bestått oppgaven. Er du logget inn, lagrer vi kun at du har (nesten) bestått oppgaven i Mine kurs; der kan du også slette det.

Les mer

Et øyeblikk …

Sett opp domenene dine

Ordne for hvert domene navnetjenerne, koblingen til hostingen din og hvem som blir innehaver.

Laster inn domenene dine…