Verhindern von Brute Force Attacks mit Fail2ban auf Debian Etch

Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>

Diese Anleitung veranschaulicht, wie man fail2ban auf einem Debian Etch System installiert und konfiguriert. Fail2ban ist ein Tool, das Login-Versuche in verschiedene Systemen wie z.B. SSH, FTP, SMTP, Apache, etc. überwacht. Wenn es fehlgeschlagene Login-Versuche aufspürt, die immer wieder bei ein und derselben IP Adresse oder dem selben Host auftreten, stoppt fail2ban weitere Login-Versuche dieser IP Adresse/Hosts indem es mit einem iptables firewall rule.

Diese Anleitung ist ohne jede Garantie und ich möchte an dieser Stelle darauf hinweisen, dass dies hier nicht der einzige Weg ist, ein solches System zu installieren. Es gibt viele Möglichkeiten – ich selbst habe mich für diese entschieden. Ich kann aber nicht garantieren, dass diese Lösung bei jedem funktioniert bzw. für jeden die richtige ist!

Vorbemerkung

Fail2ban ist ähnlich wie DenyHosts, was ich in dieser Anleitung behandele: https://www.howtoforge.com/preventing_ssh_dictionary_attacks_with_denyhosts, aber anders als DenyHosts, das auf SSH fokussiert ist, kann fail2ban konfiguriert werden, jeden Dienst zu überwachen, der Login-Versuche in eine Log-Datei schreibt und iptables zum Blocken von IP Adressen/Hosts verwendet anstelle von /etc/hosts.deny.

In diesem Beispiel werde ich fail2ban konfigurieren um Login-Versuche auf den SSH Server, den Proftpd Server, Login-Versuche auf .htaccess/.htpasswd geschützte Websiten, auf Courier POP3 und Courier IMAP, und auf SASL (um Emails zu schicken) zu überwachen. Ich werde das fail2ban Paket installieren, welches für Debian Etch verfügbar ist. Darin ist eine Standardkonfiguration enthalten, die unglücklicherweise nicht wirklich bei den meisten oben genannten Diensten funktioniert. Daher werde ich eine benutzerdefinierte fail2ban Konfiguration erstellen, die ich getestet habe und die bei mir funktioniert.

Installation von fail2ban

Fail2ban kann auf Debian Etch wie folgt installiert werden:

apt-get install fail2ban

Danach findest Du alle fail2ban Konfigurationsdateien im /etc/fail2ban Verzeichnis.

Konfiguration von fail2ban

Das Standardverhalten von fail2ban wird in der Datei /etc/fail2ban/jail.conf konfiguriert. Sieh es Dir an, es ist recht leicht zu verstehen. Es gibt einen [DEFAULT] Bereich, der auf alle anderen Bereiche angewandt werden kann, sofern die Standardoptionen in den anderen Bereichen nicht überschrieben sind.

Hier sind Erklärungen zu einigen Konfigurationsoptionen:

  • ignoreip: Das ist eine Liste von IP Adressen (mit Leerzeichen getrennt), die von fail2ban nicht blockiert werden können. Wenn zum Beispiel der Computer, von dem aus Du Dich mit dem Server verbindest, eine statische IP Adresse hat, möchtest Du sie vielleicht hier auflisten.
  • bantime: Zeit in Sekunden, die ein Host geblockt wird, wenn er von fail2ban erwischt worden ist (600 Sekunden = 10 Minuten).
  • maxretry: Max. Anzahl fehlgeschlagener Login-Versuche, bevor ein Host von fail2ban geblockt wird.
  • filter: Bezieht sich auf die entsprechende Filter-Datei in /etc/fail2ban/filter.d.
  • logpath: Die Log-Datei, die fail2ban nach fehlgeschlagenen Login-Versuchen überprüft.

Wie in einem Kommentar zu Beginn von /etc/fail2ban/jail.conf vorgeschlagen wird, modifizieren wir /etc/fail2ban/jail.conf nicht, um sie an unsere Wünsche anzupassen, sondern überschreiben sie indem wir eine neue Konfigurationsdatei erstellen, /etc/fail2ban/jail.local.

So sieht meine /etc/fail2ban/jail.local Datei aus:

vi /etc/fail2ban/jail.local

