SSH absichern

Hier fasse ich ein paar Möglichkeiten zusammen, um den Zugriff auf einen Server per SSH sicherer zu machen.

Root Login per SSH deaktivieren

Ein wichtiger Schritt bevor man anfängt seinen Server weiter einzurichten, den Login per SSH für den User Root zu verbieten. Als erstes melden wir uns mit root per ssh bei unserem Server an und dann legen wir einen Nutzer an, den wir in Zukunft für die Anmeldung nutzen:

adduser NutzernameCode-Sprache: Bash (bash)

Nun werden wir dazu aufgefordert, ein Passwort zu vergeben und dieses zu bestätigen. Die weiteren Abfragen kann man einfach mit [Enter] übergehen. Danach fügen wir den neu erstellten Nutzer der Sudo Gruppe hinzu:

usermod -aG sudo NutzernameCode-Sprache: Bash (bash)

Jetzt melden wir uns einmal ab und danach mit dem neu erstellten Nutzer wieder an.

Nun editieren wird die Datei /etc/ssh/sshd_config:

sudo nano /etc/ssh/sshd_configCode-Sprache: Bash (bash)

Dort suchen wir die Zeile

PermitRootLogin yesCode-Sprache: Bash (bash)

Und ändern diese auf

PermitRootLogin noCode-Sprache: Bash (bash)

Danach starten wir den Dienst SSH einmal neu

sudo systemctl restart sshCode-Sprache: Bash (bash)

nach oben


SSH Login mit Keys statt mit Passwort

Eine passwortlose Anmeldung erhöht die Sicherheit und den Komfort beim Zugriff auf einem entfernten Server. Statt einem Passwort, welches erraten oder abgefangen werden kann, verwenden wir ein Schlüsselpaar zur Authentifizierung.

Ein Schlüsselpaar besteht aus zwei Teilen. Ein privater Schlüssel, der auf dem Computer bleibt und ein öffentlicher Schlüssel, der auf den Server kopiert wird. Wir erstellen das Schlüsselpaar mit

ssh-keygen -t ed25519 -C "ihre_email@example.com"Code-Sprache: Bash (bash)

Die Mailadresse wird als Kommentar hinzugefügt und dient zur leichteren Identifizierung und hat keine technische Funktion.

Wir werden gefragt, wo der Schlüssel gespeichert werden soll. Der Standardpfad (~/.ssh/id_ed25519) ist in der Regel die beste Wahl. Drücken Sie einfach die Enter-Taste.

Anschließend können wir eine Passphrase (ein Passwort für den Schlüssel) festlegen. Dies bietet eine zusätzliche Sicherheitsebene. Wenn wir eine Passphrase festlegen, müssen wir diese bei der ersten Verwendung des Schlüssels in einer Sitzung eingeben. Für eine vollständig passwortlose Anmeldung können wir das Feld leer lassen, indem wir die Enter-Taste drücken.

Mit ssh-copy-id können wir nun den öffentlichen Schlüssel auf den Server kopieren. Das Tool kopiert den Schlüssel auf den Server und setzt automatisch die richtigen Dateiberechtigungen. Vergesst nicht, den Benutzernamen und die IP Adresse oder die Domain anzugeben.

ssh-copy-id benutzer@server_ip_oder_domainCode-Sprache: Bash (bash)

Hier werden wir nun ein letztes Mal nach dem Passwort gefragt und danach ist der Schlüssel auf dem Server hinterlegt unter ~/.ssh/authorized_keys .

Jetzt melden wir uns ab und gleich darauf mit

ssh benutzer@ip Adresse / Domain Code-Sprache: Bash (bash)

wieder an und es sollte keine Passwortabfrage mehr kommen, außer wenn man Befehle mit sudo ausführen muss, aber dies sollte man bei einem öffentlichen Server auch so belassen.

Wenn dies alles geklappt hat, deaktivieren wir zum Schluss noch die Authentifizierung mit Passwort. Dazu öffnen wir die Datei /etc/ssh/sshd_config und ändern die Zeile PasswordAuthentication von yes auf no. Danach starten wir den Dienst SSH neu.

sudo systemctl restart sshCode-Sprache: Bash (bash)

Wichtig ist, dass wir uns zuerst absichern, dass die Key Anmeldung auch funktioniert, ansonsten sperren wir uns vom Server aus.

nach oben


Port ändern und den Login-Befehl vereinfachen

Wenn man die Möglichkeit hat, von den Standardeinstellungen abzuweichen, sollte man sich immer die Mühen machen. Gerade bei meinem Mailserver habe ich festgestellt, wie die Angriffe auf bestimmte Ports abnehmen, wenn man vom Standard abweicht. Natürlich ist man was einen Mailserver betrifft an bestimmte Ports gebunden, aber den Port für den SSH Zugriff können wir ändern und dies werden wir nun unter anderem tun.

Als erstes öffnen wir die sshd_config.

sudo nano /etc/ssh/sshd_configCode-Sprache: Bash (bash)

Dort suchen wir nun nach der der Zeile mit der Portangabe. Unter Umständen kann diese auch mit # auskommentiert sein. Hier entfernen wir die Kommentierung und geben unseren gewünschten Port ein.

Port 12345Code-Sprache: Bash (bash)

Theoretisch können wir Nummern von 0-65535 nutzen. Um nicht mit anderen Diensten in die Quere zu kommen, entscheide ich mich immer für Ports zwischen 1024 und 49151.

Danach starten wir einmal den Dienst SSH neu.

sudo systemctl restart sshCode-Sprache: Bash (bash)

Nun können wir uns mit Angabe des geänderten Ports anmelden.

ssh -p 12345 benutzer@ihre_server_ip
Code-Sprache: Bash (bash)

Zu Hause bin ich nur noch mit Linux unterwegs und um mir die Login-Prozedur zu vereinfachen habe ich eine config erstellt.

nano ~/.ssh/configCode-Sprache: Bash (bash)

Hier können wir nun folgenden Inhalt einfügen:

Host meinserver
    HostName beispieldomain.de
    User benutzername
    IdentityFile ~/.ssh/id_ed25519
    Port 12345Code-Sprache: Bash (bash)

Hier ändern wir den Host auf den gewünschten Namen den wir frei vergeben können, unsere Domain oder IP Adresse, den Benutzernamen den wir auf dem Server eingerichtet haben, den privaten Schlüssel für den Key-Login und den geänderten SSH Port.

Nun können wir uns ganz einfach mit „ssh meinserver “ einloggen.

nach oben


Problembehebungen

Bei manchen Systemen kann es vorkommen, dass zusätzliche Konfigurationen unter zum Beispiel /etc/ssh/sshd_config.d/custom.conf oder so ähnlich vorhanden sind. Wenn in einer der Dateien in diesem Verzeichnis der root Login erlaubt wird oder auch die Anmeldung mit Passwort statt mit Keys, dann werden die Einstellungen in der /etc/ssh/sshd_config überschrieben. Entsprechende Zeilen lassen sich einfach mit # auskommentieren:

# PermitRootLogin yesCode-Sprache: Bash (bash)

nach oben

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Deine E-Mail-Adresse wird nicht veröffentlicht.
Pflichtfelder sind mit einem * markiert.
Um Missbrauch vorzubeugen, speichern wir deine IP-Adresse und ggf. weitere technische Daten. Weitere Informationen findest du in unserer Datenschutzerklärung.