Angriffe über SSH mit denyhosts blockieren
Mit Denyhosts ist es auf einfache Weise möglich die Sicherheit seines Linuxservers zu erhöhen. Es eignet sich für Server, deren SSH-Authentifizierung (noch) über Benutzername und Passwort abgewickelt wird. Besser wäre natürlich das [Public-Key-Verfahren] oder eine zertifikatbasierte Authentifizierung.
Denyhosts blockiert schlicht und einfach den Zugriff von Maschinen, von denen wiederholt fehlgeschlagenen Loginversuche per SSH ausgehen.
Wenn man in /var/log/messages hineinschaut sind höchstwahrscheinlich hunderte solcher Zeilen zu sehen:
...
Jan 21 08:00:33 xyz sshd[10834]: Invalid user test from xxx.xxx.xxx.xxx
Jan 21 08:00:33 xyz sshd[10844]: Invalid user info from xxx.xxx.xxx.xxx
Jan 21 08:00:33 xyz sshd[10854]: Invalid user peter from xxx.xxx.xxx.xxx
...
Jeder Eintrag steht für einen Angriff über SSH. Gewöhnlich werden viele Versuche von ein und derselben IP-Adresse durchgeführt. Ich habe Server gesehen die konstant 2-5 SSH-Angriffen pro Sekunde ausgesetzt waren!
Was also denyhosts tut ist einfach nach fehlgeschlagenen SSH-Loginversuchen zu schauen und entsprechende Einträge in /etc/hosts.deny zu machen, um den weiteren Zugriff von diesen IPs zu verhindern.
Denyhosts ist sehr flexibel. Grundsätzlich lässt sich die Anzahl erlaubter fehlgeschlagener Loginversuche bevor eine IP geblockt wird einstellen. Nach einiger Zeit wird hosts.deny wieder von den Einträge bereinigt. Man kann genau festlegen wann das passieren soll. Es ist sogar möglich Daten für hosts.deny von einem zentralen Server (xmlrpc.denyhosts.net) zu beziehen.
Um denyhosts auf Gentoo zu installieren geht man wie üblich vor.
emerge -va denyhosts
rc-update add denyhosts default
Die Konfigurationsdatei beinhaltet sehr ausführliche Erklärungen der möglichen Optionen. Die Standardwerte kann man in der Regel so lassen. Was man aber setzen sollte ist die Admin-Emailadresse, um sich über geblockte IPs informieren zu lassen.
vi /etc/denyhosts.conf
ADMIN_EMAIL = admin@domain
Der Start des Dämons braucht einige Zeit, da die aktuelle SSH-Logdatei analysiert wird und Einträge in /etc/hosts.deny vorgenommen werden.
/etc/init.d/denyhosts start
Der Dämon selbst schreibt seine Logeinträge nach /var/log/denyhosts.
Um sicherzustellen, dass alles wie gewünscht funktioniert versucht man sich mehrmals mit falschem Passwort oder falschem Benutzernamen einzuloggen. Per default sollte man nach dem fünften Versuch die folgende Meldung sehen:
h1:~ # ssh abc@domain
ssh_exchange_identification: Connection closed by remote host
Um einen blockierten Host sofort wieder freizugeben, kann man einfach die entsprechenden 2 Einträge aus /etc/hosts.deny entfernen.