OpenSSH ist die Implementierung des SSH-Protokolls.
OpenSSH wird für die Fernanmeldung, die Durchführung von Backups, die Fernübertragung von Dateien über scp oder sftp und vieles mehr empfohlen.
SSH ist perfekt geeignet, um die Vertraulichkeit und Integrität von Daten zu wahren, die zwischen zwei Netzwerken und Systemen ausgetauscht werden.
Der Hauptvorteil ist jedoch die Server-Authentifizierung durch den Einsatz von Public-Key-Kryptografie.
Diese Seite zeigt, wie Sie Ihren OpenSSH-Server, der auf einem Linux- oder Unix-ähnlichen System läuft, absichern können, um die SSH-Sicherheit zu verbessern.
DSA- und RSA-Schlüssel mit 1024 Bit oder weniger gelten als schwach. Bitte nicht mehr verwenden!
DSA Schlüssel werden nicht mehr empfohlen, da diese auf eine Schlüssellänge von 1024 bit begrenzt ist. Bitte nicht mehr verwenden!
RSA-Schlüssel werden vorgezogen, wenn Abwärtskompatibilität mit SSH-Clients ein Thema ist. Ich nehme hier im Tutorial 8192 Bit starke Schlüssel um mehr Sicherheit zu haben.
Wenn Abwärtskompatibilität kein Thema ist, sind ED25519 Schlüssel die erste Wahl.
Wir entscheiden uns also zwischen RSA ≥4096 Bit oder ED25519 Schlüssel.
ED25519 Schlüssel erstellen: $ ssh-keygen -o -a 100 -t ed25519
RSA 8192 Bit Schlüssel erstellen: $ ssh-keygen -t rsa -b 8192
Brauche ich ein Passwort für meinen Private-Key? Für mich ein klares JA. Eine weitere Barriere, um an meinen privaten Schlüssel zu kommen, ist immer gut.
Das öffentliche und das private Schlüsselpaar werden nun erzeugt und in /root/.ssh/ gespeichert.
id_ed25519 ist der private Schlüssel, der von Client-Anwendungen zur Verbindung mit dem SSH-Server verwendet wird. Wenn die Datei jemals gestohlen oder kompromittiert wird, sollte ein neues Schlüsselpaar erzeugt und dem Server und auf dem Client ersetzt werden.
id_ed25519.pub ist der öffentliche Schlüssel, den der SSH-Server zur Authentifizierung der Client-Schlüssel verwendet.
Das passiert vom SSH Server zum Clientcomputer
$ ssh-copy-id benutzername@deinedomain.ch
Wenn der Clientcomputer ein Windows Rechner ist und wir Putty oder Kitty nutzen müssen wir den Key in Putty/Kitty importieren.
Auf dem Server:
$ cd /root/.ssh/
$ cat id_ed25519
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACDD3ZuZSoppPaV+gSf2g20s2+ctf9gUpuJbd2rXxTmMuAAAAJDECqXExAql
xAAAAAtzc2gtZWQyNTUxOQAAACDD3ZuZSoppPaV+gSf2g20s2+ctf9gUpuJbd2rXxTmMuA
AAAEDeSzrgLFkenCnS0ny8Az2ZrHLUTvvCc3dQ77NV7hgrSMPdm5lKimk9pX6BJ/aDbSzb
5y1/2BSm4lt3atfFOYy4AAAADXJvb3RAaG9zdG5hbWU=
-----END OPENSSH PRIVATE KEY-----
Wir kopieren den kompletten Key incl. BEGIN OPENSSH PRIVATE KEY und END OPENSSH PRIVATE KEY in einen Texteditor und speichern das ganze als File ab.
Dann starten wir puttygen.exe und klicken im oberen Menü auf "File -> Load private key" und wählen unser Textfile aus.
Nun kommt die Meldung das der Key "Successfully imported foreign key" erfolgreich importiert wurde.
Jetzt noch auf "Save private key" klicken und wir haben den Schlüssel für Putty/Kitty ins richtige Format gebracht.
In Putty/Kitty kann man nun den Key einfügen: Connection ➔ SSH ➔ Auth ➔ Private key file for authentication.
Normalerweise sollte die Konfigdatei unter /etc/ssh/sshd_config zu finden sein.
Mit sshd -t testen wir die Konfiguration auf Fehler. Dann können wir nach jeder Änderung an der sshd_config den SSH Dienst reloaden.
root login verbieten
$ vim sshd_config
PermitRootLogin no
SSH von Port 22 weglegen (bringt keine Sicherheit, aber die Logfiles werden weniger von den Scriptkiddies vollgemüllt!)
$ vim sshd_config
Port 2222
Passwortlogin verbieten (Login nur noch über Schlüssel möglich). Sehr zu empfehlen!!! Bitte natürlich vorher Schlüssel einrichten und testen ob das ganze funktioniert, sonst sperrt Ihr euch aus!
$ vim sshd_config
PasswordAuthentication no
AuthenticationMethods publickey
PubkeyAuthentication yes
Nur einem oder ein paar Usern den Zugang erlauben
$ vim sshd_config
AllowUsers bolek lolek
Leere Passwörter verbieten
$ vim sshd_config
PermitEmptyPasswords no
Brute Force Attacken abwehren
Dazu nutzen wir zusätzliche Software wie z.B.:
Fail2ban oder SSHGuard.
Ich habe diese beiden Dienste ausgesucht, weil beide mit den Protokollen IPv4 und IPv6 können. Meine Wahl fiel auf SSHGuard, wegen der einfacheren Einrichtung.
Login Timeout einrichten
$ vim sshd_config
LoginGraceTime 60
Connection Timeout einrichten
$ vim sshd_config
ClientAliveInterval 300
ClientAliveCountMax 0
Rhosts login verbieten
$ vim sshd_config
IgnoreRhosts yes
RhostsAuthentication no
RhostsRSAAuthentication no
Host basierende Authentification verbieten
$ vim sshd_config
HostbasedAuthentication no
Weiterleitungen verbieten
$ vim sshd_config
X11Forwarding no
AllowTcpForwarding no
Loginversuche limitieren
$ vim sshd_config
MaxAuthTries 5
Maximale gleichzeitige Logins
$ vim sshd_config
MaxStartups 3
Banner setzen
$ vim sshd_config
Banner /etc/issue.net
$ vim /etc/issue.net
Warning! Authorized use only.
This server is the property of MyCompanyName.com
Selbstverständlich kann man noch mehr machen wie z.B. mit einer Firewall nur bestimmte IPs durchlassen oder SSH nur mit Port Knocking öffnen oder Chroot der User etc. aber das würde den Rahmen des Tutorials sprengen.
Und wenn man SSH gar nicht braucht, z.B. auf einem Workstation Laptop, kann man SSH auch einfach deinstallieren und damit ganz abschalten :-)
nach oben