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
- Fail2ban: http://www.fail2ban.org
- Debian: http://www.debian.org