SSH vor Brute-Force-Angriffen schützen

Seite 3: fail2ban

Inhaltsverzeichnis

Das ebenfalls in Python geschriebene fail2ban nutzt das Linux-Firewall-Tool iptables, um IP-Adressen von missliebigen Rechnern zu blockieren. Dazu fügt es eine neue Regel in die INPUT-Chain ein und legt eine neue Chain an mit einer DROP-Regel zu jedem blockierten Host. Das Tool unterstützt aber trotzdem von Haus aus die Wrapper-Technik sowie ipfw. Zudem kann es nicht nur SSH vor zu vielen Login-Versuchen schützen, sondern auch FTP- und Mailserver. Zur Installation genügt unter Ubuntu ein sudo apt-get install fail2ban. Standardmäßig sind aber nur Regeln für SSH aktiv. In der Konfigurationsdatei jail.conf im Verzeichnis /etc/fail2ban sind aber Regeln für weitere Dienste vordefiniert, die man bei Bedarf nur noch aktivieren muss.

Erscheint im Log "messages repeated x times" hat fail2ban Probleme, die richtige Zahl der Loginversuche zu ermitteln.

Wie DenyHost sucht auch fail2ban mittels regulärer Ausdrücke nach Hinweisen auf fehlgeschlagene Anmeldeversuche in /var/log/auth.log. Leider macht ihm auf Ubuntu-Systemen der syslog-Daemon einen Strich durch die Rechnung. Der schreibt nämlich in den meisten Fällen einen Login-Fehlversuch nur einmal in voller Länge in die Logdatei und dann bei den folgenden Versuchen nur noch "last message repeated x times". Damit kann fail2ban aber nicht viel anfangen, sodass es nur den ersten Versuch zählt. Ein Angreifer kann so erheblich öfter sein Glück versuchen, als es die in der Konfiguration eingestellten sechs Fehlversuche suggerieren.

Das Problem ist in Kombination mit Ubuntu bekannt. Abhilfe könnte das Deaktivieren der Syslog-Kompression bringen, die dafür verantwortlich ist, dass viele gleichlautende Log-Einträge zu einer Zeile zusammengefasst sind. Allerdings unterstützt der Standard-Syslog-Dienst das Abschalten nicht. Aufgrund ausgefeilterer regulärer Ausdrücke hat DenyHosts mit diesem Problem nicht zu kämpfen.

Zur Not kann man in der Konfiguration des SSH-Daemons die Zahl der erlaubten Fehlversuche beispielsweise auf 2 heruntersetzen und in den fail2ban-Einstellungen die Zahl der maximalen Wiederholungen ebenfalls auf 2 heruntersetzen. Nach zwei erfolglosen Logins baut der SSH-Dienst die Verbindung ab, sodass bei einer erneuten Verbindung der Dienst eine neue Zeile im Log instanziiert, welche fail2ban dann als zweiten Versuch erkennt. Insgesamt hat ein Angreifer somit auch nur vier Versuche, bevor die Firewall ihn blockiert.

Gegenüber DenyHosts hat fail2ban indes den Vorteil, dass es gesperrte Hosts automatisch entsperren kann. Die Option bantime = 600 löscht die blockierende iptables-Regel nach 10 Minuten automatisch.