Alle im Internet angebotenen Services werden über kurz oder lang angegriffen werden. Einfache Attacken sind dabei das Ausprobieren verschiedener Logins auf einem SSH- oder IMAP-Server. Diese können automatisch mit logcheck erkannt und dokumentiert werden. Eine wirkliche Abwehr der Attacke ist das jedoch nicht, da logcheck nur die gescheiterten Loginversuche aus den Logfiles heraussucht und entsprechende Warnungen an den Administrator per E-Mail verschickt. Auf der Suche nach einer einfachen Abwehrmethode stieß ich auf fail2ban, welches nach einer einzustellenden Anzahl von fehlgeschlagenen Logins die IP-Adresse des Angreifers mittels iptables automatisch blockieren kann und diese Blockierung nach einer einzustellenden Zeit automatisch wieder aufhebt.
logcheck und fail2ban ist in den Ubuntu-Quellen enthalten und kann mit
apt-get install logcheck
apt-get install fail2ban
installiert werden. In der Datei /etc/logcheck/logcheck.conf kann angepasst werden, an welche E-Mail-Adresse die Ergebnisse der Suche nach fehlgeschlagenen Logins geschickt werden. Für fail2ban kann das Selbe in der Datei /etc/fail2ban/jail.conf konfiguriert werden. Nach einem Neustart dieser beiden Dienste werden die Änderungen übernommen.
service logcheck restart
service fail2ban restart
Unter Ubuntu 10.04.3 LTS ist es erforderlich, für die erfolgreiche Überwachung des saslauthd die Datei /etc/fail2ban/filter.d/sasl.conf anzufassen, da der saslauthd unter Ubuntu offenbar eine andere Ausgabe benutzt, als sie in fail2ban voreingestellt ist. Die Zeile zum Matchen der Meldung ist durch folgende Zeile zu ersetzten (Quelle):
failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [A-Za-z0-9+/ ]*)?$
Nach einem Neustart von fail2ban werden anschließend auch fehlgeschlagene Logins über den saslauthd erkannt.
Wenn fail2ban mehrere aufeinanderfolgende fehlgeschlagenen Login-Versuche von einer IP-Adresse durch entsprechende Logmeldungen der zu überwachenden Dienste erkennt, wird die IP-Adresse mittels iptabels gesperrt. Nach einer bestimmten Zeit, die in /etc/fail2ban/jail.conf unter bantime in Sekunden eingestellt werden kann, wird die IP-Adresse wieder aus der Sperrliste in iptables entfernt. Falls man den oder die zu überwachenden Server allein betreibt, kann man evtl. die Sperrzeit auf einen sehr hohen Wert einstellen. 86400 Sekunden entspricht dabei einem Tag.