SSH vor Brute-Force-Angriffen schützen

Seite 2: DenyHosts

Inhaltsverzeichnis

Das als Ubuntu-Paket verfügbare Python-Skript DenyHosts durchforstet standardmäßig alle 30 Sekunden die syslog-Datei /var/log/auth.log nach verdächtigen SSH-Fehlversuchen (DAEMON_SLEEP = 30s) und trägt aufällige IP-Adressen in die Datei /etc/hosts.deny ein. Ab wieviel Fehlversuchen eine Adresse dort landet, ist in der Datei /etc/denyhosts.conf festgelegt. Dort kann man etwa Schwellwerte für Login-Versuche mit nicht existierenden Nutzernamen (DENY_THRESHOLD_INVALID) und solchen mit richtigen Nutzernamen aber falschen Passwörter (DENY_THRESHOLD_VALID) getrennt definieren. So ist es möglich, auf das Durchprobieren von Nutzernamen schneller zu reagieren, als auf die Eingabe falsche Passwörter – denn seinen Nutzernamen gibt ein legitimer Anwender in der Regel kaum falsch ein.

Zu den selbst ermittelten IP-Adressen auf Basis von auth.log kann man auch die Ergebnisse anderer Systeme zu seiner Liste der geblockten Rechner hinzufügen. Dieser seit langem bei DenyHosts verfügbare Cloud-Service beruht auf der zentralen Erfassung der von anderen DenyHosts-Clients übermittelten Daten (SYNC_DOWNLOAD = yes). Man selbst kann seine gesammelten ebenfalls an den DenyHost-Server übertragen – muss aber nicht (SYNC_UPLOAD = yes). Im Test übermittelte der Server nach der festgelegten Zeitspanne von 15 Minuten jeweils 50 IP-Adressen, die der Client zu /etc/hosts.deny hinzufügte.

Die Installation der aktuellen Version 2.6 ist mit sudo apt-get install denyhosts schnell erledigt. DenyHosts läuft sofort als Daemon im Hintergrund und startet auch bei späteren Neustarts des Systems automatisch. Grundsätzlich kann man die Standard-Konfiguration so belassen, wir haben nur die Anzahl der erlaubten Fehlversuche für gültigen Konten auf 4 heruntergesetzt. DenyHosts ist nicht auf SSH allein beschränkt, prinzipiell schützt es auch andere Dienste, die ein Login oder eine Authentifizierung erfordern, etwa FTP, Telnet und SMTP. Diese Dienste müssen dann aber entweder via (x)inetd gestartet werden oder gegen libwrap gelinkt sein.

In der Standardkonfiguration wächst die Datei deny.hosts kontinuierlich, was insbesondere bei Nutzung des Cloud-Services natürlich sehr unschön ist. DenyHosts lässt sich jedoch so konfigurieren, dass es in die Liste geratene IP-Adressen nach einer vorgegebenen Zeitspanne wieder löscht und die Verbindungsaufnahme dann wieder möglich ist. Die Option PURGE_DENY = 1d legt beispielsweise die Dauer auf einen Tag fest. Mit der Option DAEMON_PURGE = 1d veranlasst man DenyHosts, automatisch einmal täglich den Löschprozess auszuführen. Alternativ kann man DenyHosts stoppen und mit sudo denyhosts --purge manuell alle älteren Einträge löschen. Anschließend muss man DenyHosts wieder starten.

Falls man DenyHosts auf etwas älteren (Ubuntu)-Systemen ausprobieren möchte: Nicht immer sind die Dateien /etc/hosts.allow und /etc/hosts.deny im System bereits vorhanden, was zu Fehlern beim Ausführen von DenyHosts führen kann. Die Dateien lassen sich mit Root-Rechten aber einfach anlegen (touch /etc/hosts.deny).