Zum Inhalt

SSH-Konfiguration

SSH (Secure Shell) ist der primäre Zugang zu deinem Server. Eine sichere SSH-Konfiguration ist essentiell.

Warum SSH härten?

SSH-Angriffe

SSH-Server sind das häufigste Angriffsziel bei Linux-Servern. Automatisierte Bots versuchen kontinuierlich, sich per Brute-Force-Attacke Zugang zu verschaffen.

pie
  title Typische Angriffsversuche pro Tag
  "SSH Brute-Force": 85
  "Web-Angriffe": 10
  "Andere": 5

Vorbereitung

Zweite SSH-Verbindung offen halten

KRITISCH: Halte während der gesamten SSH-Konfiguration eine zweite SSH-Verbindung offen. Falls du dich aussperrst, kannst du über diese Verbindung Fehler korrigieren.

# Öffne ein zweites Terminal und verbinde dich
ssh DEIN_USERNAME@DEINE_SERVER_IP

1. SSH-Konfiguration sichern

Erstelle ein Backup der aktuellen Konfiguration:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

2. SSH-Konfiguration bearbeiten

Öffne die SSH-Konfigurationsdatei:

sudo vim /etc/ssh/sshd_config

Empfohlene Konfiguration

Ersetze den Inhalt mit folgender Konfiguration:

AllowUsers anpassen

Ersetze DEIN_USERNAME mit dem tatsächlichen Benutzernamen!

Falsche Einstellung führt zur Aussperrung!

/etc/ssh/sshd_config
# ============================================
# SSH Server Konfiguration - Gehärtet
# ============================================

# Netzwerk-Einstellungen
Port 2222  # (1)!
AddressFamily inet  # (2)!
ListenAddress 0.0.0.0

# Host Keys
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key

# Logging
SyslogFacility AUTH
LogLevel VERBOSE  # (3)!

# Authentifizierung
LoginGraceTime 30  # (4)!
PermitRootLogin prohibit-password  # (5)!
StrictModes yes
MaxAuthTries 3  # (6)!
MaxSessions 3

# Public Key Authentifizierung
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# Passwort-Authentifizierung DEAKTIVIEREN
PasswordAuthentication no  # (7)!
PermitEmptyPasswords no
ChallengeResponseAuthentication no

# Weitere Sicherheit
UsePAM yes
X11Forwarding no  # (8)!
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
UseDNS no  # (9)!

# Nur bestimmte Benutzer erlauben
AllowUsers root DEIN_USERNAME  # (10)!

# Idle-Timeout
ClientAliveInterval 300  # (11)!
ClientAliveCountMax 2

# Banner (optional)
Banner /etc/ssh/banner

# SFTP
Subsystem sftp /usr/lib/openssh/sftp-server

# Algorithmen (nur sichere)
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
  1. Änderung des Standard-Ports 22 auf 2222
  2. Nur IPv4. Bei Bedarf any für IPv4+IPv6.
  3. Ausführliches Logging für Sicherheitsanalysen.
  4. Nur 30 Sekunden Zeit für die Anmeldung.
  5. KRITISCH: Kein direkter Root-Login mit Password möglich! Der Root-Login wird für Coolify benötigt, ansonsten könnte dieser mit no komplett deaktiviert werden.
  6. Maximal 3 Authentifizierungsversuche.
  7. KRITISCH: Keine Passwort-Authentifizierung!
  8. Kein X11-Forwarding (wird nicht benötigt).
  9. Schnellerer Login ohne DNS-Lookup.
  10. WICHTIG: Ersetze mit deinem Benutzernamen!
  11. Idle-Verbindungen nach 10 Minuten trennen.

Optionale SSH-Port-Änderung

SSH-Port ändern (Security through Obscurity)

Das Ändern des SSH-Ports reduziert automatisierte Angriffe erheblich, ist aber keine echte Sicherheitsmaßnahme.

Vorteile:

  • Weniger Brute-Force-Versuche in den Logs
  • Reduziert "Noise" von automatisierten Scans

Nachteile:

  • Kein echter Sicherheitsgewinn
  • Komplexere Verbindung
  • Port-Scans finden den Port trotzdem

3. SSH-Banner erstellen

Erstelle ein Login-Banner mit rechtlichem Hinweis:

sudo tee /etc/ssh/banner << 'EOF'
*******************************************************************
*                   AUTORISIERTE NUTZUNG ERFORDERLICH              *
*******************************************************************
* Dieser Server ist privates Eigentum. Unbefugter Zugriff ist      *
* verboten und wird strafrechtlich verfolgt.                       *
*                                                                   *
* Alle Aktivitäten werden protokolliert.                           *
*******************************************************************
EOF

4. Konfiguration testen

Teste die Konfiguration auf Syntaxfehler:

sudo sshd -t

Keine Ausgabe = Erfolg

Wenn der Befehl keine Ausgabe produziert, ist die Syntax korrekt.

Bei Fehlern siehst du eine Meldung wie:

/etc/ssh/sshd_config: line 42: Bad configuration option: InvalidOption

5. SSH-Dienst neu starten

sudo systemctl daemon-reload
sudo systemctl restart ssh.service

6. Verbindung testen

Fenster offen lassen

Schließe dein aktuelles Terminal NICHT!

Öffne ein neues Terminal und teste die Verbindung:

ssh DEIN_USERNAME@DEINE_SERVER_IP

Fehlerbehebung

Verbindung abgelehnt

Problem: Connection refused oder Permission denied

Lösung (in der noch offenen Verbindung):

  1. Prüfe den Benutzernamen in AllowUsers
  2. Prüfe den SSH-Key in ~/.ssh/authorized_keys
  3. Stelle das Backup wieder her:
    sudo cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config
    sudo systemctl daemon-reload
    sudo systemctl restart ssh.service
    
Passwort wird abgefragt

Problem: SSH fragt nach dem Passwort statt den Key zu akzeptieren

Lösung:

  1. Prüfe die Berechtigungen:

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    

  2. Prüfe den Inhalt von authorized_keys:

    cat ~/.ssh/authorized_keys
    

7. Root-Login testen

Versuche, dich als Root mit Passwort anzumelden (sollte fehlschlagen):

ssh -p 2222 -o PreferredAuthentications=password root@DEINE_SERVER_IP

Erwartete Antwort:

root@DEINE_SERVER_IP: Permission denied (publickey).

Root-Login deaktiviert

Wenn du diese Meldung siehst, ist der Root-Login korrekt deaktiviert.

8. Passwort-Login testen

Versuche, dich mit Passwort anzumelden (sollte fehlschlagen):

ssh -p 2222 -o PreferredAuthentications=password DEIN_USERNAME@DEINE_SERVER_IP

Erwartete Antwort:

DEIN_USERNAME@DEINE_SERVER_IP: Permission denied (publickey).

SSH-Konfiguration für den Client

Erstelle oder Erweitere deine lokale SSH-Konfiguration für einfacheren Zugang:

~/.ssh/config (lokal)
Host fcl-tech.de
    HostName DEINE_SERVER_IP
    User DEIN_USERNAME
    Port 2222
    UseKeychain yes
    AddKeysToAgent yes
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_fcltechde

Nun kannst du dich einfach verbinden mit:

ssh fcl-tech.de

Zusammenfassung

Nach Abschluss dieses Abschnitts:

  • SSH-Konfiguration gehärtet
  • Root-Login für Coolify konfiguriert
  • Passwort-Authentifizierung deaktiviert
  • Nur SSH-Key-Authentifizierung erlaubt
  • Nur spezifischer Benutzer erlaubt
  • Sichere Algorithmen konfiguriert