HowTo: SSH-Server härten

SSH ist ein Dienst zum Fernsteuern von Rechnern über unsichere Netze (Internet). Aus diesem Grund muss man besonderen Wert auf die Sicherheit des SSH-Servers legen (also des Rechners, der ferngesteuert werden soll).

Wenn Sie mit dem Thema SSH noch nicht so vertraut sind, lesen Sie bitte zuerst die Eingangskapitel:

Vorarbeiten

  • Installieren Sie den SSH-Server
  • Konfigurieren Sie Ihren Cient und
  • Richten Sie dort einen passwortlosen Zugang ein.

Die Konfigurationsdatei

Die Konfiguration des Servers erfolgt über die Datei /etc/ssh/sshd_config. Vor dem Härten sollten die aktuellen Einstellungen gesichert werden. Dies geschieht am Besten mit den Befehlen

> cd /etc/ssh
> sudo cp sshd_config sshd_config.bak

Bearbeiten können Sie die Datei mit

> sudo nano /etc/ssh/sshd_config

Includes abschalten

Empfehlenswert: Um eine bessere Kontrolle über die Konfiguration des SSH-Servers zu erhalten, sollten die Includes abgeschaltet werden. Dies kann mit einem Kommentarzeichen vor der folgenden Zeile erfolgen:

# Include /etc/ssh/sshd_config.d/*.conf

Dadurch kann die Installation einen Programmes, welches eigene Einstellungen für ssh mitbringt, diese trotzdem nicht verändern. Sollte diese Einstellungen dennoch benötigt werden, muss man sie jetzt in den Dateien in /etc/ssh/sshd_config.d nachlesen und dann gezielt in /etc/ssh/sshd_config anpassen.

SSH für root sperren

Eine der grundsätzlichen Sicherungsmaßnahmen ist es, root selbst von SSH auszuschließen. Um Arbeiten mit Administrator-Privilegien durchzuführen, melden Sie sich als “Systemverwalter” [1] an und erlangen root-Rechte durch sudo. So muss root nicht direkt von ssh aufgerufen werden.

Suchen Sie in der Konfigurationsdaten nach dem Stichwort PermitRootLogin. Falls nicht vorhanden, ergänzen Sie die Datei mit dieser Zeile

PermitRootLogin no

Nicht benutzte Authentifizierungs-Methoden abschalten

In der Regel werden Sie nur Publik-Key-Authentication und evt. zusätzlich PasswortAuthentication als einzigen Authentifizierungs-Methode zulassen. In diesem Fall müssen Sie folgende Einstellungen vornehmen:

PubKeyAuthentication yes
HostbasedAuthentication no
Ignore RHosts yes
PasswordAuthentication no (oder yes)
PermitEmptyPasswords no

ChallengeResponseAuthentication no [4]
KerberosAuthentication no
GSSAPIAuthentication no
UsePAM no

Bitte beachten Sie: Wenn Sie PasswordAuthentication ausschalten (no), können Sie mit ssh-copy-id keine Schlüssel mehr hochladen. Soll diese Möglichkeit auch nur temporär eingeschaltet werden, dürfen keine leeren Passwörter vergeben sein (NIE – dies ist eine Minimalforderung !!!).

Bevor Sie PasswordAuthentication ausschalten, sorgen Sie dafür, dass Sie in einer zweiten SSH-Sitzung den Zugriff behalten und testen Sie aus, ob Sie sich sicher wieder anmelden können.

Anmeldeverhalten einschränken

Ich halte die Standardwerte für MaxAuthTries (Anzahl der Fehlversuche sich anzumelden) und LoginGraceTime (die Zeit in Sekunden, bis zu welcher eine Anmeldung abgeschlossen sein muss) für zu hoch. Versuchen Sie es hiermit:

MaxAuthTries 3
LoginGraceTime 20

Testen Sie die Einstellungen aus, um zu sehen, ob sie Ihren Anforderungen gerecht werden.

Den Port ändern

Ein zusätzlicher Sicherheitsfaktor ist es, den SSH-Port zu ändern [2]. Am besten wählen Sie eine freie fünfstellige Portnummer aus [3]. Beachten Sie bitte den reservierten Bereich über 49152 (nicht verwenden !).

Port <neue Portnummer>

Geben Sie dann den entsprechenden Port auch in der Konfigurationsdatei der Clients an oder starten Sie ssh, scp oder sftp mit den entsprechenden Optionen:

> ssh -p <neue Portnummer> ....
> scp -P <neue Portnummer> ....
> sftp -P <neue Portnummer> ....

