Ga naar inhoud

Fail2ban

Achtergrondinformatie

  • Fail2ban: een intrusion prevention tool die logbestanden monitort (bijv. /var/log/auth.log) en automatisch IP-adressen blokkeert die verdachte activiteiten vertonen, zoals herhaalde mislukte inlogpogingen.

  • Beveiligingsfunctie: Fail2ban werkt vaak in combinatie met een firewall (bijv. UFW of iptables).
    Zodra een IP wordt gedetecteerd dat brute-force probeert, wordt er automatisch een tijdelijke ban toegepast.

  • Voordeel: automatiseert bescherming tegen aanvallen zonder dat je continu handmatig IPโ€™s hoeft te blokkeren.
    Je kunt eenvoudig instellen hoeveel pogingen zijn toegestaan, hoe lang een ban duurt en welke diensten beschermd moeten worden (SSH, FTP, webservers, etc.).

Alternatieven

  • DenyHosts (ouder, minder flexibel, alleen voor SSH)
  • CSF (ConfigServer Security & Firewall) (meer functies, vaak gebruikt op hostingservers)
  • PortSentry (richt zich meer op detectie van port scans)

1. Controleren of Fail2ban al aanwezig is

fail2ban-client --version
๐Ÿ“„ Voorbeeld output
Fail2Ban v0.11.2
Copyright (c) 2004-2008 Cyril Jaquier, 2008-2023 Fail2Ban Contributors

Handleiding

man fail2ban-client

2. Installatie

sudo apt update
sudo apt install -y fail2ban
Voorbeeld output
  Reading package lists... Done
  Building dependency tree       
  Reading state information... Done
  The following NEW packages will be installed:
    fail2ban
  0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
  Need to get 700 kB of archives.
  After this operation, 3,500 kB of additional disk space will be used.
  Selecting previously unselected package fail2ban.
  (Reading database ... 105000 files and directories currently installed.)
  Preparing to unpack .../archives/fail2ban_0.11.2-3_all.deb ...
  Unpacking fail2ban (0.11.2-3) ...
  Setting up fail2ban (0.11.2-3) ...
  Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service โ†’ /lib/systemd/system/fail2ban.service.
  Processing triggers for man-db (2.10.2-1) ...
  Processing triggers for systemd (249.11-0ubuntu3.6) ...

Configuratiebestanden kopiรซren

Na installatie wordt het aangeraden om de standaard jail.conf niet direct te bewerken. In plaats daarvan maak je een kopie naar jail.local zodat updates van het pakket je instellingen niet overschrijven:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

3. Fail2ban beheren

Wanneer Fail2ban is geรฏnstalleerd, moet de service geactiveerd en gestart worden zodat inbraakpogingen automatisch geblokkeerd worden. Hieronder zie je de belangrijkste commandoโ€™s en hun functie:

  • Commandoโ€™s

    sudo systemctl enable fail2ban
    
    - Zorgt ervoor dat Fail2ban automatisch start bij het opstarten van het systeem.

    sudo systemctl start fail2ban
    
    - Start Fail2ban direct, zodat je beveiligingsregels meteen actief zijn.

    sudo systemctl status fail2ban
    
    - Controleert de huidige status van Fail2ban en toont of deze actief draait.

  • Voorbeeld output

    systemctl enable fail2ban
    Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service โ†’ /lib/systemd/system/fail2ban.service.
    
    systemctl start fail2ban
    (geen directe output bij succes, de service wordt gewoon gestart)
    
    systemctl status fail2ban
    โ— fail2ban.service - Fail2Ban Service
         Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
         Active: active (running) since Mon 2023-01-10 12:34:56 UTC; 10s ago
       Main PID: 2456 (fail2ban-server)
          Tasks: 5 (limit: 1111)
         Memory: 12.3M
         CGroup: /system.slice/fail2ban.service
                 โ””โ”€2456 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
    

4. Fail2ban gebruiken

Met Fail2ban kun je inlogpogingen beperken en brute-force aanvallen automatisch blokkeren. Dit gebeurt via jails die logbestanden monitoren en IP-adressen blokkeren na te veel mislukte pogingen.

Lijst alle actieve jails (regels die actief IPโ€™s monitoren):

sudo fail2ban-client status

Controleer details van een specifieke jail, bijvoorbeeld sshd:

sudo fail2ban-client status sshd

