OpenSSH abschalten
Auf vielen Systemen wird kein SSH Server benötigt, da der sicherste Dienst ist der ist, der nicht läuft schalten wir start des SSH Servers auf solchen Systemen am besten ab.
unter Fedora via:
chkconfig sshd off
unter Debian und Ubuntu via:
sudo update-rc.d -f ssh remove
Ausschließlich SSH Protocol Version 2 verwenden
in der Konfigurationsdatei /etc/ssh/sshd_config sollte die Verwendung des SSH Protokolls 2 erzwungen werden. Die Version 1 ist stark veraltet und sollte aus Sicherheitsgründen deaktiviert werden.
Protocol 2
SSH nur bestimmten Benutzern erlauben
Zur Übersichtlichkeit sollte immer via AllowUsers direktive in der Konfigurationsdatei /etc/ssh/sshd_config aufgezählt werden wer zugriff erhält. Ausschließlich bei zu vielen Benutzern oder sehr häufigen wechseln sollte mit der DenyUsers direktive eine Liste mit verbotenen Benutzern angegeben werden.
AllowUsers root vivek jerry
Idle Log Out Timeout festlegen
SSH Sitzungen von Benutzern die längere Zeit inaktiv sind sollten aus der SSH Sitzung geworfen werden. So kann keine SSH Sitzung missbraucht werden weil sie vergessen wurde.
ClientAliveInterval 300
ClientAliveCountMax 0
.rhosts Dateien der Benutzer ignorieren.
SSH kann den veralteten rsh Befehl emulieren, dies sollte, da es selten verwendet und häufig misbraucht wird, unterbunden werden.
IgnoreRhosts yes
Host basierende Authentifizierung abschalten
HostbasedAuthentication no
root-Login abschalten
Der root-Login sollte verboten werden, da automatische Passwort such Scripte zumeist Passwörter für den Benutzer root suchen.
PermitRootLogin no
Ein Banner einbinden
Ein Banner ist kein direkter Schutz Ihres SSH Servers. Das Banner zeigt einem eventuellen Angreifern das dies ein Konfigurierter SSH Server ist, es also vermutlich nicht lohnt es überhaupt zu versuchen.
Hierzu wird in der SSH Konfigurationsdatei /etc/ssh/sshd_config ein Banner angegeben.
Banner /etc/issue
Die Datei /etc/issue enthält das Banner, welches vor dem Login angezeigt werden soll.
Ändere den SSH Port und
Lege in der SSH Konfiguration, unter /etc/ssh/sshd_config, fest auf welche IP-Adressen SSH hört und unter welchen Port der SSH Server erreichbar sein soll.
Port 300
ListenAddress 192.168.1.5
ListenAddress 202.54.1.5
Nutze die Public Key basierte Authentifizierung
SSH Key erstellen
ssh-keygen -t rsa
zum erstellen eines SSH Schlüssels verwenden.
SSH Public Key übertragen
mit dem folgendem Befehl den Public-Key auf den Server übertragen:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
wenn ssh-copy-id nicht verfügbar ist kann der Public-Key
cat ~/.ssh/id_rsa.pub | ssh user@server 'umask 077; cat >> .ssh/authorized_keys'
SSH-Server konfigurieren
In der Konfiguration /etc/ssh/sshd_config, die Publick-Key Authentifizierung aktivieren.
PubkeyAuthentication yes
Key automatisch laden
Auf den Clients, den Computer die sich via SSH zum Server verbinden sollen ist es schön, wenn die Keys beim Laden schon im RAM sind. Hierzu gibt es je nach Betriebssystem verschiedene Tools.:
- unter Windows: Pageant
- unter Linux: ssh-agent
- unter MacOS: ssh-agent (seit Version 10.5 Leopard teil des Systems)
Unter Linux kann in der ~/.bashrc mit einem kurzen Script der ssh-agent beim Login geladen werden.:
test "$SSH_AUTH_SOCK" || exec ssh-agent $SHELL -c "ssh-add; exec $SHELL -login"
Chroot SSHD
In der Konfiguration /etc/ssh/sshd_config kann seit SSH 4.8p1 die Funktion chroot() zum Einrichten eines Changeroot Gefängnisses verwendet werden. Der Benutzer wird nach dem Login in sein Heimatverzeichnis einzusperren.
Subsystem sftp internal-sftp
Match group sftponly
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Das Verzeichnis in das via chroot() gewechselt werden soll muss dem Benutzer root gehören. Nach dem chroot() Aufruf wechselt die SSH Sitzung in ein Verzeichnis relativ zum neuen root-Verzeichnis, aus diesem Grund wechseln wir das Heimatverzeichnis auf „/“.
# chown root:root /home/user
# usermod -d / user
# adduser user sftponly