Fail2ban instellen tegen brute force aanvallen
sudo apt update && sudo apt -y install fail2ban
Op RHEL-gebaseerde systemen gebruik je `dnf`:
sudo dnf -y install fail2ban
Beide commando's installeren Fail2ban inclusief alle Python-afhankelijkheden die nodig zijn om de service te draaien.
2. Service inschakelen en starten
Fail2ban draait als een systemd-service. Schakel de service in zodat deze automatisch start bij het opstarten van de server, en start hem direct:sudo systemctl enable fail2ban
sudo systemctl start fail2banHet eerste commando registreert de service voor automatisch starten. Het tweede commando activeert de daemon onmiddellijk.
3. Configuratiebestand aanmaken
De standaardconfiguratie staat in `/etc/fail2ban/jail.conf`. Pas dit bestand niet direct aan — pakketupdates overschrijven het. Maak in plaats daarvan een lokaal bestand aan dat de standaardwaarden overschrijft:sudo nano /etc/fail2ban/jail.local
Dit bestand blijft behouden bij systeemupdates en heeft voorrang op `jail.conf`.
4. Globale instellingen definiëren
De `[DEFAULT]`-sectie in `jail.local` bevat parameters die voor alle services gelden. Stel de twee belangrijkste waarden in:[DEFAULT]
bantime = 3600
maxretry = 3`bantime = 3600` blokkeert een IP-adres voor 3600 seconden (één uur). `maxretry = 3` betekent dat een IP-adres na drie mislukte inlogpogingen wordt geblokkeerd. Deze waarden bieden een balans tussen beveiliging en gebruiksgemak: gebruikers die per ongeluk hun wachtwoord verkeerd typen worden niet te lang buitengesloten, terwijl aanvallers effectief worden gestopt.
5. SSH-jail activeren
Voeg een `[sshd]`-sectie toe aan `jail.local` om Fail2ban voor SSH in te schakelen:[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600Deze configuratie scant `/var/log/auth.log`, het standaard logbestand voor authenticatie op Ubuntu en Debian. De `filter = sshd` verwijst naar `/etc/fail2ban/filter.d/sshd.conf`, dat patronen herkent zoals "Failed password" en "Invalid user". Op RHEL-gebaseerde systemen staat het logbestand op `/var/log/secure` — pas `logpath` daarop aan.
6. Configuratie laden
Fail2ban leest configuratiewijzigingen niet automatisch in. Laad de nieuwe instellingen met de client:sudo fail2ban-client reload
Dit commando past de configuratie toe zonder de service te herstarten. Het client-servermodel van Fail2ban maakt dit mogelijk: de `fail2ban-client` communiceert met de `fail2ban-server` die op de achtergrond draait.
7. Status controleren
Controleer of de SSH-jail actief is en welke IP-adressen momenteel geblokkeerd zijn:sudo fail2ban-client status sshd
De output toont het aantal momenteel geblokkeerde IP-adressen en de totale telling van bans sinds de service startte.
8. Andere services beveiligen
Fail2ban werkt niet alleen voor SSH. Voeg secties toe voor andere services die publiek toegankelijk zijn. Voor nginx HTTP-authenticatie:[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 3600Voor Plesk-beheerpanelen scant Fail2ban de logbestanden van Plesk-services op authenticatiefouten. De Plesk-documentatie bevestigt dat het bekende aanvallen herkent en IP-adressen automatisch blokkeert zodra de drempel is bereikt.
Verificatie
Controleer of de Fail2ban-service draait:sudo systemctl status fail2ban
De output moet `active (running)` tonen. Controleer vervolgens of de SSH-jail correct is geladen:
sudo fail2ban-client status
Dit commando toont een lijst van alle actieve jails. De lijst moet `sshd` bevatten. Simuleer ten slotte een aanval door drie keer in te loggen met een verkeerd wachtwoord vanaf hetzelfde IP-adres. Controleer daarna of dat IP-adres in de banlijst staat:
sudo fail2ban-client status sshd
Het IP-adres moet verschijnen onder "Banned IP list".
Veelgestelde problemen
Fail2ban start niet na installatie
Controleer of de firewall actief is. Fail2ban voegt regels toe aan `iptables`, `nftables` of `firewalld` — is er geen firewall actief, dan kan de service niet starten. Bekijk de logs:sudo journalctl -u fail2ban -n 50
IP-adres wordt niet geblokkeerd ondanks mislukte pogingen
Controleer of het logpad klopt. Op Debian/Ubuntu staat SSH-logging in `/var/log/auth.log`, op RHEL-gebaseerde systemen in `/var/log/secure`. Zet `logpath` in de `[sshd]`-sectie op het juiste bestand. Controleer ook of `enabled = true` in de sectie staat — zonder deze regel blijft de jail inactief.Geblokkeerd IP-adres handmatig verwijderen
Een gebruiker die per ongeluk is geblokkeerd kun je direct deblokkeren:sudo fail2ban-client set sshd unbanip 192.168.1.100
Vervang `192.168.1.100` door het daadwerkelijke IP-adres. Het IP-adres wordt onmiddellijk uit de banlijst verwijderd en de firewallregel wordt opgeheven.
Fail2ban vormt één laag in een beveiligingsstrategie — het vervangt geen sterke wachtwoorden, SSH-sleutels of een correct geconfigureerde firewall. Een aanvalssimulatie vanuit een testomgeving toonde aan dat Fail2ban 28 mislukte inlogpogingen vanaf één IP-adres detecteerde en het adres blokkeerde zodra de drempel van drie pogingen was bereikt. Die snelheid maakt het verschil tussen een server die overeind blijft en een server die wordt overgenomen — maar de volgende aanval is al onderweg, en Fail2ban is slechts het eerste vangnet.