Login
Newsletter
Werbung

So, 4. Oktober 2009, 00:00

SSH-Port absichern

Sperren statt blocken

Die oben beschriebenen Möglichkeiten stellen nur einen Bruchteil der Funktionen dar, die Ihnen ssh bietet, um Angreifer effektiv abzuwehren. Kombiniert mit den Systemtools wie Beispielsweise der pam_abl, die in der Lage ist, Blacklists von falschen Logins zu erstellen, ergeben sich mächtige Kaskaden von Tools, die jeden Angreifer in Schach halten werden.

Eine Steigerung stellt allerdings nicht nur das Blocken, sondern auch das Aussperren von Angreifern dar. Es ist grundsätzlich davon auszugehen, dass jemand, der beispielsweise zehnmal ein falsches Passwort über SSH eingegeben hat, nichts Gutes im Schilde führt. Was liegt also näher, ihm nicht nur ein Login zu verwehren, sondern ihn gleich komplett für eine bestimmte Zeit zu sperren?

Auch hier bietet Linux eine Reihe von Tools, die Ihnen die Arbeit erleichtern werden. Wir wollen Ihnen zwei der bekanntesten Vertreter vorstellen, die das Aussperren von Anwendern direkt in einer Firewall übernehmen.

Anbei allerdings noch ein Hinweis: Führen Sie grundsätzlich alle Änderungen und Tests auf einem lokalen Server durch. Nichts ist schlimmer, als sich von einem Root-Server durch eine falsche Konfiguration auszusperren!

fail2ban

Fail2ban kann IP-Adressen aufgrund einer bestimmten Anzahl fehlgeschlagener Loginversuche für eine einstellbare Zeit blockieren. Technisch gesehen überprüft die Applikation zuvor festgelegte Log-Dateien nach missglückten Loginversuchen und erstellt beim Erreichen einer zuvor festgelegten Anzahl von Fehlern eine Regel in der Firewall. Dabei kommt die Anwendung nicht nur mit SSH, sondern auch mit einer Vielzahl von weiteren Applikationen klar. Die Filterregelfunktionalität ermöglicht darüber hinaus die Erstellung von neuen, an die Erfordernisse des Anwenders angepassten Regeln. Für SSH bietet fail2ban bereits schon vorkonfigurierte Regeln an, die lediglich eine kleinere Anpassung erfordern.

Die eigentliche Konfiguration der Filterregel wird in der Datei /etc/fail2ban/jail.conf umgesetzt. Der für uns interessante Abschnitt dieser Datei findet sich unter dem Eintrag ssh-iptables:

