home..

Absicherung des SSH Dienstes

Absicherung des SSH Dienstes auf Linux Systemen

In diesem Beitrag geht es um die Absicherung des SSH Dienstes auf Linux Systemen. Dabei werden die folgenden Punkte genauer erläutert:

Voraussetzungen

Schritt 1 - Absicherung des SSH Dienstes

Hier geht es hauptsächlich um die Anpassung der OpenSSH Konfiguration. Alle nachfolgenden Änderungen in der SSH Konfigurations-Datei, beziehen sich auf die folgende Datei: /etc/ssh/sshd_config

Schritt 1.1 - Deaktivieren des Root Logins

Bevor der root Login abgestellt wird, sollte man einen Administrativen Benutzer erstellen, mit dem es möglich ist root Rechte zu erlangen.

Um einen solchen User zu erstellen, genügt es die nachfolgenden Befehle auf dem System auszuführen.

useradd -m -U -s /bin/bash -G sudo holu
passwd holu

Jetzt kann der Root Login deaktiviert werden. Dazu muss in der SSH Konfigurations-Datei die Zeile PermitRootLogin wie folgt angepasst werden:

PermitRootLogin no

Schritt 1.2 - Automatischer Sitzungs Timeout

Mit dieser Einstellung wird nach einer gewissen Inaktivität eine Zwangstrennung der SSH Verbindung vollzogen. Dabei sind folgende Einstellungen in der SSH Konfigurations-Datei notwendig:

ClientAliveInterval 300
ClientAliveCountMax 1

ClientActiveInterval definiert die maximale Zeit, in der die Sitzung inaktiv sein darf, bevor sie geschlossen wird. In diesem Fall sind 300 Sekunden 5 Minuten. ClientAliveCountMax definiert die Anzahl der Prüfungen, die vor einer Trennung durchzuführen sind.

Schritt 1.3 - Benutzer für SSH freischalten

Mit dieser Einstellung, wird es nur ausgewählten Benutzer erlaubt eine SSH Verbindung zum Server herzustellen. Dabei sind folgende Einstellungen in der SSH Konfigurations-Datei notwendig:

AllowUsers holu holu2

Schritt 1.4 - Standard Port für SSH ändern

Mit dieser Einstellung wird der SSH Port von 22 abgeändert.

Vorteile: Bots und Scanner die nach SSH Diensten auf Port 22 Scannen, finden den Server nicht mehr und starten keine automatisierten Angriffe gegen den Server.

Nachteile: Bei jeder Verbindung muss der abgeänderte SSH Port angegeben werden. Hier gibt es aber die Möglichkeit, die SSH Verbindung zu speichern. Auf Windows zum Beispiel mit Putty geschieht das über die Oberfläche. Auf Linux Clients, muss dafür die Datei ~/.ssh/config mit folgendem Inhalt angelegt werden.

Host <yout_host>
    HostName <your_host>
    Port AUSGEWÄHLTER_PORT

(Optional) Hier kann auch später der Key hinterlegt werden: IdentityFile ~/.ssh/id_rsa

Achtung: Durch das Ändern des SSH Ports, kann es notwendig sein die Firewall Einstellungen zu ändern. Dies sollte vorher geprüft werden. Um die Einstellung anzuwenden, sind folgende Änderungen in der SSH Konfigurations-Datei notwendig: Es wird aus Sicherheitsgründen empfohlen einen Port unter 1024 zu wählen.

Port AUSGEWÄHLTER_PORT

Schritt 1.5 - Automatischer Verbindungsabbruch bei fehlerhaftem Login

Nach der angegebenen Anzahl von fehlgeschlagenen Login-Versuchen wird die SSH Verbindung automatisch vom Server getrennt. Um die Einstellung anzuwenden, sind folgende Änderungen in der SSH Konfigurations-Datei notwendig:

MaxAuthTries 2

Schritt 1.6 - Deaktivieren nicht genutzter Funktionen

Um das Ausnutzen von nicht genutzten Funktionen zu verhindern, sollten diese abgeschalten werden. Um die Einstellung anzuwenden, sind folgende Änderungen in der SSH Konfigurations-Datei notwendig:

AllowTcpForwarding no   # Deaktiviert Port weiterleitungen.
X11Forwarding no        # Deaktiviert remote GUI ansicht.
AllowAgentForwarding no # Deaktiviert die weiterleitung des SSH Logins.
AuthorizedKeysFile .ssh/authorized_keys # Dabei sollte die Angabe der Datei ".ssh/authorized_keys2" entfernt werden.

Schritt 1.7 - Die Einstellung übernehmen

