Wanneer je begint met serverbeheer, krijg je vroeg of laat te maken met talloze externe aanvallen. SSH-brute force-aanvallen, ongeoorloofde inlogpogingen gericht op webapplicaties en poortscanning zijn dagelijkse bedreigingen. Als je deze bedreigingen negeert, kan dit uiteindelijk leiden tot een systeeminbraak. Fail2Ban is een lichte maar krachtige Linux-gebaseerde oplossing voor inbraakpreventie die deze problemen aanpakt.

Fail2Ban detecteert automatisch verdachte IP-adressen en blokkeert ze. Hierdoor kan de beheerder de server beschermen zonder al te veel moeite.

Hoe Fail2Ban te installeren

Fail2Ban is in de meeste Linux-distributies als pakket beschikbaar, waardoor de installatie heel eenvoudig is.

Ubuntu/Debian-variant

sudo apt update
sudo apt install fail2ban

Na de installatie moet je de service starten en instellen dat deze automatisch opstart bij het opstarten.

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

Fail2Ban Overzicht

Hoe de basisinstellingen van Fail2Ban te configureren

Fail2Ban gebruikt het /etc/fail2ban/jail.conf bestand als het standaard configuratiebestand, maar het wordt aangeraden om dit bestand niet gewoon te wijzigen, maar om /etc/fail2ban/jail.local te maken voor aanpassingen.

Maak het jail.local bestand aan:

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

Belangrijke instellingsitems: - bantime: blokkeringsperiode (in seconden) - findtime: tijdsbestek dat als een aanval wordt beschouwd (in seconden) - maxretry: maximaal aantal toegestane mislukte pogingen

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log

Voorbeeld van een praktische toepassing

1. Blokkeren van SSH-brute force

Door de [sshd] jail in te stellen zoals hierboven, zal het IP worden geblokkeerd voor 1 uur na meer dan 5 mislukte inlogpogingen.

2. Blokkeren van Apache-inlogaanvallen

[apache-auth]
enabled = true
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3

Bij 3 mislukte authenticatiepogingen op de webserver zal de toegang worden geblokkeerd.

Hoe Fail2Ban te monitoren

Er zijn verschillende manieren om te controleren of Fail2Ban goed functioneert.

1. Statuscontrole via fail2ban-client

Je kunt de status van een specifieke jail (bijv. sshd) controleren.

sudo fail2ban-client status sshd

Voorbeeldoutput:

Status voor de jail: sshd
|- Filter
|  |- Momenteel mislukt: 2
|  |- Totaal mislukt: 15
|  `- Bestandenlijst:    /var/log/auth.log
`- Acties
   |- Momenteel geblokkeerd: 1
   |- Totaal geblokkeerd: 3
   `- Geblokkeerde IP-lijst: 192.168.1.100

2. Monitoren van logbestanden

De werking van Fail2Ban wordt geregistreerd in het /var/log/fail2ban.log bestand.

tail -f /var/log/fail2ban.log

Hiermee kun je in real-time blokkade- en deblokkade-events volgen.

Hoe Fail2Ban werkt

  1. Logmonitoring: Fail2Ban houdt continu toezicht op de ingestelde logbestanden. (bijv. /var/log/auth.log, /var/log/apache2/error.log)

  2. Filter toepassen: Detecteert specifieke patronen (mislukte inlogpogingen, authenticatiefouten, enz.).

  3. Acties uitvoeren: Als het ingestelde maxretry wordt overschreden, worden er commando's uitgevoerd via iptables, firewall-cmd, nftables, enz. om het IP te blokkeren.

  4. Automatische deblokkade: Wanneer de bantime is verstreken, wordt de blokkade automatisch opgeheven.

Fail2Ban heeft een gemoduleerde structuur die onafhankelijke monitoring en blokkeringsinstellingen voor verschillende diensten (jails) mogelijk maakt, zodat de beveiliging kan worden versterkt voor verschillende diensten naast alleen SSH-bescherming.

Hoe een permanente blokkade in te stellen voor SSH-aanvallen

SSH-aanvallers moeten beslist hard worden aangepakt. In Fail2Ban kun je de bantime instellen op -1 om een permanente blokkade te creëren.

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
bantime = -1
findtime = 600
maxretry = 5

Met deze instelling wordt een IP dat meer dan 5 mislukte SSH-authenticaties heeft, permanent geblokkeerd en kan deze geen toegang meer krijgen tot de server.

[Geavanceerde tips] Begrijp de basisblokkeringsactie van Fail2Ban

Fail2Ban werkt standaard, zelfs zonder dat je action apart hoeft te definiëren. Dit komt omdat de standaardinstellingen het blokkeren van IP-adressen met iptables omvatten.

  • Als je geen aparte action opgeeft, wordt de instelling action = %(action_)s uit het [DEFAULT] gedeelte toegepast.
  • %(action_)s gebruikt intern het iptables commando om kwaadaardige IP's te blokkeren.
  • Daarom wordt de blokkade van IP's uitgevoerd door iptables, zelfs als je geen action apart schrijft.

Voorbeeld van een standaardblokkeringscommando (zie action_.conf)

iptables -I INPUT -s <ip> -j REJECT

Dit betekent dat Fail2Ban iptables automatisch controleert om aanvallende IP's te blokkeren.

Opmerking: - Als je andere firewalltools zoals UFW of firewalld wilt gebruiken, moet je de action expliciet instellen. - Ook kan de blokkade verdwijnen na een serverherstart, dus het is aan te raden om Fail2Ban zo in te stellen dat deze automatisch start bij het opstarten van de server.


Bovendien is het mogelijk om verschillende filters zelf te maken en toe te passen of email-waarschuwingen in te stellen voor geavanceerde configuraties.


Vanaf het moment dat je de server aan de wereld blootstelt, is beveiliging geen keuze meer, maar een noodzaak.
Een moment van onoplettendheid kan fatale gevolgen hebben.
Fail2Ban zal een krachtig schild zijn dat zulke bedreigingen van tevoren afschermt.
Vergeet niet dat iemand op dit moment je server aan het aanvallen is.