AA_tuer.jpg

© Gordon_Bussiek, Fotolia

Türsteher

Brute-Force-Angriffe blocken mit SSH-Guard

Versucht ein Angreifer, in einen Webserver einzudringen, sollten Sie ihn nicht nur davon abhalten, sondern auch künftige Versuche verhindern. SSH-Guard überwacht im Hintergrund Log-in-Versuche und setzt ertappte Bösewichte auf die schwarze Liste.

Die Arbeitsweise von SSH-Guard [1] ist einfach, effektiv und ähnelt dem eines kleinen Intrusion Detection Systems: Das Programm beobachtet ständig die Logfiles ausgewählter Dienste. Entdeckt es dabei fragwürdige Netzwerkzugriffe, blockiert es den mutmaßlichen Angreifer vorübergehend mit einer entsprechenden Firewall-Regel (Abbildung 1). Lässt der böse Bube auch weiterhin nicht ab, sperrt ihn SSH-Guard für immer längere Intervalle aus. Diese trickreiche Strategie hat den Vorteil, dass Sie nicht versehentlich einen vergesslichen Benutzer blockieren, schiebt aber automatisiertem Passwortraten zugleich einen wirksamen Riegel vor.

Abbildung 1

Abbildung 1: Die Anfragen des Clients (1) protokolliert der SSH-Daemon in der Datei "auth.log" (2). Diese überwacht SSH-Guard (3) und erstellt bei zu vielen Log-in-Versuchen eine Firewall-Regel (4), die den Client blockiert (5).

Pappenheimer

Wie sein Name andeutet, überwachte SSH-Guard ursprünglich nur fehlgeschlagene SSH-Anmeldungen. Mittlerweile kennt es sämtliche im Kasten Unterstützte Dienste aufgeführten Services. Angriffsmuster für weitere Dienste senden Sie über ein spezielles Kontaktformular an die Entwickler [2]. Diese landen dann meist in einer der folgenden Versionen. SSH-Guard kennt selbstverständlich auch IPv6, steht unter der BSD-Lizenz, ist schnell eingerichtet und verzichtet sogar komplett auf eine Konfigurationsdatei.

Unterstützte Dienste

SSH-Guard kennt derzeit folgende Dienste:

  • Sshd
  • Sendmail
  • Exim
  • Dovecot
  • Cucipop
  • Uwimap (imap, pop)
  • Vsftpd
  • Proftpd
  • Pure-ftpd
  • FreeBSD-ftpd

Das schlanke C-Programm läuft neben Linux auch auf anderen Betriebssystemen mit Unix-Unterbau, darunter Mac OS X, verschiedenen BSD-Varianten, Solaris und AIX. Ubuntu bietet die Version 1.4.2 in seinen Repositories an, der verbesserte Nachfolger 1.5 stand aber zum Redaktionsschluss bereits mit dem letzten Release Candidate in den Startlöchern. Da die Version 1.5 die Konfiguration weiter vereinfacht und die Homepage des Projekts den Release Candidate bereits allen Anwendern empfiehlt, soll dieser hier im Mittelpunkt stehen. Wie Sie ihn aus den Quellen für Ubuntu 10.10 übersetzen, schildert der Kasten Fertigbau.

Fertigbau

Um die aktuelle Version von sshguard über- und anschließend einzusetzen, laden Sie zunächst den Quellcode herunter [3], der sich in der Abteilung FROM SOURCES hinter dem Link latest release versteckt. Sie entpacken das Archiv irgendwo in Ihrem Home-Verzeichnis und rufen über Anwendungen | Zubehör | Terminal eine Kommandozeile auf. Über diese navigieren Sie mit Hilfe des cd-Befehls in das entpackte Verzeichnis namens sshguard-1.5rc4. Über

sudo apt-get install build-essential autoconf gcc

installieren Sie zunächst die zum Kompilieren notwendigen Pakete. Dann geben Sie

./configure --with-firewall=iptables

ein. Der Parameter hinter dem ./configure sorgt dafür, dass SSH-Guard iptables berücksichtigt, die Basis von Ubuntus integrierter Firewall UFW. Meldet der Configure-Befehl keine Fehler und erstellt ohne zu Maulen das Makefile (Abbildung 2), übersetzen und installieren Sie SSH-Guard, indem Sie nacheinander die folgenden Befehle eingeben:

make
sudo make install

Um das Programm später wieder zu entfernen, begeben Sie sich in den eben genutzten Ordner und tippen sudo make uninstall ein.

Abbildung 2

Abbildung 2: Meldet das Kommando "./configure" am Ende keinen Fehler, sondern erstellt das Makefile, klappt vermutlich auch das Übersetzen des Quellcodes.

Verstärkte Brandmauer

Bevor Sie SSH-Guard in Betrieb nehmen, müssen Sie unter Linux noch die Firewall auf seine Anwesenheit vorbereiten. Das erledigen Sie direkt auf der Iptables-Ebene. Sie bereiten zunächst eine neue Befehlskette vor, in die SSH-Guard später seine eigenen Regeln integriert:

sudo iptables -N sshguard
sudo ip6tables -N sshguard

Der zweite Befehl deckt auch IPv6-Pakete ab. Als nächstes erweitern Sie die Input-Kette, damit diese den Netzwerkverkehr durch die SSH-Guard-Kette schleust (Abbildung 3):

sudo iptables -A INPUT -j sshguard
sudo ip6tables -A INPUT -j sshguard
Abbildung 3

Abbildung 3: Unter Ubuntu fügen diese Befehle eine neue Kette hinzu, in die SSH-Guard später seine Regeln injiziert.

Soll SSH-Guard nur ganz bestimmte Ports schützen, hängen Sie diese über den Parameter --destination-ports an die Kette an. So würde etwa:

sudo iptables -A INPUT -m multiport -p tcp --destination-ports 21,22 -j sshguard

später nur die Dienste an den Ports 21 und 22 (standardmäßig FTP und SSH) blockieren.

Haben Sie selbst Firewall-Regeln erstellt, müssen Sie darauf achten, dass keine default allow-Regel sämtlichen Traffic durchwinkt und keine default deny-Regel alle Pakete verwirft. Der Befehl

sudo iptables -L

verrät Ihnen, welche Einstellungen iptables momentan verwendet – auch wenn Sie die Regeln mit Hilfe von UFW erstellt haben.

Die Änderungen über das iptables-Kommando halten allerdings nur bis zum nächsten Neustart. Tragen Sie die Befehle deshalb mit administrativen Rechten in die Datei /etc/rc.local ein, wie es Abbildung 4 zeigt, dann lädt Ubuntu sie beim jedem Systemstart.

Abbildung 4

Abbildung 4: Tragen Sie die Iptables-Befehle in die Datei "/etc/rc.local" ein, lädt Ubuntu sie bei jedem Start automatisch. Vor dem "exit 0" fügen Sie bei Bedarf noch einen Aufruf für den SSH-Guard selbst ein.

Einem Freund empfehlen