Voorbeeld output:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 3
|  |- Total failed: 25
|  `- File list: /var/log/auth.log
`- Actions
   |- Currently banned: 2
   |- Total banned: 5
   `- Banned IP list: 192.168.1.50 10.0.0.5

Blokkeer een IP direct (bijvoorbeeld bij verdachte activiteit):

sudo fail2ban-client set sshd banip 203.0.113.10

Haal een IP weer van de banlijst:

sudo fail2ban-client set sshd unbanip 203.0.113.10

Maak altijd een lokale kopie van de configuratie in /etc/fail2ban/jail.local
(wijzig liever niet direct jail.conf).

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Typische instellingen:

[sshd]
enabled  = true
port     = ssh
maxretry = 5
bantime  = 3600

  • enabled: Jail activeren
  • maxretry: Aantal pogingen voor ban
  • bantime: Tijd (in seconden) dat een IP geblokkeerd blijft

Na wijzigingen in de configuratie, herstart Fail2ban:

sudo systemctl restart fail2ban

Volg live logs van Fail2ban:

sudo journalctl -u fail2ban -f

Of bekijk het logbestand direct:

tail -f /var/log/fail2ban.log

Extra nuttige commandoโ€™s (Fail2ban)

Toon een overzicht van alle actieve jails:

sudo fail2ban-client status

Voorbeeld output

Status
|- Number of jail:      2
`- Jail list:   sshd, nginx-http-auth

Controleer details van een specifieke jail, bijvoorbeeld sshd:

sudo fail2ban-client status sshd

Geeft informatie over mislukte pogingen en geblokkeerde IPโ€™s.

Blokkeer een IP handmatig (los van automatische detectie):

sudo fail2ban-client set sshd banip 203.0.113.10

Haal een IP weer van de banlijst:

sudo fail2ban-client set sshd unbanip 203.0.113.10

Pas wijzigingen in configuratiebestanden toe zonder volledige reboot:

sudo fail2ban-client reload

Of via systemd:

sudo systemctl reload fail2ban

Stop Fail2ban tijdelijk:

sudo systemctl stop fail2ban

En zet automatisch starten uit:

sudo systemctl disable fail2ban

Reset bans en herstart alle jails:

sudo fail2ban-client flush
sudo systemctl restart fail2ban

Waarschuwing

Dit verwijdert alle huidige bans en start alle jails opnieuw.
Gebruik dit alleen als je opnieuw wilt beginnen.

Fail2ban logt standaard naar /var/log/fail2ban.log.
Volg live logs met:

tail -f /var/log/fail2ban.log

Of gebruik journalctl:

sudo journalctl -u fail2ban -f

Logging en Debugging (Fail2ban)

Wanneer je problemen hebt met Fail2ban of bans die niet werken zoals verwacht, kan logging en debugging veel inzicht geven.

Controleer of Fail2ban draait en welke jails actief zijn:

sudo fail2ban-client status
Voorbeeld output
Status
|- Number of jail:      2
`- Jail list:   sshd, nginx-http-auth

Zie gebande IPโ€™s en mislukte pogingen in een specifieke jail:

sudo fail2ban-client status sshd
Voorbeeld output
Status for the jail: sshd
|- Filter
|  |- Currently failed: 2
|  |- Total failed:     15
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     3
   `- Banned IP list:   203.0.113.10

De logbestanden vind je hier:

sudo less /var/log/fail2ban.log

Of live meekijken:

sudo tail -f /var/log/fail2ban.log
Voorbeeld output
2023-08-30 12:11:45,123 fail2ban.actions        [1234]: NOTICE  [sshd] Ban 203.0.113.10
2023-08-30 12:21:45,567 fail2ban.actions        [1234]: NOTICE  [sshd] Unban 203.0.113.10

Omdat Fail2ban via systemd draait, kun je ook hier logs volgen:

sudo journalctl -u fail2ban -f

Start Fail2ban in debugmodus voor uitgebreide foutopsporing:

sudo fail2ban-client -v -v -v start

Of herstart via systemd met extra logging:

sudo systemctl stop fail2ban
sudo fail2ban-server -xf start
Waarom debugmodus?

In debugmodus zie je exact welke regels en filters toegepast worden.
Dit is handig als bans niet werken of filters niet correct matchen.


Configuratiebestanden (Fail2ban)

Het hoofdconfiguratiebestand van Fail2ban.
Hierin stel je basisopties in, zoals: - loglevel (bijv. INFO, WARNING, DEBUG) - logtarget (bijv. syslog, file of systemd-journal) - socket en pidfile-locaties

Herstart nodig

Na wijzigingen moet je Fail2ban herstarten:

sudo systemctl restart fail2ban

Het standaardbestand waarin alle jails zijn gedefinieerd.
Een jail koppelt een filter (wat zoeken in logs) aan een actie (bijv. een IP bannen via iptables of UFW).