[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1 192.168.0.99
bantime  = 600
maxretry = 3

# "backend" specifies the backend used to get files modification. Available
# options are "gamin", "polling" and "auto".
# yoh: For some reason Debian shipped python-gamin didn't work as expected
#      This issue left ToDo, so polling is default backend for now
backend = polling

#
# Destination email address used solely for the interpolations in
# jail.{conf,local} configuration files.
destemail = root@localhost

# Default action to take: ban only
action = iptables[name=%(__name__)s, port=%(port)s]

[ssh]

enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 5

[apache]

enabled = true
port    = http
filter  = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 5

[apache-noscript]

enabled = false
port    = http
filter  = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 5

[vsftpd]

enabled  = false
port     = ftp
filter   = vsftpd
logpath  = /var/log/auth.log
maxretry = 5

[proftpd]

enabled  = true
port     = ftp
filter   = proftpd
logpath  = /var/log/auth.log
failregex = proftpd: (pam_unix) authentication failure; .* rhost=<HOST>
maxretry = 5

[wuftpd]

enabled  = false
port     = ftp
filter   = wuftpd
logpath  = /var/log/auth.log
maxretry = 5

[postfix]

enabled  = false
port     = smtp
filter   = postfix
logpath  = /var/log/mail.log
maxretry = 5

[courierpop3]

enabled  = true
port     = pop3
filter   = courierlogin
failregex = courierpop3login: LOGIN FAILED.*ip=[.*:<HOST>]
logpath  = /var/log/mail.log
maxretry = 5

[courierimap]

enabled  = true
port     = imap2
filter   = courierlogin
failregex = imapd: LOGIN FAILED.*ip=[.*:<HOST>]
logpath  = /var/log/mail.log
maxretry = 5

[sasl]

enabled  = true
port     = smtp
filter   = sasl
failregex = warning: [-._w]+[<HOST>]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed
logpath  = /var/log/mail.log
maxretry = 5

Mein Client Computer hat die statische IP Adresse 192.168.0.99 und da ich nicht ausgesperrt werden möchte, habe ich sie der ignoreip Liste hinzugefügt. Ich habe die max. Anzahl fehlgeschlagener Login-Versuche für alle Dienste auf 5 festgesetzt und zwei neue Bereiche angelegt, [courierpop3] und [courierimap], damit fail2ban Login-Versuche auf meinen Courier-POP3 und Courier-IMAP Server blocken kann.

Ich möchte Login-Versuche zu SSH, Apache, Proftpd, Courierpop3, Courierimap und SASL kontrollieren, also habe ich enabled auf true für diese Dienste und auf false für alle anderen Dienste gesetzt.

Wenn Du die Datei mit /etc/fail2ban/jail.conf vergleichst, wirst Du ebenfalls feststellen, dass ich einige Log-Dateien verändert habe, da die Log-Dateien in /etc/fail2ban/jail.conf für Debian Etch nicht korrekt sind. Weiterhin habe ich einigen Diensten eine failregex Zeile hinzugefügt, da die regulären Ausdrücke in den entsprechenden Filter-Dateien im /etc/fail2ban/filter.d Verzeichnis bei Debian Etch nicht funktionieren. Die failregex Zeile überschreibt das Filter Rule in der entsprechenden Datei in /etc/fail2ban/filter.d.

Jedes Mal, wenn wir die fail2ban Konfiguration modifizieren, müssen wir fail2ban neu starten, also tun wir das jetzt:

/etc/init.d/fail2ban restart

Das war es bereits. Fail2ban loggt auf /var/log/fail2ban.log, also kannst Du diese Datei überprüfen, um herauszufinden, ob/welche Hosts geblockt wurden. Wenn ein Host von fail2ban geblockt wurde, sieht das wie folgt aus:

2007-04-24 17:49:09,466 fail2ban.actions: WARNING [apache] Ban 1.2.3.4
2007-04-24 18:08:33,213 fail2ban.actions: WARNING [sasl] Ban 1.2.3.4
2007-04-24 18:26:37,769 fail2ban.actions: WARNING [courierlogin] Ban 1.2.3.4
2007-04-24 18:39:06,765 fail2ban.actions: WARNING [courierimap] Ban 1.2.3.4

Außerdem kannst Du Deine Firewall überprüfen, um zu sehen, ob derzeit irgendwelche Hosts geblockt werden. Führe einfach Folgendes aus

iptables -L

Links

Das könnte dich auch interessieren …