(ACHTUNG: kleines -p bei ssh und großes -P bei scp und sftp !)

Nicht benötigte Optionen ausschalten

In den meisten Fällen werden Sie die folgenden Optionen nicht benötigen (also ausschalten):

X11Forwarding no
PermitUserEnvironment no
AllowAgentForwarding no
AllowTcpForwarding no
PermitTunnel no

Die Bannerinformationen geben einem erfolgreichen Angreifer unnötige Zusatzinformationen. Allerdings sollten Sie PrintLastLog eingeschaltet lassen, weil man dadurch Hinweise auf einen möglichen Angriff bekommt:

Banner no
PrintLastLog yes

Zulassungsbeschränkungen einrichten

Nur bestimmte Rechner zulassen

Der folgende Eintrag lässt nur Rechner aus dem IP-Bereich 192.168.178.0 bis 192.168.178.255 zu:

AllowUsers *@192.168.178.*

Sollen zusätzlich einzelne Rechner ausgeschlossen werden, müssen die Ausnahmen nach AllowUsers angegeben werden:

DenyUsers *@192.168.178.1 *@192.168.178.10

Werden hier die Adressen der anderen Server eingetragen, kann ein Angreifer von einem bereits kompromittierten Server aus nicht weiter vordringen.

Nur bestimmte Benutzer zulassen

Der folgende Eintrag lässt den Benutzer andy aus dem gesamten IP-Bereich 192.168.178.* zu, während sich mandy nur von einem bestimmten Rechner aus anmelden darf.:

AllowUsers andy@192.168.178.* mandy@192.168.178.34

Sollen sich nur Administratoren anmelden dürfen geht das auch so:

AllowGroups adm

Ausnahmen

Sollen für einzelne User besondere Einstellungen gelten, müssen diese am ENDE der Konfigurationsdatei angegeben werden. Haben Sie z.B. PasswordAuthentication abgeschaltet, wollen dies aber für einen besonderen Benutzer (im Beispiel andy) wieder aufhaben, so geben Sie folgendes an:

Match User andy
PasswordAuthentication yes

ACHTUNG: Das Einrücken dient nur der Lesbarkeit; alle Einstellungen bis zum nächsten Match-Befehl oder bis zum Dateiende werden dem Benutzer andy zugewiesen. Deshalb müssen die Match-Befehle auch am Dateiende stehen.

Ein Spezialfall

Sie wollen eine Client einrichten, der via sftp automatisch Dateien über das Internet zugesandt bekommt. Sie können – weil automatisiert – keine Passphrase eingeben (was z.B. für Backups verwendet werden kann). Sie müssen also einen PubKey OHNE Passphrase erstellen.

In diesen Zusammenhang ist eine erhöhte Sicherheitskonfiguration von Nöten:

  • Der Benutzer darf keine interaktive Shell öffnen können.
  • Der Dateibaum darf nicht vollständig sichtbar sein.

Hier hilft folgende Einstellung:

Match User andy
PasswordAuthentication no
PubKeyAuthentication yes
ForceCommand internal-sftp
ChrootDirectory /home/andy/

ForceCommand startet sofort SFTP; dadurch wird eine interaktive Shell unterdrückt. ChrootDirectory macht nun /home/andy zum (scheinbaren) neuen Wurzelverzeichnis des Dateibaums. Der “Rest” unterhalb ist für den SFTP-Benutzer nicht sichtbar.

Mehr zum Thema

Siehe auch

Einzelnachweise und Anmerkungen

ssh-Logohttps://icon-icons.com/de/symbol/ssh-original-Wortmarke-logo/146335
[1]Als Systemverwalter versteht man einen Benutzer, der berechtigt ist, sich mit sudo root-Rechte (Synonym: Administrator-Privilegien) zu verschaffen. Diese werden z.B. für das Installieren von Programmen benötigt.
[2]Der Standard (well known) – Port für den SSH-Server ist 22. Hacker wissen dies natürlich. Nach einem Portscan (z.B. mit nmap) ist für jeden ersichtlich, dass man hier ein mögliches Einfallstor finden kann. Ungünstig sind auch 222 oder 2222, weil diese Ports als Alternativen interpretiert werden.
[3]Eine Liste der vergebenen Portnummern finden Sie hier: https://de.wikipedia.org/wiki/Liste_der_Portnummern
{4]ChallengeResponseAuthentication und KdbInteractiveAuthentication scheinen Synonyme zu sein.