{"id":157,"date":"2026-06-21T16:55:46","date_gmt":"2026-06-21T16:55:46","guid":{"rendered":"https:\/\/shattered.io\/no\/2026\/06\/21\/fail2ban-ubuntu\/"},"modified":"2026-06-28T23:49:06","modified_gmt":"2026-06-28T23:49:06","slug":"fail2ban-ubuntu","status":"publish","type":"post","link":"https:\/\/shattered.io\/no\/fail2ban-ubuntu\/","title":{"rendered":"Fail2ban p\u00e5 Ubuntu: 12 Steg for \u00e5 Blokkere Brute-Force [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Servere eksponert p\u00e5 internett mottar typisk 500\u20132000 brute-force-fors\u00f8k mot SSH hver dag. Uten automatisk beskyttelse er det bare et sp\u00f8rsm\u00e5l om tid f\u00f8r en angriper gjetter riktig passord. <strong>Fail2ban<\/strong> er det mest brukte verkt\u00f8yet p\u00e5 Linux for \u00e5 stoppe slike angrep: det overv\u00e5ker loggfiler i sanntid, gjenkjenner mislykkede innloggingsfors\u00f8k med regul\u00e6re uttrykk, og blokkerer angriperen i brannmuren automatisk.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Denne guiden viser deg n\u00f8yaktig hvordan du installerer og konfigurerer Fail2ban p\u00e5 Ubuntu 22.04 og 24.04, beskytter SSH, Nginx og Apache, lager egne filtre, og verifiserer at alt virker, fra start til ferdig konfigurasjon p\u00e5 under 30 minutter.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"hva-er-fail2ban\">Hva er Fail2ban og hvordan fungerer det?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban er et Python-basert rammeverk for inntrengningsforebygging (IPS) som ble lansert i 2004 og er n\u00e5 i versjon 1.1.0 (utgitt april 2024). Det kj\u00f8rer som en systemtjeneste og f\u00f8lger en enkel, men effektiv pipeline:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Logglesing:<\/strong> Fail2ban leser utvalgte loggfiler kontinuerlig, for eksempel <code>\/var\/log\/auth.log<\/code> for SSH og <code>\/var\/log\/nginx\/error.log<\/code> for Nginx.<\/li><li><strong>Regeksmatch:<\/strong> Hvert filter inneholder et eller flere regul\u00e6re uttrykk (failregex) som matcher feilmeldinger i loggene. Angriperens IP-adresse identifiseres med plassholderen <code>&lt;ADDR&gt;<\/code> eller <code>&lt;HOST&gt;<\/code>.<\/li><li><strong>Terskelsjekk:<\/strong> Hvis en IP-adresse overskrider <code>maxretry<\/code> feil innenfor <code>findtime<\/code> sekunder, utl\u00f8ses en handling.<\/li><li><strong>Brannmurhandling:<\/strong> Fail2ban legger til en blokkregel i iptables, nftables eller UFW, slik at all trafikk fra angripende IP stoppes i <code>bantime<\/code> sekunder.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban sitter <strong>ikke<\/strong> inline med trafikk og analyserer ikke pakker direkte. Det er en reaktiv l\u00f8sning basert p\u00e5 logger, noe som betyr at ett eller flere innloggingsfors\u00f8k kan passere f\u00f8r blokkering. Dette er likevel tilstrekkelig for \u00e5 stoppe automatiserte brute-force-angrep som vanligvis trenger hundrevis av fors\u00f8k.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"sentrale-begreper\">Sentrale begreper og konfigurasjonsfiler<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban er organisert rundt tre kjernekonsepter: <strong>filtre<\/strong>, <strong>jails<\/strong> og <strong>handlinger<\/strong>. Et filter definerer hva som utgj\u00f8r et mislykket fors\u00f8k via regul\u00e6re uttrykk. En jail kobler et filter til en tjeneste, loggfil og handling. En handling definerer hva som skjer n\u00e5r en IP utestenges, typisk en brannmurregel.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Standard<\/th><th>Beskrivelse<\/th><\/tr><\/thead><tbody><tr><td><code>bantime<\/code><\/td><td>10m<\/td><td>Hvor lenge en IP forblir blokkert. Bruk tidssuffiks: 10m, 1h, 1d.<\/td><\/tr><tr><td><code>findtime<\/code><\/td><td>10m<\/td><td>Tidsvindu der feil telles. Feil utenfor dette vinduet ignoreres.<\/td><\/tr><tr><td><code>maxretry<\/code><\/td><td>5<\/td><td>Maks antall feil innenfor findtime f\u00f8r blokkering.<\/td><\/tr><tr><td><code>ignoreip<\/code><\/td><td>127.0.0.1\/8 ::1<\/td><td>IP-adresser som aldri blokkeres. Legg til din egen IP her.<\/td><\/tr><tr><td><code>banaction<\/code><\/td><td>iptables-multiport<\/td><td>Brannmurhandling: iptables, nftables-multiport, ufw.<\/td><\/tr><tr><td><code>backend<\/code><\/td><td>auto<\/td><td>Logglesingsmekanisme: systemd, auto, pyinotify, polling.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"forutsetninger\">Forutsetninger og systemkrav<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00f8r du starter, kontroller at systemet oppfyller f\u00f8lgende krav:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Operativsystem:<\/strong> Ubuntu 22.04 LTS eller Ubuntu 24.04 LTS (ogs\u00e5 kompatibel med Debian 11 og Debian 12)<\/li><li><strong>Tilgang:<\/strong> Root-bruker eller bruker med sudo-rettigheter<\/li><li><strong>Python:<\/strong> Python 3.6 eller nyere (installeres automatisk som avhengighet)<\/li><li><strong>Brannmur:<\/strong> iptables (standard p\u00e5 Ubuntu 22.04), nftables (standard p\u00e5 Ubuntu 24.04) eller UFW<\/li><li><strong>Tjenester \u00e5 beskytte:<\/strong> SSH (openssh-server), Nginx eller Apache (valgfritt)<\/li><li><strong>Internettforbindelse:<\/strong> For \u00e5 laste ned pakker via apt<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Kontroller brannmurbakend med <code>sudo iptables -V<\/code> for iptables eller <code>sudo nft --version<\/code> for nftables. Ubuntu 24.04 bruker som standard nftables, mens 22.04 bruker iptables. Dette p\u00e5virker hvilken <code>banaction<\/code> du velger i konfigurasjonsfilen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-1-installer\">Steg 1: Installer Fail2ban<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban er tilgjengelig i Ubuntus offisielle pakkearkiv. Oppdater pakkelisten og installer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install -y fail2ban\nsudo systemctl enable --now fail2ban\nsudo systemctl status fail2ban<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Forventet utdata fra <code>systemctl status<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u25cf fail2ban.service - Fail2Ban Service\n     Loaded: loaded (\/lib\/systemd\/system\/fail2ban.service; enabled)\n     Active: active (running) since Sat 2026-06-21 10:00:00 UTC; 5s ago\n    Process: ExecStartPre=\/bin\/mkdir -p \/run\/fail2ban\n   Main PID: 12345 (fail2ban-server)\n      Tasks: 5 (limit: 4608)\n     Memory: 12.3M<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verifiser versjonen med <code>fail2ban-client --version<\/code>. Du skal se <code>Fail2Ban v1.1.0<\/code> eller nyere. Fail2ban installerer automatisk <code>fail2ban-client<\/code> (kommandolinjeverkt\u00f8y) og <code>fail2ban-server<\/code> (bakgrunnstjenesten).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vanlig feil nr. 1:<\/strong> Fail2ban starter ikke hvis iptables ikke er tilgjengelig p\u00e5 Ubuntu 24.04 med kun nftables. L\u00f8sning: installer <code>iptables-legacy<\/code> med <code>sudo apt install -y iptables<\/code>, eller endre <code>banaction<\/code> til <code>nftables-multiport<\/code> i konfigurasjonen (se Steg 2).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-2-konfigurer-jail-local\">Steg 2: Opprett jail.local<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban leveres med to prim\u00e6re konfigurasjonsfiler: <code>\/etc\/fail2ban\/jail.conf<\/code> (standard, overskrives ved oppgradering) og <code>\/etc\/fail2ban\/jail.local<\/code> (dine innstillinger, aldri overskrives). <strong>Du skal aldri redigere jail.conf direkte.<\/strong> Kopier den i stedet som basis:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp \/etc\/fail2ban\/jail.conf \/etc\/fail2ban\/jail.local\nsudo nano \/etc\/fail2ban\/jail.local<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Finn <code>[DEFAULT]<\/code>-seksjonen og tilpass f\u00f8lgende innstillinger:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[DEFAULT]\n# Ban i 24 timer\nbantime  = 24h\n\n# Tidsvindu: tell feil innenfor 10 minutter\nfindtime = 10m\n\n# Maks 5 feil f\u00f8r blokkering\nmaxretry = 5\n\n# Ignorer lokal IP og din statiske IP (viktig for \u00e5 unng\u00e5 \u00e5 l\u00e5se deg ut)\nignoreip = 127.0.0.1\/8 ::1 DIN_IP_HER\n\n# Velg brannmurbakend (Ubuntu 22.04: iptables-multiport, Ubuntu 24.04: nftables-multiport)\nbanaction = iptables-multiport\n# For nftables: banaction = nftables-multiport\n\n# Backend for logglesing (auto velger beste tilgjengelig)\nbackend = auto<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Finn din offentlige IP med <code>curl ifconfig.me<\/code> og legg den til i <code>ignoreip<\/code>. Dette er avgj\u00f8rende: hvis du glemmer dette og konfigurerer aggressiv blokkering, kan du l\u00e5se deg selv ute fra serveren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Valider konfigurasjonen etter hver endring:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Test konfigurasjon for syntaksfeil\nsudo fail2ban-client -t\n\n# Last inn ny konfigurasjon uten omstart\nsudo fail2ban-client reload<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vanlig feil nr. 2:<\/strong> Mange administratorer setter <code>bantime = -1<\/code> for permanent blokkering uten \u00e5 tenke p\u00e5 konsekvensene. \u00c9n feilkonfigurert legitim tjeneste (f.eks. et skript som kj\u00f8rer med feil passord) kan permanent blokkere bedriftens IP-adresse. Bruk heller <code>bantime.increment = true<\/code> for automatisk eskalering: f\u00f8rste gang 10 minutter, andre gang 1 time, tredje gang 1 dag.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-3-beskytt-ssh\">Steg 3: Beskytt SSH med Fail2ban<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SSH er det vanligste angrepsm\u00e5let p\u00e5 Linux-servere. Fail2ban inkluderer et ferdig <code>sshd<\/code>-filter, men du b\u00f8r lage en dedikert jail-konfigurasjon for klarhet og enklere vedlikehold:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/fail2ban\/jail.d\/sshd.local<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Lim inn f\u00f8lgende:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[sshd]\nenabled  = true\nport     = ssh\nfilter   = sshd\n# P\u00e5 Ubuntu\/Debian brukes \/var\/log\/auth.log\nlogpath  = \/var\/log\/auth.log\nmaxretry = 3\nbantime  = 24h\nfindtime = 10m<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Lagre og last inn p\u00e5 nytt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo fail2ban-client -t\nsudo fail2ban-client reload\nsudo fail2ban-client status sshd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Forventet utdata fra <code>status sshd<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Status for the jail: sshd\n|- Filter\n|  |- Currently failed: 2\n|  |- Total failed: 47\n|  `- File list: \/var\/log\/auth.log\n`- Actions\n   |- Currently banned: 1\n   |- Total banned: 8\n   `- Banned IP list: 185.220.101.45<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hvis du kj\u00f8rer SSH p\u00e5 en ikke-standard port (f.eks. 2222), oppdater <code>port = 2222<\/code> i jail-konfigurasjonen. Fail2ban vil da blokkere den spesifikke porten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vanlig feil nr. 3:<\/strong> P\u00e5 Ubuntu 22.04 og nyere med systemd bruker SSH journald i stedet for <code>\/var\/log\/auth.log<\/code>. Hvis logfilen er tom eller ikke finnes, sett <code>backend = systemd<\/code> og fjern <code>logpath<\/code> fra jail-konfigurasjonen. Alternativt, s\u00f8rg for at <code>rsyslog<\/code> er installert: <code>sudo apt install -y rsyslog<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-4-beskytt-nginx\">Steg 4: Beskytt Nginx med Fail2ban<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nginx leveres med innebygde Fail2ban-filtre for autentiseringsfeil og rate-limiting-brudd. Opprett en dedikert Nginx jail:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/fail2ban\/jail.d\/nginx.local<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>[nginx-http-auth]\nenabled  = true\nport     = http,https\nfilter   = nginx-http-auth\nlogpath  = \/var\/log\/nginx\/error.log\nmaxretry = 5\nbantime  = 1h\n\n[nginx-limit-req]\nenabled  = true\nport     = http,https\nfilter   = nginx-limit-req\nlogpath  = \/var\/log\/nginx\/error.log\nmaxretry = 10\nbantime  = 30m\n\n[nginx-botsearch]\nenabled  = true\nport     = http,https\nfilter   = nginx-botsearch\nlogpath  = \/var\/log\/nginx\/access.log\nmaxretry = 2\nbantime  = 24h<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filteret <code>nginx-http-auth<\/code> blokkerer IP-adresser som mislykkes med HTTP Basic Auth. <code>nginx-limit-req<\/code> fanger opp klienter som overskrider din Nginx rate-limit-sone (konfigurert med <code>limit_req_zone<\/code> i Nginx). <code>nginx-botsearch<\/code> blokkerer skannere som leter etter kjente s\u00e5rbare stier som <code>\/wp-login.php<\/code> eller <code>\/.env<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verifiser at filterfilene eksisterer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls \/etc\/fail2ban\/filter.d\/nginx*<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vanlig feil nr. 4:<\/strong> Filterfilene <code>nginx-limit-req.conf<\/code> og <code>nginx-botsearch.conf<\/code> mangler i noen Fail2ban-installasjoner. Sjekk med <code>ls \/etc\/fail2ban\/filter.d\/nginx*<\/code>. Hvis de mangler, last dem ned fra <a href=\"https:\/\/github.com\/fail2ban\/fail2ban\" target=\"_blank\" rel=\"noopener\">Fail2ban GitHub-repositoriet<\/a> og kopier til <code>\/etc\/fail2ban\/filter.d\/<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-5-beskytt-apache\">Steg 5: Beskytt Apache med Fail2ban<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Apache-beskyttelse ligner p\u00e5 Nginx, men bruker andre filterfilnavn. Fail2ban inkluderer ferdige filtre for de vanligste Apache-angrepsm\u00f8nstrene:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/fail2ban\/jail.d\/apache.local<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>[apache-auth]\nenabled  = true\nport     = http,https\nfilter   = apache-auth\nlogpath  = \/var\/log\/apache2\/*error.log\nmaxretry = 5\nbantime  = 1h\n\n[apache-badbots]\nenabled  = true\nport     = http,https\nfilter   = apache-badbots\nlogpath  = \/var\/log\/apache2\/*access.log\nmaxretry = 2\nbantime  = 24h\n\n[apache-noscript]\nenabled  = true\nport     = http,https\nfilter   = apache-noscript\nlogpath  = \/var\/log\/apache2\/*error.log\nmaxretry = 6\nbantime  = 2h\n\n[apache-overflows]\nenabled  = true\nport     = http,https\nfilter   = apache-overflows\nlogpath  = \/var\/log\/apache2\/*error.log\nmaxretry = 2\nbantime  = 24h<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>apache-badbots<\/code> bruker en liste over kjente ondsinnede bot-signaturer definert i <code>\/etc\/fail2ban\/filter.d\/apache-badbots.conf<\/code>. Filen inneholder regul\u00e6re uttrykk for hundrevis av kjente skannerverkt\u00f8y. <code>apache-overflows<\/code> blokkerer IP-er som pr\u00f8ver bufferoverflytsangrep mot Apache-moduler.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-6-eget-filter\">Steg 6: Lag et egendefinert filter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Egendefinerte filtre er n\u00f8dvendige for applikasjoner som ikke har innebygde Fail2ban-filtre. Her er et eksempel med en Node.js API som logger mislykkede autentiseringsfors\u00f8k p\u00e5 f\u00f8lgende format:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Typisk loggformat fra en Node.js-applikasjon:\n2026-06-21T10:23:45.123Z [ERROR] Authentication failed for user 'admin' from IP 192.168.1.50\n2026-06-21T10:23:46.456Z [ERROR] Authentication failed for user 'root' from IP 192.168.1.50<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Opprett filterdefinisjonen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/fail2ban\/filter.d\/nodeapp.conf<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>[Definition]\n# Matcher \"Authentication failed ... from IP &lt;IP&gt;\"\nfailregex = ^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+Z \\[ERROR\\] Authentication failed .* from IP &lt;ADDR&gt;$\n\n# Ingen unntak\nignoreregex =<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Test filteret mot loggfilen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Test filter mot en loggfil\nsudo fail2ban-regex \/var\/log\/myapp\/error.log \/etc\/fail2ban\/filter.d\/nodeapp.conf\n\n# Forventet utdata:\n# Lines:   245 lines, 0 ignored, 47 matched, 198 missed<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Opprett deretter jail-konfigurasjonen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/fail2ban\/jail.d\/nodeapp.local<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>[nodeapp]\nenabled  = true\nport     = http,https\nfilter   = nodeapp\nlogpath  = \/var\/log\/myapp\/error.log\nmaxretry = 5\nbantime  = 2h\nfindtime = 10m<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vanlig feil nr. 5:<\/strong> Regul\u00e6re uttrykk i <code>failregex<\/code> er sv\u00e6rt sensitive for formateringsfeil. Bruk alltid <code>fail2ban-regex<\/code> til \u00e5 teste filteret mot faktiske logglinjer f\u00f8r du aktiverer jailen. En feil i regeksen gir null treff og dermed ingen beskyttelse, uten at Fail2ban rapporterer noen feil.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-7-epostvarsler\">Steg 7: Konfigurer e-postvarsler<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban kan sende e-postvarsler n\u00e5r en IP blokkeres. Dette krever at sendmail eller en SMTP-tjeneste er konfigurert p\u00e5 serveren.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y mailutils sendmail<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Legg til f\u00f8lgende i <code>[DEFAULT]<\/code>-seksjonen i <code>\/etc\/fail2ban\/jail.local<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[DEFAULT]\n# ... eksisterende innstillinger ...\n\n# E-postvarsler\ndestemail = admin@example.com\nsender    = fail2ban@dittnettsted.no\nmta       = sendmail\n\n# action_mwl = ban + send e-post med whois og logglinjer\naction = %(action_mwl)s<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tilgjengelige handlingstyper:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Handling<\/th><th>Beskrivelse<\/th><\/tr><\/thead><tbody><tr><td><code>%(action_)s<\/code><\/td><td>Kun blokkering, ingen e-post<\/td><\/tr><tr><td><code>%(action_mw)s<\/code><\/td><td>Blokkering pluss e-post med whois-info<\/td><\/tr><tr><td><code>%(action_mwl)s<\/code><\/td><td>Blokkering pluss e-post med whois og relevante logglinjer<\/td><\/tr><tr><td><code>%(action_cf_mwl)s<\/code><\/td><td>Blokkering pluss Cloudflare-ban pluss e-post med whois og logg<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For de fleste produksjonsmilj\u00f8er anbefales <code>%(action_mwl)s<\/code> for viktige jails (SSH) og enkel <code>%(action_)s<\/code> for jails med h\u00f8y volum (web-bots) for \u00e5 unng\u00e5 e-postflom.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-8-administrer-baner\">Steg 8: Administrer og overv\u00e5k baner<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban-client er ditt prim\u00e6re administrasjonsverkt\u00f8y. De viktigste kommandoene:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Vis alle aktive jails og statistikk\nsudo fail2ban-client status\n\n# Detaljert status for en spesifikk jail\nsudo fail2ban-client status sshd\n\n# Fjern blokkering av en IP-adresse\nsudo fail2ban-client set sshd unbanip 192.168.1.100\n\n# Blokker en IP manuelt\nsudo fail2ban-client set sshd banip 203.0.113.45\n\n# Test konfigurasjonssyntaks\nsudo fail2ban-client -t\n\n# Last inn endringer uten omstart\nsudo fail2ban-client reload\n\n# Last inn kun \u00e9n jail p\u00e5 nytt\nsudo fail2ban-client reload sshd\n\n# Vis alle blokkerte IP-er p\u00e5 tvers av alle jails\nsudo fail2ban-client status | grep \"Jail list:\" | sed \"s\/.*Jail list:\\s*\/\/\" | tr \",\" \"\\n\" | xargs -I{} sudo fail2ban-client status {} | grep \"Banned IP\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban-loggen gir nyttig innsikt i hva som skjer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># F\u00f8lg Fail2ban-loggen i sanntid\nsudo tail -f \/var\/log\/fail2ban.log\n\n# Vis kun blokkeringshendelser\nsudo grep \"Ban \" \/var\/log\/fail2ban.log | tail -50<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Typisk loggutskrift:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>2026-06-21 10:23:47,891 fail2ban.filter[12345]: INFO    [sshd] Found 185.220.101.45\n2026-06-21 10:23:52,234 fail2ban.filter[12345]: INFO    [sshd] Found 185.220.101.45\n2026-06-21 10:23:55,678 fail2ban.filter[12345]: INFO    [sshd] Found 185.220.101.45\n2026-06-21 10:23:55,701 fail2ban.actions[12345]: NOTICE  [sshd] Ban 185.220.101.45<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-9-ufw-nftables\">Steg 9: Integrasjon med UFW og nftables<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ubuntu bruker ofte UFW (Uncomplicated Firewall) som et brukervennlig grensesnitt mot iptables eller nftables. Fail2ban kan integreres med UFW ved \u00e5 sette <code>banaction = ufw<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ufw-integrasjon\">UFW-integrasjon<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Kontroller at UFW er aktivt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw status verbose<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Konfigurer Fail2ban til \u00e5 bruke UFW som bakend. Legg til i <code>\/etc\/fail2ban\/jail.local<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[DEFAULT]\nbanaction = ufw\nbanaction_allports = ufw<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For nftables p\u00e5 Ubuntu 24.04:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[DEFAULT]\nbanaction = nftables-multiport\nbanaction_allports = nftables-allports<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"inkrementell-ban\">Inkrementell bantime<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En sv\u00e6rt nyttig funksjon i Fail2ban er inkrementell bantime: gjentatte overtredere blokkeres stadig lenger. Aktiver dette i <code>jail.local<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[DEFAULT]\n# Aktiver inkrementell ban\nbantime.increment = true\n\n# Grunnverdi for f\u00f8rste ban\nbantime.factor = 1\n\n# Multiplikator: hvert nytt brudd dobler bantime (1h, 2h, 4h, 8h...)\nbantime.multiplier = 2\n\n# Maks ban: 4 uker\nbantime.maxtime = 4w\n\n# Tilgivelse: glem historikk etter 1 uke uten ny overtredelse\nbantime.rndtime = 1w<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Med disse innstillingene blokkeres en angriper f\u00f8rste gang i 1 time, andre gang i 2 timer, tredje gang i 4 timer, og s\u00e5 videre opp til maksimalt 4 uker. Dette er langt mer effektivt enn en fast bantime og stopper hardnakkede angripere automatisk.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-10-recidive\">Steg 10: Recidive-jail for gjentatte overtredere<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>recidive<\/code> er en spesiell jail som overv\u00e5ker Fail2bans egen logg og blokkerer IP-er som utestenges igjen og igjen fra flere forskjellige jails. Det fungerer som et overordnet lag med beskyttelse mot de mest hardnakkede angriperne.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/fail2ban\/jail.d\/recidive.local<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>[recidive]\nenabled   = true\nfilter    = recidive\nlogpath   = \/var\/log\/fail2ban.log\n# Blokker i 1 uke\nbantime   = 1w\nfindtime  = 1d\n# Blokker etter 3 utestengninger fra andre jails innen 1 dag\nmaxretry  = 3\n# Blokker alle porter, ikke bare \u00e9n\nbanaction = iptables-allports<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Med denne konfigurasjonen: en angriper som utl\u00f8ser 3 forskjellige jails p\u00e5 \u00e9n dag, blokkeres fullstendig fra serveren i \u00e9n uke via <code>iptables-allports<\/code>. Dette er s\u00e6rlig effektivt mot automatiserte botnet-angrep som skanner etter mange forskjellige s\u00e5rbarheter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vanlig feil nr. 6:<\/strong> Recidive-jailen krever at <code>logpath<\/code> peker p\u00e5 Fail2bans loggfil, ikke systemloggen. Bekreft stien med <code>sudo fail2ban-client get logtarget<\/code>. Standardstien er <code>\/var\/log\/fail2ban.log<\/code>, men dette kan variere basert p\u00e5 konfigurasjon.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-11-test\">Steg 11: Test og verifiser konfigurasjonen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Testing av Fail2ban er kritisk for \u00e5 bekrefte at filtre fungerer korrekt og at du ikke har konfigurert noe som kan blokkere legitim trafikk.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Test at SSH-jailens filter faktisk matcher feil i loggfilen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Test sshd-filter mot auth.log\nsudo fail2ban-regex \/var\/log\/auth.log \/etc\/fail2ban\/filter.d\/sshd.conf\n\n# Forventet utdata (antall matcher varierer):\n# Lines:   5892 lines, 0 ignored, 234 matched, 5658 missed\n# Failregex: 234 total<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For \u00e5 simulere et SSH brute-force-angrep (fra en annen maskin for \u00e5 ikke blokkere deg selv):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Fra en annen maskin eller VM (ALDRI fra din egen IP):\nfor i in {1..5}; do ssh feil_bruker@SERVER_IP; done\n\n# Sjekk deretter om IP er blokkert:\nsudo fail2ban-client status sshd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sjekk at brannmurreglene faktisk er lagt til:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># For iptables\nsudo iptables -L f2b-sshd -n --line-numbers\n\n# For nftables\nsudo nft list ruleset | grep fail2ban\n\n# For UFW\nsudo ufw status numbered | grep DENY<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-12-vedlikehold\">Steg 12: Automatisert vedlikehold og loggrotasjon<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban-loggen kan vokse raskt p\u00e5 en server med mye angrepsaktivitet. Ubuntu bruker logrotate for \u00e5 administrere dette automatisk. Kontroller at Fail2bans logrotate-konfigurasjon er p\u00e5 plass:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat \/etc\/logrotate.d\/fail2ban<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Forventet innhold:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/var\/log\/fail2ban.log {\n    weekly\n    rotate 4\n    compress\n    delaycompress\n    missingok\n    postrotate\n        fail2ban-client flushlogs 1>\/dev\/null\n    endscript\n    create 640 root adm\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For \u00e5 aktivere persistens av baner p\u00e5 tvers av omstarter, legg til disse linjene i <code>[DEFAULT]<\/code>-seksjonen i <code>jail.local<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[DEFAULT]\n# Lagre banhistorikk i SQLite-database\ndbfile = \/var\/lib\/fail2ban\/fail2ban.sqlite3\n\n# Rens baner eldre enn 7 dager fra databasen\ndbpurgeage = 7d<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Med denne innstillingen vil aktive baner overleve en serveromstart. Dette er viktig for produksjonsservere der angriperne b\u00f8r forbli blokkert selv etter planlagte vedlikeholdsomstarter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Overv\u00e5k topp 10 mest blokkerte IP-er:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Vis topp 10 mest blokkerte IP-er fra loggen\nsudo grep \"Ban \" \/var\/log\/fail2ban.log | awk '{print $NF}' | sort | uniq -c | sort -rn | head -10<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"feilsoking\">Vanlige feil og feils\u00f8king<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Her er de 10 vanligste problemene med Fail2ban og l\u00f8sningene:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Problem<\/th><th>\u00c5rsak<\/th><th>L\u00f8sning<\/th><\/tr><\/thead><tbody><tr><td>Fail2ban starter ikke<\/td><td>iptables ikke tilgjengelig eller Python-feil<\/td><td>Sjekk <code>journalctl -u fail2ban -n 50<\/code>. Installer <code>iptables<\/code> eller bytt til <code>nftables-multiport<\/code>.<\/td><\/tr><tr><td>Jail aktiveres ikke<\/td><td><code>enabled = true<\/code> mangler eller konfigurasjonsfeil<\/td><td>Kj\u00f8r <code>fail2ban-client -t<\/code> for \u00e5 finne syntaksfeil. Sjekk at <code>enabled = true<\/code> er satt.<\/td><\/tr><tr><td>Filter matcher ingenting<\/td><td>Feil loggfilsti eller feil regeks-format<\/td><td>Bruk <code>fail2ban-regex \/sti\/til\/log \/etc\/fail2ban\/filter.d\/filter.conf<\/code> for \u00e5 debugge.<\/td><\/tr><tr><td>Egen IP blokkert<\/td><td><code>ignoreip<\/code> ikke konfigurert<\/td><td>Kj\u00f8r <code>fail2ban-client set JAIL unbanip DIN_IP<\/code> umiddelbart. Legg IP i <code>ignoreip<\/code>.<\/td><\/tr><tr><td>Loggfil for SSH er tom<\/td><td>Ubuntu bruker journald, ikke syslog<\/td><td>Sett <code>backend = systemd<\/code> i sshd-jailen og fjern <code>logpath<\/code>.<\/td><\/tr><tr><td>IP blokkeres ikke til tross for mange feil<\/td><td>Feil loggfilsti eller loggen er tom<\/td><td>Bekreft at loggfilen har innhold: <code>tail -100 \/var\/log\/auth.log<\/code>.<\/td><\/tr><tr><td>Fail2ban bruker for mye CPU<\/td><td>For mange jails med h\u00f8y polling-frekvens<\/td><td>Bruk <code>backend = systemd<\/code> i stedet for <code>polling<\/code>. Deaktiver ubrukte jails.<\/td><\/tr><tr><td>Banregler forsvinner etter omstart<\/td><td>Persistens ikke aktivert<\/td><td>Sett <code>dbfile = \/var\/lib\/fail2ban\/fail2ban.sqlite3<\/code> i <code>jail.local<\/code>.<\/td><\/tr><tr><td>E-postvarsler sendes ikke<\/td><td>sendmail ikke installert eller feil konfigurasjon<\/td><td>Test med <code>echo \"test\" | mail -s \"test\" admin@example.com<\/code>. Installer <code>mailutils<\/code>.<\/td><\/tr><tr><td>Cloudflare-IP blokkeres<\/td><td>Reverse proxy sender CDN-IP, ikke angriperens IP<\/td><td>Aktiver <code>real_ip_module<\/code> i Nginx med Cloudflares IP-rekkevidder i <code>set_real_ip_from<\/code>.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vanlig feil nr. 7:<\/strong> Mange glemmer \u00e5 legge til CDN-IP-adresser i <code>ignoreip<\/code>. Hvis du bruker Cloudflare, Nginx som reverse proxy eller en load balancer, vil Fail2ban se proxy-IPen og blokkere den i stedet for angriperens reelle IP. For Nginx: aktiver <code>real_ip_module<\/code> og sett <code>set_real_ip_from<\/code> til Cloudflares IP-rekkevidder i Nginx-konfigurasjonen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vanlig feil nr. 8:<\/strong> Fail2ban baner persisteres ikke som standard mellom omstarter. Etter en serveromstart forsvinner alle aktive baner. For \u00e5 aktivere persistens, legg til <code>dbfile = \/var\/lib\/fail2ban\/fail2ban.sqlite3<\/code> og <code>dbpurgeage = 7d<\/code> i <code>[DEFAULT]<\/code>-seksjonen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"avanserte-tips\">Avanserte tips og optimalisering<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"geoip-og-ipset\">Geografisk blokkering med ipset<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban blokkerer individuelle IP-adresser. For \u00e5 blokkere hele geografiske regioner kan du kombinere Fail2ban med <code>ipset<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y ipset\n\n# Opprett et ipset-sett\nsudo ipset create blockedcountries hash:net\n\n# Eksempel: hent IP-rekkevidder og legg til i settet\n# (erstatt cn.zone med \u00f8nsket land fra ipdeny.com)\ncurl -s https:\/\/www.ipdeny.com\/ipblocks\/data\/countries\/cn.zone | \\\n  sudo xargs -I{} ipset add blockedcountries {} 2>\/dev\/null\n\n# Blokker med iptables\nsudo iptables -I INPUT -m set --match-set blockedcountries src -j DROP\n\n# Gj\u00f8r permanent ved \u00e5 lagre ipset-regler\nsudo ipset save > \/etc\/ipset.rules<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"crowdsec-integrasjon\">CrowdSec som komplement til Fail2ban<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CrowdSec er et samarbeidsbasert IPS-system der blokkeringsavgj\u00f8relser deles mellom tusenvis av servere globalt. En IP som angriper \u00e9n server p\u00e5 CrowdSec-nettverket, blokkeres automatisk p\u00e5 alle andre servere i nettverket. <a href=\"https:\/\/www.redhat.com\/en\/blog\/protect-systems-fail2ban\" target=\"_blank\" rel=\"noopener\">Red Hat anbefaler<\/a> \u00e5 kombinere Fail2ban og CrowdSec for best mulig beskyttelse:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Fail2ban:<\/strong> Lokalt, reaktivt, basert p\u00e5 dine egne logger. Null avhengigheter til tredjeparter.<\/li><li><strong>CrowdSec:<\/strong> Globalt trusselinformasjonsnettverk, blokkerer kjente ondsinnede IP-er proaktivt.<\/li><li><strong>Kombinasjon:<\/strong> Fail2ban fanger lokale brute-force-m\u00f8nstre. CrowdSec blokkerer kjente angripere fra globale databaser.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ytterligere herdingstips for produksjonsmilj\u00f8er:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Bruk <code>maxretry = 3<\/code> for SSH:<\/strong> 5 er for h\u00f8yt. 3 feil er nok for en menneskelig bruker som tastet inn feil passord, men eliminerer automatiserte angrep.<\/li><li><strong>Bytt SSH-port fra 22:<\/strong> Dette alene reduserer antall brute-force-fors\u00f8k med 95%. Fail2ban h\u00e5ndterer resten.<\/li><li><strong>Aktiver SSH-n\u00f8kkelautentisering:<\/strong> Deaktiver passordinnlogging med <code>PasswordAuthentication no<\/code> i <code>\/etc\/ssh\/sshd_config<\/code>. Fail2ban er da et ekstra forsvarslag, ikke eneste forsvar.<\/li><li><strong>Kombiner med <a href=\"https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Docker_Security_Cheat_Sheet.html\" target=\"_blank\" rel=\"noopener\">OWASP-sikkerhetsretningslinjer<\/a>:<\/strong> For webapplikasjoner, bruk WAF og sikkerhetshoder i tillegg til Fail2ban.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ytelsesovervaking\">Ytelse og overv\u00e5kning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban er generelt sv\u00e6rt lett p\u00e5 systemressurser. En typisk konfigurasjon med 10 aktive jails bruker under 30 MB RAM og under 1% CPU p\u00e5 en moderne server. Overv\u00e5k ressursbruken med:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Vis fail2ban-serverens ressursbruk\nps aux | grep fail2ban\n\n# Aggregert statistikk over alle jails\nsudo fail2ban-client status | grep \"Jail list:\" | \\\n  sed \"s\/.*Jail list:\\s*\/\/\" | tr \",\" \"\\n\" | \\\n  while read jail; do\n    banned=$(sudo fail2ban-client status \"$jail\" 2>\/dev\/null | grep \"Total banned\" | awk '{print $NF}')\n    echo \"$jail: $banned totalt blokkert\"\n  done<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Overv\u00e5kningsmetrikk<\/th><th>Kilde<\/th><th>Verkt\u00f8y<\/th><\/tr><\/thead><tbody><tr><td>Aktive baner per jail<\/td><td><code>fail2ban-client status JAIL<\/code><\/td><td>CLI, Prometheus<\/td><\/tr><tr><td>Totalt antall baner (historisk)<\/td><td><code>\/var\/log\/fail2ban.log<\/code><\/td><td>grep, awk, Graylog<\/td><\/tr><tr><td>Topp angripende IP-er<\/td><td>fail2ban.log<\/td><td>awk, sort, uniq<\/td><\/tr><tr><td>Brannmurregler<\/td><td>iptables eller nftables<\/td><td><code>iptables -L<\/code>, <code>nft list<\/code><\/td><\/tr><tr><td>Fail2ban ressursbruk<\/td><td>systemd, ps<\/td><td>top, htop, Prometheus node_exporter<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"relatert-dekning\">Relatert dekning<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"les-mer\">Les mer<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"\/no\/openssl-certificate-authority\/\">Privat Certificate Authority med OpenSSL: 12 steg, 30 min [2026]<\/a><\/li><li><a href=\"\/no\/https-tls-13-nodejs\/\">HTTPS og TLS 1.3 i Node.js: 12 steg [2026]<\/a><\/li><li><a href=\"\/no\/ecdsa-digital-signatures-nodejs\/\">ECDSA Digitale Signaturer i Node.js: 12 Steg, 30 Min [2026]<\/a><\/li><li><a href=\"\/no\/helmet-js-nodejs-sikkerhetshoder\/\">Helmet.js i Node.js: Sikkerhetshoder i 12 Steg [2026]<\/a><\/li><li><a href=\"\/no\/sql-injection-nodejs\/\">SQL Injection i Node.js: 12 Steg for Sikre Databaser [2026]<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">Ofte stilte sp\u00f8rsm\u00e5l<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"blokkerer-fail2ban-angripere-permanent\">Blokkerer Fail2ban angripere permanent?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nei, som standard blokkerer Fail2ban for en tidsbegrenset periode definert av <code>bantime<\/code>. Du kan sette <code>bantime = -1<\/code> for permanent blokkering, men dette anbefales ikke uten inkrementell bantime (<code>bantime.increment = true<\/code>) eller manuell gjennomgang. Recidive-jailen er en bedre tiln\u00e6rming for \u00e5 h\u00e5ndtere gjentatte overtredere over lengre tid uten risiko for \u00e5 permanent blokkere legitime brukere.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hva-er-forskjellen-mellom-fail2ban-og-en-waf\">Hva er forskjellen mellom Fail2ban og en WAF?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban er en loggbasert IPS som reagerer etter at mislykkede fors\u00f8k er logget. En Web Application Firewall (WAF) som ModSecurity eller Cloudflare WAF inspiserer HTTP-trafikk inline og blokkerer ondsinnede foresp\u00f8rsler f\u00f8r de n\u00e5r applikasjonen. De to er komplement\u00e6re: en WAF er mer proaktiv og filtrerer p\u00e5 lag 7, mens Fail2ban er et andrelagsforsvar som fanger m\u00f8nstre over tid.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kan-fail2ban-brukes-med-docker-containere\">Kan Fail2ban brukes med Docker-containere?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja, men med forbehold. Fail2ban kj\u00f8rer p\u00e5 verts-OS-niv\u00e5 og leser loggfiler fra verts-filsystemet. For Docker-containere m\u00e5 du enten montere containerloggene p\u00e5 verts-filsystemet, eller bruke Dockers log driver til \u00e5 skrive til en fil som Fail2ban kan lese. Alternativt kan du kj\u00f8re Fail2ban inne i en privilegert container med tilgang til vertsnettverket, selv om dette ikke anbefales sikkerhetsmessig.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hva-er-forskjellen-mellom-fail2ban-og-crowdsec\">Hva er forskjellen mellom Fail2ban og CrowdSec?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban er lokalt og reaktivt: det l\u00e6rer av din servers egne logger. CrowdSec er et samarbeidsbasert IPS-system der blokkeringsavgj\u00f8relser deles mellom tusenvis av servere globalt. En IP som angriper \u00e9n server p\u00e5 CrowdSec-nettverket, kan automatisk blokkeres av alle andre servere i nettverket. CrowdSec har en gratis community-plan, og de to verkt\u00f8yene kan brukes side om side for best mulig dekning.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kan-fail2ban-hindre-ddos-angrep\">Kan Fail2ban hindre DDoS-angrep?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nei, Fail2ban er ikke designet for distribuerte tjenestenektangrep. Det er effektivt mot angrep fra \u00e9n eller noen f\u00e5 IP-adresser, men et volumetrisk DDoS-angrep fra hundretusenvis av IP-er vil overbelaste serveren lenge f\u00f8r Fail2ban rekker \u00e5 blokkere dem. For DDoS-beskyttelse trenger du dedikerte l\u00f8sninger som Cloudflare DDoS Protection eller AWS Shield.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hva-gjor-jeg-hvis-jeg-laser-meg-selv-ute\">Hva gj\u00f8r jeg hvis jeg l\u00e5ser meg selv ute?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Hvis du blokkerer din egen IP, har du to alternativer: (1) Logg inn via serverkonsoll (KVM, IPMI eller VPS-konsoll) og kj\u00f8r <code>sudo fail2ban-client set sshd unbanip DIN_IP<\/code>. (2) Vent til bantime utl\u00f8per. For \u00e5 unng\u00e5 dette i fremtiden: legg alltid til din IP i <code>ignoreip<\/code> i <code>jail.local<\/code> og bekreft med <code>fail2ban-client -t<\/code> f\u00f8r du gj\u00f8r aggressive konfigurasjonsendringer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"bor-jeg-bruke-fail2ban-alene-for-a-sikre-ssh\">B\u00f8r jeg bruke Fail2ban alene for \u00e5 sikre SSH?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nei. Fail2ban er ett lag i en dybdebeskyttelsesstrategi. For SSH anbefales disse tiltakene i prioritert rekkef\u00f8lge: (1) Bytt SSH til en ikke-standard port. (2) Aktiver SSH-n\u00f8kkelautentisering og deaktiver passordinnlogging med <code>PasswordAuthentication no<\/code>. (3) Begrens hvem som kan logge inn med <code>AllowUsers<\/code> eller <code>AllowGroups<\/code>. (4) Aktiver Fail2ban som bakgrunnsbeskyttelse. Med de tre f\u00f8rste tiltakene p\u00e5 plass er brute-force-risikoen allerede dramatisk redusert, og Fail2ban er det siste sikkerhetsnettet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"fungerer-fail2ban-med-ipv6\">Fungerer Fail2ban med IPv6?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja, Fail2ban st\u00f8tter fullt ut IPv6. Kontroller at iptables6 (ip6tables) eller nftables er installert. For UFW-brukere h\u00e5ndteres IPv6 automatisk. S\u00f8rg for at <code>ignoreip<\/code> inkluderer IPv6-loopback-adressen <code>::1<\/code> i tillegg til <code>127.0.0.1\/8<\/code>, noe som er standard. For \u00e5 se IPv6-baner: <code>sudo ip6tables -L f2b-sshd -n<\/code>.<\/p>\n\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Servere eksponert p\u00e5 internett mottar typisk 500\u20132000 brute-force-fors\u00f8k mot SSH hver dag. Uten automatisk beskyttelse er det bare et sp\u00f8rsm\u00e5l om tid f\u00f8r en angriper gjetter riktig passord. Fail2ban er\u2026<\/p>\n","protected":false},"author":5,"featured_media":158,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-157","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-security"],"_links":{"self":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts\/157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/comments?post=157"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts\/157\/revisions"}],"predecessor-version":[{"id":159,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts\/157\/revisions\/159"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/media\/158"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/media?parent=157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/categories?post=157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/tags?post=157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}