SSH‑Sicherheit

Juli 30, 2011·
Julio Batista Silva
Julio Batista Silva
· 3 Min Lesezeit

Starke Passwörter verwenden

Starke Passwörter sind Zeichenketten, die weder zufällig erraten noch per Brute‑Force in wenigen Stunden geknackt werden können.

Wähle Passwörter mit:

  • Mindestens 15 Zeichen
  • Kombination aus Groß‑/Kleinbuchstaben, Zahlen und Sonderzeichen

Programme wie pwgen, makepasswd, apg, KeePassX oder Unix‑Befehle erzeugen sichere Zufalls‑ Passwörter:

tr -dc '_A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' < /dev/urandom | head -c25
pwgen -cnsy 25 1

Optionen für pwgen:

  • -c: mindestens ein Großbuchstabe
  • -n: mindestens eine Ziffer
  • -s: mindestens ein Sonderzeichen
  • -y: mehrdeutige Zeichen ausschließen (l, 1, I, 0, O, …)
  • 25: Länge
  • 1: Anzahl der Passwörter

Solche Passwörter sind sicher, aber schwer merkbar – man muss sie notieren. Ich empfehle daher eine lange Passphrase, die nur du dir merken kannst.

Root‑Login per SSH deaktivieren

  • In /etc/ssh/sshd_config folgende Zeile setzen:

    PermitRootLogin no
    
  • Daemon neu starten:

    sudo /etc/rc.d/sshd restart
    

    oder mit systemd:

    sudo systemctl restart sshd
    

Root‑Zugriff bei Bedarf über su.

Zugelassene SSH‑Benutzer einschränken

Sinnvoll, wenn nur wenige Nutzer per SSH zugreifen dürfen. In /etc/ssh/sshd_config:

AllowUsers usr_1 usr_2 usr_3

„Protocol 1“ deaktivieren

SSH bietet zwei Protokolle. Protocol 1 ist veraltet/unsicher; Protocol 2 aktivieren.

Port ändern

Standardport ist 22. Auf eine zufällige Nummer über 1024 ändern, z. B. Port 2345.

Ab jetzt muss der Port beim Verbinden angegeben werden:

ssh -p 2345 julio@home.juliobs.com

Den Port (TCP) ggf. auch im Router freigeben.

Firewall verwenden

Mit iptables nur bestimmte IPs auf den SSH‑Port lassen:

iptables -A INPUT -p tcp -s 201.43.81.111 --dport 22 -j ACCEPT

Da ich oft von wechselnden IPs zugreife, begrenze ich stattdessen die Versuche pro IP:

Loggt IPs, die Port 22 anfragen, und akzeptiert, wenn in 60 s weniger als 4 Versuche erfolgten:

iptables -A INPUT -p tcp --dport 22 -m recent --set --name ssh --rsource
iptables -A INPUT -p tcp --dport 22 -m recent ! --rcheck --seconds 60 \
         --hitcount 4 --name ssh --rsource -j ACCEPT

Verbindungsversuche >3 pro Minute verwerfen:

iptables -A INPUT -p tcp --dport 22 --syn -m limit --limit 1/m --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 --syn -j DROP

Public/Private Keys für Authentifizierung nutzen

  1. Schlüssel erstellen:

    ssh-keygen -t rsa -b 4096 -f servidorx -C "pubkey para servidor X"
    

    Standard ist RSA 2048; hier nutze ich RSA 4096.
    2020‑Update: Empfohlen ist Ed25519: ssh-keygen -t ed25519 -f serverx -C "pubkey".

  2. Schlüssel auf den Server kopieren.

    ssh-copy-id -i serverx.pub '-p 2345 julio@serverx.com'
    

    Das hängt serverx.pub an ~/.ssh/authorized_keys auf dem Server an.

  3. Berechtigungen prüfen:

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/serverx
    
  4. ~/.ssh/config anlegen – per‑Host‑Einstellungen/Aliasse:

    Host github.com
        HostName        github.com
        IdentityFile    ~/.ssh/github
        User            jbsilva
    
    Host juliobs.com
        HostName        juliobs.com
        IdentityFile    ~/.ssh/juliobs
        User            julio
    
    Host servidorx
        HostName        ssh.servidorx.com
        IdentityFile    ~/.ssh/servidorx
        User            usuariox
        Port            2345
    

Damit musst du Benutzer, Adresse und Port nicht mehr jedes Mal tippen.

Statt

ssh -i serverx -p 2345 userx@ssh.serverx.com

geht dann einfach:

ssh servidorx

Julio Batista Silva
Autoren
Senior Cloud-Entwickler
comments powered by Disqus