SSH absichern mit Denyhosts
Denyhosts ist eine Software mit deren Hilfe man einen SSH Login auf einen Rechner sicherer machen kann. Im letzten Teile habe ich bereits 10 Punkte vorgestellt mit denen man einen Webserver, der in einem Rechenzentrum steht, vor Angriffen schützen kann. Denyhosts ist eine einfache, aber effektive Möglichkeit um Hacker davor zu hindern einen Brute Force Attacke zu starten und alle möglichen Passwörter zu probieren.
SSH absichern mit Denyhosts
Leider ist Denyhosts bei den Linux Distributionen nicht vorinstalliert, Das Service kann man jedoch recht einfach mit folgendem Kommando nach intallieren:
sudo apt-get install denyhosts
Auf der offiziellen Webseite findet man jede Menge Informationen, wie die Features des Programms. Das Service kümmert sich um das Management fehlgeschlagener SSH Loginversuche. Probiert eine IP Adresse mehrere male eine falsche Benutzer- und Passwortkombination, dann wird sie für eine bestimmte Zeit gesperrt. Zugriff auf SSH ist von dieser IP Adresse dann einige Zeit nicht mehr möglich. Ein nettes Extra ist auch eine Email mit einer Auswertung aller gesperrten Adressen und Hosts – man kann als Administrator gut nachsehen woher die Bedrohung kommt.
Arbeitsweise
Basierend auf einer Konfigurationsdatei loggt das Denyhosts Service fehlgeschlagene Login Versuche mit. Sollte von einer IP Adresse zu oft ein falscher Login versucht werden, dann wird diese Adresse in die /etc/hosts.deny Datei eingetragen. Alle dort registrierten Adressen wird der Zugriff auf das dort angegebene Service (in diesem Fall sshd) verweigert. Je nach Konfiguration des Service werden IP Adresse nach einiger Zeit dort auch wieder entfernt.
Konfiguration
Die Konfiguration erfolgt über eine einzelne Konfigurationsdatei. Diese ist unter /etc/denyhosts.conf aufzurufen. Wir öffnen diese am besten mit dem Texteditor unserer Wahl:
nano /etc/denyhosts.conf
Die Datei ist sehr übersichtlich aufgebaut mit jeder Menge Kommentaren. Das ist auch gut so, denn mit einer falschen Einstellung könnten wir uns selber den Zugang zum Server entziehen. Folgende Parameter sind für ein sicheres Arbeiten von Bedeutung:
- PURGE_DENY
legt fest nach, welcher Zeit eine gesperrte IP Adresse einen Login Versuch unternehmen darf. Standardmäßig ist hier kein Wert festgelegt, weshalb eine gesperrte IP Adresse nie wieder Zugriff bekommt. Es ist ratsam, einen Wert von beispielsweise 1w (für eine Woche) festzulegen. Sollte man sich aussperren kann man dann in 7 Tagen wieder den Login probieren. Nach Ablauf der Zeit wird die gesperrte IP Adresse wieder aus der /etc/hosts.deny Datei entfernt. - DENY_THRESHOLD_INVALID
legt fest wie oft man mit einem im System nicht vorhandenen Benutzer ein Login versuchen darf (Ausnahme root). Das ist der wichtigste Wert, denn im Normalfall kennt ein Angreifer den Benutzernamen nicht und wird alle möglichen Kombinationen probieren. Ein Wert von 3-5 ist sinnvoll. - DENY_THRESHOLD_VALID
legt fest wie oft man bei einem im System vorhandenen Benutzer das falsche Passwort eingeben darf. Der Wert ist meist höher eingestellt, da man sich bei Passwörtern gerne vertippen kann. Ist dann noch die Umschalttaste festgestellt, kann man schnell 5 oder mehr Versuche machen bevor man das merkt. Ein Wert von 5-10 macht Sinn. - DENY_THRESHOLD_ROOT
legt fest wie oft man beim Benutzer root das falsche Passwort probieren darf. Es ist Ratsam den Wert recht niedrig zu setzen. Da wir ohnehin im vorherigen Artikel den root Login deaktiviert hatten, ist 1 eine sinnvolle Einstellung. - ADMIN_EMAIL
wer Lust auf einen Bericht hat kann noch die eigene Email Adresse angeben.
Nach dem Speichern der Datei werden die Änderungen erst nach einem Neustart des Services aktiv. Das funktioniert mit dem folgenden Befehl:
service denyhosts restart
Fazit
Mit geringem Aufwand kann man den SSH Login mit Denyhosts drastisch sicherer machen. Brute Force Angriffe werden somit komplett unterbunden. Probiert ein Angreifer zu oft ein falsches Login, so wird er für eine längere Zeit gesperrt und erhält gar keinen Zugriff mehr auf den SSH Login.