SSH absichern
Ist Ihr Suse-Server im Internet erreichbar, so werden Attacken nicht lange auf sich warten lassen. Denn im Netz sind Bots unterwegs, die versuchen, Ihr Linux-System zu knacken. Dieser Beitrag zeigt, wie die Bots dabei vorgehen und wie Sie sich schützen.
In der Regel steuern Sie Ihren Linux-Server mit einem SSH-Client. Das ist auch gut so, denn dank der Verschlüsselung ist die Verbindung kaum angreifbar und sicher. Deshalb versuchen die Schädlinge auch gar nicht erst, Daten zu entschlüsseln. Sie setzen auf die Schwachstelle Mensch. Denn der User an sich liebt es einfach: Einfach zu bedienende Programme und einfach zu merkende Kennwörter.
Was also liegt näher, immer wieder Login-Versuche auf einem Linux-Server zu unternehmen - jedes mal mit einem anderen Benutzernamen und jedes mal mit einem anderen Kennwort.
Benutzernamen und Kennwörter müssen sich die Bots gar nicht ausdenken. Sie nutzen einfach Wörterbücher - zum Beispiel die des Rechtschreibprogramms ispell. Eine kurze Recherche im Internet fördert eine Reihe interessanter Wortsammlungen zu Tage, darunter eine Datei mit Vornamen - gefundenes Fressen für den bösen Bot. Die Datei muss nur leicht bearbeitet werden und schon ist sie ideales Login-Futter.
Und für die Kennwörter? Wie wäre es mit einer ispell-Datei, die nur Markennamen enthält? Darunter sind auch Automarken. Vornamen, Automarken - da stehen die Trefferchancen schon ganz gut.
Futter gibt es genug für die Bots. Und so werden sie los geschickt, um ihr Glück an tausenden von Servern zu probieren. Bots murren nicht, sie probieren tagaus, tagein ihr Glück, bis irgendwo die Kombination aus Benutzernamen und Kennwort funktioniert. Wenn aus 100.000 Versuchen einer klappt, ist das schon eine ordentliche Ausbeute. Denn einmal gekapert lässt es sich mit dem Account trefflich weiterarbeiten, der Linux-Server wird zum Daten schleudernden Zombie und probiert zum Beispiel seinerseits weitere Linux-Systeme anzugreifen.
Übrigens: Einen Bot zu schreiben, der nacheinander hunderte Username-Passwort-Kombinationen ausprobiert ist ein Kinderspiel. Ein paar Bash-Kommandos und das in der Suse-Distributon enthaltene Tool "expect" genügen, um einen Bot auf die Reise zu schicken.
Schützen Sie Benutzernamen und Kennwort
Der beste Schutz gegen böse Bots sind gut gewählte Kennwörter. Wer Namen, Marken oder Geburtsdaten verwendet, erhöht die Chancen, dass der Account geknackt wird. Wichtige Regeln für die Kennwortwahl:
- verwenden Sie Buchstaben, Ziffern und Sonderzeichen gemischt
- ändern Sie das Kennwort regelmäßig
- verwenden Sie keine gängigen Namen, Marken und ähnliches
Das Problem von Kennwörtern wie 6&ot1#2: Sie sind schwer zu merken. Einfacher wird es, wenn Sie kleine Eselsbrücken schaffen. Warum nicht ein normales Wort verwenden und darin einzelne Buchstaben mit Ziffern und Sonderzeichen ersetzen? Die Ziffer 0 statt des Buchstaben O, eine 3 statt e und ein @ statt a. Wenn Sie sich an ein einfaches System halten, bekommen Sie so leicht zu merkende aber schwer zu knackende Kennwörter.
ssh absichern
Der nächste Schritt gegen Hackversuche ist, ssh abzusichern. Das geht in der Datei /etc/ssh/sshd_config. Suchen Sie darin zunächst den Eintrag Protocol. In Opensuse 10.2 ist dieser Parameter auskommentiert. Entfernen Sie das #-Zeichen davor und schreiben Sie:
Protocol 2
Damit stellen Sie sicher, dass nur Verbindungen mit der Protokoll-Version 2 angenommen werden - die veraltete Version 1 bleibt außen vor.
Eine weitere Möglichkeit, den Server zu schützen ist, nur bestimmte Nutzer für den Login auf der Shell zuzulassen. Das geht zum Beispiel mit
AllowUsers root heinz otto karl
Damit haben neben root auch die Benutzer heinz, otto und karl das Recht sich per SSH anzumelden. Alle weiteren Benutzer werden automatisch abgewiesen.
Bleibt noch die - viel diskutierte - Maßnahme, den Zugriff für den Benutzer root zu unterbinden. Das geht mit
PermitRootLogin no
Da sehr viele Arbeiten am Server als root ausgeführt werden, ist das natürlich eine Komforteinbuße - statt direkt als root ins System zu gehen, melden Sie sich mit einem normalen Benutzernamen an und schwingen sich dann per su zum Systemchef auf. Ob das wirklich so viel mehr Sicherheit bringt, als ein gut gewähltes Kennwort sei dahingestellt.
Noch eine Möglichkeit: Verlegen Sie den ssh-Port. Per Standard erwartet der Dämon alle Anfragen auf Port 22 - Hack-Bots werden sich kaum auf anderen Ports umsehen und Sie haben Ruhe. Das Umstellen des Ports, etwa auf 9922, geht mit
Port 9922
Damit Sie sich später anmelden können, müssen Sie dem Client die Portnummer mitteilen. Von der Shell aus sieht der Aufruf dann etwa so aus:
ssh -p 9922 servername
Wichtig ist, dass Sie nach der Umstellung alle anderen Nutzer des Servers von der Port-Umstellung informieren.
Nach den Umstellungen in der Konfigurationsdatei starten Sie den ssh-Dämon neu mit
rcsshd restart
Danach sind die Änderungen aktiv.
Angehalten: Ein Blick in /var/log/messages zeigt, wann Denyhosts zugeschlagen hat - in der letzten Zeile sehen Sie ein refused connect
Lästiger Traffic
Doch auch wenn Ihr System sicher ist - die Bots werden schnell lästig. Denn bei ihren Hack-Versuchen erzeugen sie nicht wenig Traffic. Das kann einerseits den Datenverkehr von und zu Ihrem Server bremsen und andererseits arg ins Geld gehen. 2 GByte Traffic bei einem Bot-Angriff sind nicht selten. Und wer nach Datenvolumen abrechnet, zahlt drauf.
Also gilt es, die Bots zu identifizieren und einzubremsen. Hierfür eignet sich das Programm denyhosts, das Sie unter http://denyhosts.sourceforge.net/ gratis bekommen.
Denyhosts ist ein Python-Skript und merkt sich die Login-Anfragen an den SSH-Dämon. Ab einer - von Ihnen frei einstellbaren - Anzahl vergeblicher Login-Versuche schreibt das Skript die IP-Adresse des Angreifers in die Datei /etc/hosts.deny. Alle weiteren Login-Versuche werden dann blockiert.
Laden Sie die Datei denyhosts.tar.gz auf Ihren Server und entpacken Sie das Archiv mit
tar xzvf denyhosts.tar.gz
Danach wechseln Sie in das Denyhost-Verzeichnis, im Beispiel ist das DenyHosts-2.6 und starten das Setup mit
python setup.py install
Falls die Installation nicht klappt, fehlt vermutlich das Paket python-devel. Installieren Sie es nach und probieren Sie es dann noch einmal.
Das Skript landet danach im Verzeichnis /usr/share/denyhosts. Darin finden Sie die Datei denyhosts.cfg-dist, die Sie in denyhosts.cfg umbenennen und anschließend öffnen.
Zunächst ändern Sie den Parameter SECURE_LOG. Dazu genügt es, in der Zeile unter Redhat or Fedora Core an die erste Stelle ein # zu setzen und so die Zeile auszukommentieren. Weiter unten finden Sie den Eintrag SuSE. Darunter entfernen Sie die Raute, so dass
SECURE_LOG = /var/log/messages
gilt.
Suchen Sie die Einträge DENY_THRESHOLD_.... Die bestimmen, nach wie vielen Fehlerversuchen die IP-Adresse blockiert wird:
DENY_THRESHOLD_INVALID greift, sobald ungültige Login-Versuche ankommen, etwa mit Benutzernamen, die nicht existieren. Der Wert von 5 ist in Ordnung.
DENY_THRESHOLD_VALID gilt für die Fehlversuche bei bestehenden Benutzeraccounts. Der Wert von 10 ist gut, da er auch mehrere Fehler bei der Kennworteingabe verzeiht.
DENY_THRESHOLD_ROOT gilt für alle Fehlversuche, die beim Benutzerkonto root auftreten. Falls Sie sich häufig als root anmelden, sollten Sie den Wert mindestens auf 3 stellen. Anderenfalls sperren Sie sich aus, sobald Sie das Kennwort einmal falsch eingeben.
Das reicht für den Anfang. Speichern Sie die Konfigurationsdatei.
Danach kopieren Sie daemon-control-dist nach daemon-control. In dem File können Sie noch einige Programmpfade festlegen. Sofern Sie denyhosts mit Opensuse 10.2 verwenden ändern Sie den Eintrag DENYHOSTS_BIN in
DENYHOSTS_BIN = "/usr/local/bin/denyhosts.py"
Je nach Distribution und Version kann hier eine andere Pfadangabe notwendig sein. Suchen Sie einfach nach denyhosts.py und tragen Sie dann den entsprechenden Pfad ein.
Jetzt nehmen Sie das Abwehrprogramm mit daemon-control start zum ersten Mal in Betrieb. Schon beim ersten Start untersucht es die Datei /var/log/messages nach Angreifern auf die SSH und sperrt sie gleich.
Weitere Informationen finden Sie in der Datei readme.txt im Programmverzeichnis. Außerdem hilft die FAQ unter denyhosts.sourceforge.net/faq.html.





