Eine weitere Möglichkeit Brute Force Angriffe1) auf einen Server zu unterbinden bietet »fail2ban«2)3). Hier wird ein anderer Ansatz beschrieben, wie man die IP Adresse des Angreifers wirksam blockieren kann. Im -> Blockhosts Tutorial4) wurde die Strategie verfolgt, die IP Adresse des Angreifers in der Datei »/etc/hosts.{allow|deny}« mit dem deny-Flag zu parken und somit vorübergehend den Zugang zum System zu verweigern. Das hat ein paar gravierende Nachteile, denn damit die »/etc/Hosts.{allow|deny}« ausgewertet wird, muss der Service entweder über einen TCP-Wrapper5) gestartet werden oder zumindest mit der »libwrap«6) Bibliothek verlinkt sein.
»fail2ban« legt nun den Finger genau in die Wunde und erstellt statt einen Eintrag in der »hosts.{allow|deny}« eine dynamische Iptables-Regel7), was den Angreifer bereits blockiert, bevor er den Dienst erreicht und dadurch System Ressourcen geschont werden, da der Angreifer erst gar nicht bis zum Login kommt. Der Vollständigkeit wegen sein noch erwähnt, dass auch Blockhosts in der Lage ist dynamische Iptables Regeln zu erstellen.
»fail2ban« wertet diverse Logfiles aus und erstellt dynamisch nach einer konfigurierbaren Anzahl fehlgeschlagener Anmeldeversuche Iptables-Regeln, welche die in Ungnade gefallene IP-Adresse für einen konfigurierbaren Zeitraum ins Nirvana routet. Iptables ist ein Paketfilter (Netfilter) welcher bei vielen Linux-Distributionen bereits im Standardumfang enthalten ist. Dieser Filter ist bereits aktiv, enthält jedoch erst mal keine Regeln. Mit dem Kommando »iptables -L« können Sie sich den derzeit aktuellen Regelsatz anzeigen lassen:
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Nach der Installation von »fail2ban« wird dem Iptables Regelsatz eine neue Chain hinzugefügt:
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-ssh (1 references) target prot opt source destination RETURN all -- anywhere anywhere
Die Installation auf einem Debian System ist gewohnt einfach:
# aptitude install fail2ban
…und die Sache ist schon erledigt. »fail2ban« hat bereits out of the box eine "scharfe" Einstellung für den SSH Zugang des Systems. Sie müssen lediglich noch den ssh-Daemon neu starten und ab dann wird der SSH Zugang überwacht und ggf nach den fail2ban Default Einstellungen (3 fehlgeschlagene Anmeldeversuche; 10 Minuten) gesperrt.
# /etc/init.d/ssh restart
Der Standardpfad für die Konfigurations-Dateien auf einem Debian System ist »/etc/fail2ban/«:
/etc/fail2ban# tree
.
|-- action.d
| |-- hostsdeny.conf
| |-- ipfw.conf
| |-- iptables-allports.conf
| |-- iptables-multiport-log.conf
| |-- iptables-multiport.conf
| |-- iptables-new.conf
| |-- iptables.conf
| |-- mail-buffered.conf
| |-- mail-whois-lines.conf
| |-- mail-whois.conf
| |-- mail.conf
| |-- sendmail-buffered.conf
| |-- sendmail-whois-lines.conf
| |-- sendmail-whois.conf
| |-- sendmail.conf
| `-- shorewall.conf
|-- fail2ban.conf
|-- filter.d
| |-- apache-auth.conf
| |-- apache-badbots.conf
| |-- apache-noscript.conf
| |-- apache-overflows.conf
| |-- common.conf
| |-- courierlogin.conf
| |-- couriersmtp.conf
| |-- exim.conf
| |-- gssftpd.conf
| |-- named-refused.conf
| |-- pam-generic.conf
| |-- postfix.conf
| |-- proftpd.conf
| |-- pure-ftpd.conf
| |-- qmail.conf
| |-- sasl.conf
| |-- sshd-ddos.conf
| |-- sshd.conf
| |-- vsftpd.conf
| |-- webmin-auth.conf
| |-- wuftpd.conf
| `-- xinetd-fail.conf
`-- jail.conf
In der Datei »fail2ban.conf« werden die Grundeinstellungen für den fail2ban-server Daemon vorgenommen. Das beinhaltet zB den Loglevel, das fail2ban-Logfile und den Socket-Pfad.