Wat fail2ban doet
Het IP-adres staat al voor de derde keer in tien minuten in `/var/log/auth.log`, telkens met dezelfde boodschap: `Failed password for root`. U kunt het handmatig blokkeren, maar over een uur staat het volgende adres voor uw deur. fail2ban is het antwoord op dat ritme.
fail2ban leest logbestanden, herkent patronen van mislukte aanmeldingen en past zelf de firewall aan. Geen handwerk, geen scripts die u zelf moet onderhouden. Het is open source, draait op elke Linux-server en is al sinds 2004 in gebruik. De kans is groot dat u het al eens hebt geïnstalleerd zonder te weten wat er precies gebeurt.
Wat fail2ban doet
De kern is eenvoudig: een daemon scant continu logbestanden. Ziet hij binnen een bepaalde tijd te veel mislukte pogingen van hetzelfde IP-adres, dan voegt hij een regel toe aan iptables of nftables. Die regel blokkeert het adres voor een ingestelde duur. Daarna vervalt de regel vanzelf.Standaard staat SSH centraal, maar fail2ban kijkt naar alles wat logs schrijft. Apache, Nginx, Postfix, Dovecot, ProFTPD — elk van die diensten kan een eigen "jail" krijgen met eigen regels. Een jail is een logische eenheid die een specifieke dienst beveiligt. Voor SSH kunt u instellen dat drie mislukte pogingen binnen vijf minuten leiden tot een blokkade van tien minuten. Voor een WordPress-loginpagina kunt u strenger zijn, omdat die aanvallen vaak massaal en geautomatiseerd zijn.
De software is opgebouwd uit drie delen: de `fail2ban-server` die als daemon draait, de `fail2ban-client` waarmee u de server aanstuurt, en een set configuratiebestanden. De client communiceert met de server via een Unix-socket, wat veilig is omdat het verkeer het systeem niet verlaat.
Filters en acties
Wat fail2ban flexibel maakt, is de scheiding tussen detectie en reactie. Detectie gebeurt via filters in de `filter.d`-map. Elk filter bevat reguliere expressies die bepalen welke logregels als een mislukte poging tellen. Voor SSH zoekt het standaardfilter naar regels zoals `Failed password for invalid user` of `authentication failure`. Die patronen kunt u aanpassen of uitbreiden, afhankelijk van wat uw dienst wegschrijft.De reactie staat in de `action.d`-map. Standaard blokkeert fail2ban via iptables, maar er zijn alternatieven: firewalld, ufw, of een e-mailwaarschuwing naar de beheerder. U kunt zelfs een melding naar een SIEM sturen als u in een grotere omgeving werkt. Die modulariteit betekent dat u fail2ban kunt inzetten op een simpele VPS, maar ook in een netwerk met meerdere systemen.
De configuratie zelf staat in `jail.conf` en `jail.local`. Het eerste bestand bevat de standaardwaarden, het tweede is waar u uw eigen instellingen neerzet. Die scheiding is belangrijk: bij een upgrade van het pakket wordt `jail.conf` overschreven, `jail.local` blijft onaangeroerd.
Wat het kost
fail2ban is geen tovermiddel. Het scant alleen wat er in logs staat, en het kan alleen reageren op patronen die u hebt gedefinieerd. Een aanvaller die langzaam te werk gaat — één poging per uur vanaf een nieuw IP-adres — zal u niet opvallen. En wie een botnet met duizenden adressen inzet, hoeft maar één keer te raden per adres.De configuratie vraagt ook onderhoud. Een filter dat te ruim is, blokkeert legitieme gebruikers. Een filter dat te strikt is, mist aanvallen. Het `fail2ban-regex`-commando helpt daarbij: u kunt er uw reguliere expressies mee testen tegen echte of voorbeeld-logregels, voordat u ze in productie zet. Dat is geen overbodige luxe — een foutieve regex veroorzaakt false positives of laat juist alles door.
De versies
In Debian bookworm wordt fail2ban geleverd als versie 1.0.2-2. In trixie en sid staan respectievelijk 1.1.0-8 en 1.1.0-7 klaar. De software is geschreven in Python en draait via `fail2ban-python`, een hulpprogramma dat de juiste Python-versie selecteert. Op systemen met meerdere Python-versies naast elkaar is dat geen detail.De software wordt actief onderhouden. De bronarchiefversie 1.1.0 dateert van 2 mei 2024, versie 0.11.2-2 van 12 juli 2021. Die regelmaat betekent dat nieuwe aanvalspatronen worden opgevangen en dat compatibiliteit met nieuwe kernel- en firewallversies gegarandeerd blijft.
Waar het past
fail2ban is een extra laag, geen vervanging voor goede basisbeveiliging. Het vult gebruikerspermissies, firewalls en beperkte netwerktoegang aan. Het principe van minimale rechten blijft overeind: draai diensten niet als root, sluit poorten die u niet gebruikt, en zie fail2ban als de laag die de rest afdekt.Op een VPS of dedicated server met een open SSH-poort is de kans op brute-force-aanvallen groot. Daar doet fail2ban zijn werk het best: het vangt de geautomatiseerde pogingen op die anders uw logs zouden vullen en uw CPU zouden belasten. De kans dat iemand met de hand uw wachtwoord raadt is klein, maar de kans dat een bot dat systematisch probeert is groot. fail2ban maakt die tweede groep onschadelijk zonder dat u er wakker van ligt.
Het is geen kwestie van of u fail2ban nodig hebt, maar van wat uw server blootstelt. Staat er niets open, dan hebt u het niet nodig. Staat er één poort open, dan is het een kwestie van tijd voordat iemand die vindt. En dan wilt u liever dat fail2ban al draait — het instellen achteraf is lastiger dan het lijkt, omdat u dan moet bepalen welke pogingen er al zijn geweest.