โš ๏ธ Belangrijk: wijzig dit bestand niet rechtstreeks.
Gebruik in plaats daarvan jail.local.

Het aanbevolen bestand om eigen configuraties en overrides in te plaatsen.
Hier stel je o.a. in: - Welke jails actief zijn (enabled = true) - Banneduur (bantime) - Maximale mislukte pogingen (maxretry) - Welke logbestanden gecontroleerd worden

Voorbeeld fragment
[sshd]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 5
bantime  = 600

Bevat filterdefinities in .conf-bestanden.
Deze filters bepalen welke logregels een ban triggeren.
Voorbeelden: - sshd.conf โ†’ blokkeert brute-force SSH-aanvallen - nginx-http-auth.conf โ†’ blokkeert foute loginpogingen bij Nginx

Wil je een eigen filter maken? Kopieer een .conf-bestand en pas de regex aan.

Bevat actieprofielen in .conf-bestanden.
Deze bepalen wat er gebeurt zodra een filter een ban triggert.
Voorbeelden: - iptables-multiport.conf โ†’ blokkeer via iptables - ufw.conf โ†’ blokkeer via UFW - sendmail.conf โ†’ stuur een e-mailmelding bij een ban

Het hoofdlogbestand van Fail2ban.
Hierin zie je o.a.: - Nieuwe bans (Ban) - Opheffingen (Unban) - Debug- of foutmeldingen

Voorbeeld output
2023-08-25 12:45:01,123 fail2ban.actions        [1234]: NOTICE  [sshd] Ban 203.0.113.45
2023-08-25 13:05:01,456 fail2ban.actions        [1234]: NOTICE  [sshd] Unban 203.0.113.45

Fail2ban volledig verwijderen (Debian/Ubuntu)

Ja, het is technisch mogelijk om Fail2ban volledig te verwijderen,\ maar dit wordt alleen aangeraden als je een alternatief beveiligingsmechanisme gebruikt\ (bijv. een externe firewall, WAF of IDS/IPS).

Als je Fail2ban verwijdert zonder alternatief, kan je server kwetsbaar worden voor brute-force aanvallen.

Verwijder het pakket

sudo apt purge --auto-remove fail2ban

Verwijder configuratiebestanden

sudo rm -rf /etc/fail2ban/

Verwijder logbestanden

sudo rm -f /var/log/fail2ban.log*

Let op

Het verwijderen van Fail2ban haalt een belangrijke extra beveiligingslaag weg.
Overweeg dit alleen in een testomgeving of wanneer je zeker weet dat je een alternatief
(zoals een strikte firewall of externe beveiligingsoplossing) hebt geconfigureerd.


Hardening Tips (Fail2ban)

Aanbevelingen voor extra veiligheid

  • Gebruik jail.local in plaats van jail.conf
    Zet je eigen instellingen altijd in /etc/fail2ban/jail.local, zodat updates van Fail2ban je configuratie niet overschrijven.

  • Verhoog de bantijd voor hardnekkige aanvallers
    Bijvoorbeeld 1 uur of langer:

    bantime = 3600
    

  • Progressieve straffen instellen
    Gebruik bantime.increment voor telkens langere bans bij herhaalde aanvallen:

    bantime.increment = true
    bantime.factor = 2
    bantime.formula = bantime * (1<<(recidive-1))
    

  • Controleer het aantal pogingen (maxretry)
    Zet dit laag (bijv. 3โ€“5) om brute-force sneller te blokkeren:

    maxretry = 3
    

  • Extra jails inschakelen
    Bescherm ook Nginx, Postfix of andere services met de juiste filters:

    [nginx-http-auth]
    enabled  = true
    port     = http,https
    logpath  = /var/log/nginx/error.log
    

  • Whitelist vertrouwde IPโ€™s
    Voorkom dat je jezelf buitensluit door je eigen IP toe te voegen:

    ignoreip = 127.0.0.1/8 192.168.1.100
    

  • Fail2ban logging uitbreiden
    Zet loglevel op INFO of DEBUG voor meer details:

    loglevel = INFO
    

  • Controleer status regelmatig
    Bekijk welke jails actief zijn en welke IPโ€™s geblokkeerd zijn:

    sudo fail2ban-client status
    sudo fail2ban-client status sshd
    


โœ… Met deze maatregelen is je Fail2ban-configuratie strakker beveiligd en beperk je brute-force risicoโ€™s tot het minimum.
Na elke wijziging altijd even herstarten en controleren:

sudo systemctl restart fail2ban
sudo fail2ban-client status