SSH-Absicherung mit fail2ban

Das kleine und simple Programm denyhosts hat mich in der Vergangenheit durch viele Server-Installationen begleitet; es war immer das erste Programm, das ich nach der erfolgreichen Aktivieren des SSH-Servers installiert habe. Unter Ubuntu 14.04 steht das denyhosts-Paket aber nicht mehr zur Verfügung. Was tun?

denyhosts

denyhosts überwacht SSH-Login-Versuche. Nach einer konfigurierbaren Anzahl gescheiterter Versuche wird die betreffende IP-Adresse gesperrt, üblicherweise für einen Tag. denyhosts modifiziert dazu die Datei /etc/hosts.deny. Der Charme von denyhosts bestand für mich immer in seiner Einfachheit.

In Ubuntu 14.04 heißt es von denyhosts Abschied nehmen. Das Paket wird nicht mehr gewartet und wird deswegen nicht mehr als offizielles Ubuntu-Paket angeboten (Details siehe askubuntu).

fail2ban

Eine kurze Suche nach denyhosts alternatives führt unweigerlich zu fail2ban. Die Idee dieses Pakets ist ähnlich wie die von denyhosts, die Implementierung aber ganz anders. Auch fail2ban überwacht Login-Versuche. Nach 6 gescheiterten Versuchen wird die betreffende IP-Adresse gesperrt — wenn auch nur für 10 Minute. Anstelle von hosts.deny greift fail2ban auf iptables zurück, also die Firewall-Infrastruktur von Linux. fail2ban hat zudem den Vorteil, dass es nicht auf SSH limitiert ist, sondern auch andere Authentifizierungsdienste überwachen kann.

In einer Hinsicht ist fail2ban aber erfreulich ähnlich zu denyhosts: Es funktioniert auf Anhieb ohne weitere Konfigurationsarbeiten. Die Konfiguration können Sie bei Bedarf anpassen, indem Sie die Datei /etc/fail2ban/jail.conf nach /etc/fail2ban/jail.local kopieren und dann nach Ihren eigenen Wünschen anpassen. Anschließend müssen Sie fail2ban mit service fail2ban reload auffordern, die geänderte Konfiguration einzulesen. Den aktuellen Status von fail2ban können Sie mit dem folgenden Kommando feststellen:

fail2ban-client status ssh
  Status for the jail: ssh
  |- filter
  |  |- File list:  /var/log/auth.log 
  |  |- Currently failed:   1
  |  `- Total failed:       132
  `- action
     |- Currently banned:   0
     |  `- IP list: 
     `- Total banned:       4

Ein Protokoll über alle IP-Adressen, die aktuell oder in der Vergangenheit blockiert wurden, liefert less /var/log/fail2ban.log.