[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
 sendmail-whois[name=SSH, dest=user@myhostname, sender=fail2ban@myhostname]
logpath = /var/log/secure
maxretry = 3

Mit enabled = true aktivieren wir die eigentliche Überprüfung. Die unter action eingetragene Aktion legt fest, um welchen Port und um welches Protokoll es sich handelt. Ferner wird hier die Adresse eingetragen, an die eventuelle Sperrungen per Email versendet werden sollen. Ein wichtiger Eintrag ist der logpath, der aussagt, welche Datei überprüft werden soll. Je nach Distribution kann sich der Eintrag ändern. Mit maxretry setzen wir fest, nach wievielen fehlgeschlagenen Loginversuchen der Zugang gesperrt werden soll.

Ist der Abschnitt ssh-iptables angepasst worden, kann der fail2ban-Daemon auch schon gestartet werden. Je nach Distribution mit dem Kommando /etc/init.d/fail2ban start. Mit dem Befehl fail2ban-client status ssh-iptables können Sie die Funktionalität testen:

# fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- filter
| |- File list:	/var/log/secure
| |- Currently failed:	0
| `- Total failed:	74 2
`- action
 |- Currently banned:	3
 | `- IP list:	94.75.x.x 94.75.x.x 217.160.x.x
 `- Total banned:	95

Alternativ können Sie sich die geblockten Adressen auch direkt in den Firewall-Regeln anschauen:

# iptables -L fail2ban-SSH
Chain fail2ban-SSH (1 references)
target prot opt source destination
DROP all -- xxxxxx.onlinehome-server.info anywhere
DROP all -- 94.75.x.x anywhere
DROP all -- 94.75.x.x anywhere
RETURN all -- anywhere anywhere

Wie Sie unschwer erkennen können, führen fehlerhafte Logins direkt zu einer Sperrung in der Firewall. Ja nach eingetragener Zeit bleibt die Sperrung so lange bestehen, bis sie entweder vom Administrator aufgehoben wurde oder eine bestimmte Karenzzeit verstrichen ist.

Vollständigkeitshalber sei gesagt, dass fail2ban nicht das einzige Tool seiner Art darstellt. So bieten Beispielsweise auch DenyHosts und BlockHosts eine ähnliche Funktionalität. Auch zahlreiche freie Intrusion Detection-Systeme, wie beispielsweise OSSEC, bedienen sich der Möglichkeit, bei einem Angriff Systeme durch Filterregeln auszusperren.

Knockd

Eine andere Strategie der Eindringlingsabwehr verfolgt knockd mit Portknocking. Portknocking stellt ein Verfahren dar, um einzelne Serverdienste oder einen kompletten Server abzusichern. Wie bereits der Name suggeriert, muss der Anwender zuvor an den Server »anklopfen«, damit er Zugang zu einem vorher festgelegten Serverdienst erhält. Die Kommunikation auf dem gewünschten Port wird dabei zunächst von einer Firewall vollständig geblockt. Sendet der Anwender ein Klopfzeichen in Form von mehreren SYN-Paketen mit einem zuvor vereinbartem Inhalt, »öffnet« knockd den entsprechenden Port für den Anwender. Der Vorteil das Verfahrens ist, dass ein Angreifer ohne die Kenntnis der zuvor vereinbarten Abfolge der Zeichen von außen auch mit einem Port-Scanner nicht erkennen kann, ob ein bestimmter Serverdienst eingeschaltet wurde.

Die zentrale Konfigurationsdatei /etc/knockd.conf beherbergt alle relevanten Informationen, die für einen reibungslosen Betrieb von knockd notwendig sind:

[openSSH]
 sequence = 1234,2345,3456
 seq_timeout = 5
 command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 tcpflags = syn
[closeSSH]
 sequence = 1234,2345,3456
 seq_timeout = 5
 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j DENY
 tcpflags = syn

Die wichtigste Einstellung der Datei stellt die Option sequence dar. Diese legt die Ports fest, an denen angeklopft werden muss, um hereingelassen zu werden. seq_timeout legt dagegen fest, wie lange knocld wartet, bis die Sequenz übertragen wurde, während command das Kommando festlegt, das einen Port ent- bzw. sperrt. Durch den Parameter tcpflags können Sie festlegen, auf welche Pakete knockd reagiert.

Sind ihre Optionen eingestellt, können Sie knockd entweder über init oder direkt mittels knockd --debug -verbose starten. In diesem Fall werden Sie direkt auf der Konsole die Resultate zu Gesicht bekommen. Angeklopft wird nun mit dem Kommando knock serverip 1234 2345 3456.

Abschließendes

Dieser Artikel konnte nur einen kleinen Tei der Möglichkeiten aufzeigen, die Ihnen zur Verfügung stehen bei der Absicherung ihres Systems. Egal, für welche Option Sie sich entscheiden, Sie sollten immer im Hinterkopf behalten, dass Ihr Server ein lohnendes Ziel für Angreifer darstellt. Es lohnt sich deshalb, die gängigsten Strategien anzuschauen. Allein schon die Änderung des Standardports senkt die Zahl der erfolgten Angriffe massiv. Schalten Sie dann nur noch die notwendigen Benutzer für einen SSH-Zugriff frei, senken Sie das Einbruchsrisiko weiter. Trotz allem sollten Sie allerdings beachten, dass kein System oder Server hundertprozentig sicher ist.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung