Fail2Ban configureren en beheren op Linux
Fail2Ban configureren en beheren op Linux
Dit artikel legt uit hoe Fail2Ban werkt, hoe je het configureert en hoe je veelvoorkomende beheercommando's gebruikt. Gericht op beheerders die een Linux-server beveiligen tegen brute force-aanvallen.
Vereisten
- Linux-server met root-toegang of sudo-rechten - Fail2Ban versie 0.11.x of 1.x (controleer met `fail2ban-client --version`) - Een actieve firewall: `ufw`, `iptables` of `nftables` - Toegang tot logbestanden in `/var/log/` (standaard op Debian/Ubuntu)
Stappen
1. Controleer de Fail2Ban-versie
fail2ban-client --version
Fail2Ban 1.x is de huidige stabiele release. Versie 0.11.x wordt nog ondersteund maar ontvangt geen nieuwe functies meer. De commando's in dit artikel werken op beide versies.
2. Controleer of de server draait
fail2ban-client ping
De server moet antwoorden met `PONG`. Als je `Fail2Ban is not running` ziet, start de service dan met:
sudo systemctl start fail2ban
3. Bekijk de status van een jail
Een jail is een regelset die bepaalt welk logbestand wordt gevolgd, welke patronen worden gezocht en welke actie wordt ondernomen bij herhaalde mislukte pogingen. De standaard SSH-jail heet `sshd`.
fail2ban-client status sshd
Dit toont het aantal momenteel gebande IP-adressen, de totale bans en de actieve firewallregels.
4. Voeg handmatig een IP-adres toe aan een jail
sudo fail2ban-client set sshd banip 203.0.113.25
Dit blokkeert het IP-adres onmiddellijk, zonder te wachten op de drempelwaarde. Gebruik dit voor IP-adressen waarvan je zeker weet dat ze kwaadwillig zijn.
5. Verwijder een IP-adres uit een jail
sudo fail2ban-client set sshd unbanip 203.0.113.25
Dit verwijdert het IP-adres direct uit de blokkadetabel en heft de firewallregel op. Handig bij valse positieven of na het oplossen van een probleem.
6. Test een reguliere expressie met fail2ban-regex
fail2ban-regex /var/log/auth.log 'sshd.<em>Failed password.</em>from <HOST>'
Dit test of de `failregex`-patronen in je filterconfiguratie daadwerkelijk overeenkomen met regels in je logbestand. Vervang `
7. Configureer een jail in jail.local
Maak een lokaal configuratiebestand aan dat de standaardwaarden overschrijft:
sudo nano /etc/fail2ban/jail.local
Voeg dit toe voor een SSH-jail met aangepaste drempels:
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h- `maxretry`: aantal mislukte pogingen voordat een ban wordt opgelegd - `findtime`: tijdsvenster waarbinnen de pogingen moeten plaatsvinden - `bantime`: duur van de blokkade in seconden (of met achtervoegsel zoals `1h`)
Herstart Fail2Ban na configuratiewijzigingen:
sudo systemctl restart fail2ban
8. Bekijk de firewallregels die Fail2Ban beheert
sudo iptables -L f2b-sshd -n
Dit toont de actieve Fail2Ban-firewallregels voor de sshd-jail. De keten `f2b-sshd` bevat alle gebande IP-adressen. Bij `nftables` gebruik je `sudo nft list ruleset` en filter je op `f2b-`.
Verificatie
Controleer of Fail2Ban correct functioneert:
sudo fail2ban-client status
Dit toont alle actieve jails. Per jail zie je het aantal gebande IP-adressen. Om te bevestigen dat een specifiek IP-adres is geblokkeerd:
sudo fail2ban-client status sshd | grep "Banned IP list"
Een lege lijst betekent dat er geen IP-adressen zijn geblokkeerd. Dat is normaal op een goed beveiligde server.
Veelgestelde problemen
Fail2Ban start niet na een configuratiewijziging
Controleer de configuratie op syntaxfouten:
sudo fail2ban-client -t
Dit test alle configuratiebestanden en toont eventuele fouten. Veelvoorkomende oorzaak: een ontbrekende `[DEFAULT]`-sectie of een ongeldig `bantime`-formaat.
IP-adressen worden niet geblokkeerd ondanks mislukte pogingen
Controleer of de juiste logfile wordt gevolgd. Op systemen met systemd-journald moet je mogelijk de jail aanpassen:
[sshd]
backend = systemdTest daarna of de logregels worden herkend:
sudo fail2ban-regex systemd[sshd] 'sshd.*Failed password'
Fail2Ban blokkeert legitieme gebruikers
Verhoog `maxretry` of verlaag `findtime` in `jail.local`. Je kunt ook een whitelist instellen:
[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.1.0/24Dit voorkomt dat IP-adressen uit deze ranges worden geblokkeerd. Let op: `ignoreip` geldt voor alle jails. De server zelf draait zelden als root, wat de impact van een kwetsbaarheid in Fail2Ban beperkt — maar een foutieve `ignoreip`-configuratie kan een hele subnet uitsluiten van beveiliging.
Fail2Ban leest logbestanden zoals `/var/log/auth.log` en activeert firewallregels via `fail2ban-server`, terwijl `fail2ban-client` de configuratie-interface biedt via een socketverbinding. Die scheiding tussen server en client houdt het systeem stabiel, maar betekent ook dat je altijd beide processen moet controleren wanneer je wijzigingen doorvoert — een server die draait met een verouderde configuratie is net zo gevaarlijk als een server die niet draait.