Fail2ban

Fail2ban ermöglicht uns, uns gegen Bruteforce Attacken auf z.B. unseren SSH Zugang zu schützen. Nach einer definierten Zeit und misslungenden Login Versuchen, erstellen Fail2ban eine Firewallregel um diese IP Adresse für einen gewissen Zeitraum zu sperren.

Installation

Fail2ban wird einfach mit nachfolgendem Paket installiert

apt install fail2ban


Danach sollte der fail2ban Daemon eingerichtet und automatisch gestartet werden.

systemctl enable --now fail2ban


nftables oder iptables

Fail2ban erstellt automatisch Firewallregeln. Je nachdem welche Firewall genutzt werden soll muss diese Installiert sein und bei fail2ban hinterlegt werden. Ich nutze hier eine nftables Firewall.

apt install nftables


Firewall bei nftables hinterlegen

nano /etc/fail2ban/jail.conf
...
banaction = nftables-multiport
banaction_allports = nftables-allports
...

Für eine iptables Firewall müssten hier die Einträge mit iptables stehen.


Default Konfiguation

In der Default Konfiguration legen wir fest wieviele Versuche gestattet sind, wie lange überprüft wird und wie lange der Zugang gesperrt wird. Um die Standart Konfiguraton festzulegen muss eine neue Datei angelegt werden, die /etc/fail2ban/jail.local.

nano /etc/fail2ban/jail.local
[DEFAULT]
  bantime = 60m                 # Wie lange wird gesperrt
  findtime = 10m                # In welchem Zeitraum werden Fehlversuche überprüft
  maxretry = 3                  # Nach wievielen Fehlversuchen wird gesperrt
  backend = auto             
  ignoreip = 127.0.0.1/8 ::1    # Ip Adressbereiche für die nicht geprüft werden soll
 
...

SSH Dienst

Fail2ban kann mehrere Dienste überwachen, aber der wichtigste hierbei ist wohl der ssh Dienst. Dazu überwacht fail2ban das entsprechende Logfile auf Fehler und schreitet bei Bedarf ein. Um den SSH Dienst zu überwachen bearbeiten wir die /etc/fail2ban/jail.local.

nano /etc/fail2ban/jail.local
...
 
[sshd]
  enabled = true                 # Einschalten oder ausschalten
  port = 22                     # Auf welchem Port läuft der Dienst
  filter = sshd                 # Name der Filterdatei z.B. /etc/fail2ban/filter.d/sshd.conf
  logpath = /var/log/auth.log   # Die Logdatei die überwacht werden soll
 
...

Apache Dienst

Auch der Webserver kann abgesichert werden indem wir unsere jail.conf anpassen.

nano /etc/fail2ban/jail.local<code>
<code Bash>
...
 
[apache]                                  # Kümmert sich um grundlegende Authentifizierungsfehler
  enabled  = true
  port     = http,https
  filter   = apache-auth
  logpath  = /var/log/apache*/*error.log
  maxretry = 3
  findtime = 600
 
[php-url-fopen]                           # Versucht böswillges PHP Verhalten zu stoppen
  enabled = true
  port    = http,https
  filter  = php-url-fopen
  logpath = /var/log/apache*/*access.log
 
[apache-overflows]                        #  Es wird der Versuch blockiert, ungewöhnlich lange und verdächtige URLs anzufordern. 
  enabled  = true
  port     = http,https
  filter   = apache-overflows
  logpath  = /var/log/apache*/*error.log
  maxretry = 2
 
[apache-badbots]                          # Stopt einige bekannte Bot anfragen
  enabled  = true
  port     = http,https
  filter   = apache-badbots
  logpath  = /var/log/apache*/*error.log
  maxretry = 2


Überprüfen

Liste auf welche und wieviele jails aktuell laufen

fail2ban-client status


Liste auf wieviele IPs derzeit in einer jail gesperrt sind

fail2ban-client status sshd


Erlaube einer gesperrten IP wieder den Zugriff

sudo fail2ban-client set sshd unbanip 111.111.111.111