18 SSH für sichere Fernzugriffe und Netzwerkdienste Konfiguration

18.1 Einführung

SSH (Secure Shell) ist ein Protokoll, das sicheren Fernzugriff auf Netzwerkdienste ermöglicht. Es verschlüsselt den gesamten Datenverkehr, um Abhörangriffe und Man-in-the-Middle-Angriffe zu verhindern.

18.2 Installation und Konfiguration von SSH

18.2.1 Installation

Auf den meisten Linux-Distributionen ist der OpenSSH-Server standardmäßig verfügbar. Falls er nicht installiert ist, kann er mit den folgenden Befehlen installiert werden.

Befehl (Debian/Ubuntu):

sudo apt-get install openssh-server

Befehl (CentOS/RHEL):

sudo yum install openssh-server

18.2.2 Starten und Aktivieren des SSH-Dienstes

Befehl (Debian/Ubuntu):

sudo systemctl start ssh
sudo systemctl enable ssh

Befehl (CentOS/RHEL):

sudo systemctl start sshd
sudo systemctl enable sshd

18.2.3 Überprüfen des Dienststatus

Befehl:

sudo systemctl status ssh

Ausgabe:

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2024-07-05 10:05:17 CEST; 1h 2min ago

18.3 SSH-Konfigurationsdatei

Die Hauptkonfigurationsdatei für den SSH-Server ist /etc/ssh/sshd_config. Hier können verschiedene Einstellungen vorgenommen werden, um die Sicherheit und Funktionalität des SSH-Dienstes anzupassen.

18.3.1 Wichtige Konfigurationsoptionen

18.3.1.1 Standardport ändern

Konfigurationszeile:

Port 2222

Erklärung: Ändert den Standardport von 22 auf 2222, um einfache Angriffsversuche zu erschweren.

18.3.1.2 Root-Login deaktivieren

Konfigurationszeile:

PermitRootLogin no

Erklärung: Verhindert den direkten Root-Login über SSH, um die Systemsicherheit zu erhöhen.

18.3.1.3 Passwort-Authentifizierung deaktivieren

Konfigurationszeile:

PasswordAuthentication no

Erklärung: Deaktiviert die Passwort-Authentifizierung und erzwingt die Verwendung von SSH-Schlüsseln.

18.3.2 Konfigurationsdatei neu laden

Nach Änderungen an der Konfigurationsdatei muss der SSH-Dienst neu gestartet oder die Konfiguration neu geladen werden.

Befehl:

sudo systemctl reload ssh

18.4 SSH-Schlüsselbasierte Authentifizierung

SSH-Schlüssel bieten eine sicherere und bequemere Methode zur Authentifizierung im Vergleich zu Passwörtern.

18.4.1 Generieren eines Schlüsselpaares

Befehl:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Erklärung: Dieser Befehl generiert ein neues RSA-Schlüsselpaar mit einer Schlüssellänge von 4096 Bit.

18.4.2 Öffentlichen Schlüssel auf den Server kopieren

Befehl:

ssh-copy-id user@remote_host

Erklärung: Dieser Befehl kopiert den öffentlichen Schlüssel in die ~/.ssh/authorized_keys-Datei des entfernten Hosts.

18.4.3 Manuelles Kopieren des öffentlichen Schlüssels

Befehl:

cat ~/.ssh/id_rsa.pub | ssh user@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Erklärung: Dieser Befehl fügt den öffentlichen Schlüssel manuell zur authorized_keys-Datei des entfernten Hosts hinzu.

18.5 SSH-Tunneling

SSH-Tunneling ermöglicht die sichere Weiterleitung von Netzwerkverkehr über eine verschlüsselte SSH-Verbindung.

18.5.1 Lokales Port-Forwarding

Befehl:

ssh -L 8080:remote_host:80 user@remote_host

Erklärung: Dieser Befehl leitet den lokalen Port 8080 zum Port 80 des entfernten Hosts weiter.

18.5.2 Remote Port-Forwarding

Befehl:

ssh -R 8080:localhost:80 user@remote_host

Erklärung: Dieser Befehl leitet den Port 8080 des entfernten Hosts zum Port 80 des lokalen Hosts weiter.

18.5.3 Dynamisches Port-Forwarding

Befehl:

ssh -D 8080 user@remote_host

Erklärung: Dieser Befehl erstellt einen SOCKS-Proxy auf dem lokalen Port 8080, der den gesamten Datenverkehr über die SSH-Verbindung leitet.

18.6 SSH-ProxyJump

ProxyJump ermöglicht den Zugriff auf einen Zielhost über einen Zwischen-SSH-Host (Jump Host).

Befehl:

ssh -J user@jump_host user@target_host

Erklärung: Dieser Befehl stellt eine Verbindung zum target_host über den jump_host her.

18.7 Verwendung von ssh-agent

ssh-agent ist ein Hilfsprogramm, das SSH-Schlüssel im Speicher hält und deren Passphrases verwaltet, um die Notwendigkeit zu eliminieren, die Passphrase bei jeder Verbindung einzugeben.

18.7.1 Starten von ssh-agent

Befehl:

eval "$(ssh-agent -s)"

Ausgabe:

Agent pid 1234

Erklärung: Dieser Befehl startet den ssh-agent und setzt die Umgebungsvariablen, die für die Kommunikation mit dem Agenten erforderlich sind.

18.7.2 Hinzufügen eines Schlüssels zum ssh-agent

Befehl:

ssh-add ~/.ssh/id_rsa

Erklärung: Dieser Befehl fügt den privaten Schlüssel id_rsa zum ssh-agent hinzu und ermöglicht die Verwendung des Schlüssels ohne erneute Passphrase-Eingabe.

18.7.3 Anzeigen der verwalteten Schlüssel

Befehl:

ssh-add -l

Ausgabe:

4096 SHA256:abcd... (RSA)

Erklärung: Dieser Befehl listet alle momentan vom ssh-agent verwalteten Schlüssel auf.

18.7.4 Entfernen eines Schlüssels vom ssh-agent

Befehl:

ssh-add -d ~/.ssh/id_rsa

Erklärung: Dieser Befehl entfernt den spezifischen privaten Schlüssel id_rsa aus dem ssh-agent.

18.7.5 Alle Schlüssel vom ssh-agent entfernen

Befehl:

ssh-add -D

Erklärung: Dieser Befehl entfernt alle derzeit vom ssh-agent verwalteten Schlüssel.

Durch die Verwendung von ssh-agent wird die Verwaltung von SSH-Schlüsseln erleichtert und die Sicherheit erhöht, indem die Passphrases sicher im Speicher gehalten werden.

SSH ist ein vielseitiges und sicheres Werkzeug für den Fernzugriff und die Verwaltung von Netzwerkdiensten unter Linux. Durch die Konfiguration von SSH, einschließlich der Verwendung von Schlüsseln und Tunneling, kann die Sicherheit und Flexibilität des Zugriffs auf entfernte Systeme erheblich verbessert werden.