Um die Einstellungen zu aktivieren, ist es nötig den SSH Dienst neuzustarten. Zuvor sollte aber die Konfiguration auf Fehler überprüft werden, dies geschieht mit diesem Befehl:

sshd -t

Sollten beim Überprüfen der Konfiguration keine Fehler zu erkennen gewesen sein, kann der SSH Dienst mit folgendem Befehl neugestartet werden:

systemctl restart sshd

Schritt 2 - Einrichtung von Fail2Ban

Diese Software bietet Schutz gegen sogenannte Brute-force Angriffe.

Dabei wird nach mehrmals falsch eingegebenen Passworts, die IP Adresse des Benutzers für eine gewisse Zeit gesperrt. Das soll verhindern, dass der Angreifer eine große Kennwortliste in kurzer Zeit ausprobieren kann.

Um Fail2Ban zu installieren sind folgende Schritte notwendig. Installation der Software:

Anpassen der Fail2Ban Konfiguration

Erstellen der Konfiguration anhand einer Vorlage:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

In der Datei /etc/fail2ban/jail.local müssen folgende Änderungen erfolgen:

Unter dem Reiter [sshd] muss enable auf true und der eventuell abgeänderte SSH Port angegeben werden.

enabled = true
port = AUSGEWÄHLTER_SSH_PORT

Optional können auch die Werte für:

abgeändert werden.

Der folgende Befehl übernimmt die geänderte Konfiguration:

systemctl restart fail2ban

Schritt 3 - Zertifikatsbasierte Authentifizierung

Der Benutzer kann sich dadurch ohne Login-Passwort am Server anmelden, es wird ausschließlich das Passwort zum Schutz des privaten Schlüssels benötigt.

Auf dem Client

Testen der SSH Verbindung mit Zertifikatsbasierte Authentifizierung:

ssh -i .ssh/id_rsa holu@<your_host>

Auf dem Server

Achtung: Nach Änderung der folgenden Einstellung, ist es nicht mehr möglich, sich mit einem Passwort über ssh anzumelden: PasswordAuthentication no

Dafür ist die Änderung von PasswordAuthentication yes in PasswordAuthentication no an der SSH Konfiguration unter /etc/ssh/sshd_config notwendig.

Es sollte auch der Eintrag PubkeyAuthentication überprüft werden, ob dieser auf yes steht und nicht auskommentiert ist.

Es ist auch möglich, die Passwort Authentifizierung für einen bestimmten Benutzer zu deaktivieren. Der Eintrag für die SSH Konfigurations-Datei sieht wie folgt aus:

Match User holu
    PasswordAuthentication no

Schritt 4 - Zwei Faktor Authentifizierung

Hier wird nach erfolgreichem Login nach einem Einmalpasswort verlangt, bevor der Loginvorgang abgeschlossen wird. Realisiert wird das Ganze über den Google Authenticator.

Hinweis: Um die zeitbasierten Einmalpasswörter (TOTP) zu erstellen, wird vorzugsweise ein Smartphone benötigt mit einer der aufgelisteten Apps.

Installation des Google Authenticator

Konfiguration des Google Authenticator

Nachdem das PAM-Modul installiert wurde, kann es wie folgt dargestellt initialisiert und konfiguriert werden.

Starten des Google Authenticator:

google-authenticator
  1. Do you want authentication tokens to be time-based (y/n) y, es werden damit TOTP Tokens erstellt (zeitbasierte Einmalpasswörter) n, dadurch werden HOTP Tokens erstellt (zählerbasierte Einmalpasswörter)

  2. Es wird nun ein QR-Code auf der SSH-Konsole angezeigt Scannen Sie diesen Code mit einer kompatiblen App auf Ihrem Smartphone.

  3. Kopieren und verwahren Sie die unterhalb aufgelisteten Keys sicher. Mit den emergency scratch codes kann Login ohne OTP durchgeführt werden. Aktualisieren Sie die Datei .google_authenticator mit diesen Informationen. Tippen Sie dazu y ein.

  4. Bestätigen Sie sämtliche anderen Fragen mit y, oder bei gewünschten abweichenden Einstellungen mit n.

Integration in die SSH-Anmeldung

Das Google Authenticator PAM-Modul ist fertig konfiguriert, nun können Dienste wie der SSH-Daemon angepasst werden, um eine 2-Faktor-Authentifizierung darüber zu ermöglichen.

Fazit

In diesem Beitrag wurde mehrere Möglichkeiten beschrieben, mit deren Hilfe man den SSH Dienst auf Linux Systemen absichern kann.

© 2023 Markus Brunsch