Sobald ein Server eine öffentliche IP-Adresse erhält, versuchen Bots, sich über SSH mit Listen gängiger Passwörter damit zu verbinden. Dies ist keine theoretische Bedrohung: Führen Sie folgenden Befehl aus: journalctl -u ssh | grep -c Failed Auf einem seit einigen Tagen online befindlichen VPS beläuft sich die Anzahl der Versuche oft auf mehrere Tausend. Diese Anleitung macht solche Versuche überflüssig.
1. Warum dies als Erstes zu tun ist
Ein Passwort kann erraten, wiederverwendet oder weitergegeben werden. Ein ED25519-SSH-Schlüssel hingegen lässt sich in der Praxis nicht erraten. Durch die Kombination von drei Maßnahmen lässt sich das Risiko weitgehend ausschließen:
- Authentifizierung ausschließlich per Schlüssel : Passwörter werden überhaupt nicht mehr akzeptiert.
- Root-Anmeldung nicht zulässig : Ein Angreifer muss zusätzlich einen Benutzernamen erraten.
- Fail2ban : Adressen, die wiederholt Nachrichten senden, werden automatisch gesperrt.
2. Einen SSH-Schlüssel erstellen und installieren
Auf Ihr Computer :
ssh-keygen -t ed25519 -C "alex@portable"
Wählen Sie eine Passphrase aus: Sollte Ihr Computer gestohlen werden, bleibt der Schlüssel unbrauchbar. Kopieren Sie anschließend den öffentlichen Schlüssel in das Benutzerkonto auf dem Server (das in die ersten Schritte) :
ssh-copy-id alex@IP_SERVEUR
Unter Windows, wo ssh-copy-id nicht vorhanden ist, finden Sie den entsprechenden Befehl in den ersten Schritten auf Ihrem VPS. Bitte überprüfen Sie, ob ssh alex@IP_SERVEUR funktioniert, ohne dass zuvor ein Passwort abgefragt wird, bevor der Vorgang fortgesetzt wird.
3. Die Konfiguration festlegen
Anstatt die Hauptdatei zu ändern /etc/ssh/sshd_config, erstellen Sie eine eigene Datei im Konfigurationsordner: Diese wird bei Updates nicht überschrieben und fasst Ihre Einstellungen an einem Ort zusammen.
cat > /etc/ssh/sshd_config.d/00-durcissement.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
AllowUsers alex
EOF
AllowUsers Es sind nur die aufgeführten Konten zulässig: Trennen Sie diese durch Leerzeichen, falls Sie mehrere haben. MaxAuthTries unterbricht die Verbindung nach drei Versuchen.
4. Die Tücken von cloud-init
Der Dateiname beginnt mit 00-, und das ist kein Zufall. Für jeden Parameter übernimmt OpenSSH den ersten gelesenen Wert, und die Dateien im Ordner werden in alphabetischer Reihenfolge gelesen. Viele Ubuntu-Images enthalten jedoch eine Datei 50-cloud-init.conf mit PasswordAuthentication yes. Ernannt 99-..., würde Ihre Datei anschließend gelesen und stillschweigend ignoriert werden: Die Passwörter würden weiterhin akzeptiert werden.
ls /etc/ssh/sshd_config.d/
Um zu erfahren, welcher Wert tatsächlich gilt, fragen Sie den SSH-Server direkt ab:
sshd -T | grep -E "permitrootlogin|passwordauthentication|kbdinteractive|allowusers"
5. Den Port ändern (optional)
Das Ändern des Ports 22 schützt Sie nicht vor einem Angreifer, der es auf Sie abgesehen hat; dieser wird den neuen Port innerhalb weniger Sekunden ausfindig machen. Allerdings werden dadurch die meisten automatischen Zugriffsversuche aus den Protokollen entfernt. Wenn Sie dies tun, fügen Sie folgende Zeile hinzu: Port 2222 an die vorherige Datei, und Öffnen Sie zunächst den Port in der Firewall. :
ufw allow 2222/tcp
systemctl daemon-reload dann systemctl restart ssh.socket. Unter Debian 12, systemctl restart ssh Das reicht.6. Anwenden, ohne sich dabei zu blockieren
Bitte überprüfen Sie die Syntax und starten Sie anschließend SSH neu. Bitte melden Sie sich nicht von Ihrer aktuellen Sitzung ab.
sshd -t && systemctl reload ssh
Öffnen Sie ein zweites Terminal und testen Sie Folgendes:
ssh alex@IP_SERVEUR # doit fonctionner
ssh root@IP_SERVEUR # doit être refusé
ssh -o PubkeyAuthentication=no alex@IP_SERVEUR # doit être refusé
Sollte der erste Befehl fehlschlagen, korrigieren Sie ihn bitte in der noch geöffneten Sitzung. Falls Sie den Port geändert haben, fügen Sie Folgendes hinzu: -p 2222 bei jedem Befehl; sobald die Verbindung über den neuen Port bestätigt wurde, entfernen Sie die alte Firewall-Regel mit ufw delete allow OpenSSH.
7. Fail2ban installieren
Fail2ban liest die Protokolle aus und sperrt über die Firewall diejenigen Adressen, bei denen sich fehlgeschlagene Anmeldeversuche häufen. Selbst bei deaktivierten Passwörtern entlastet es das System und reduziert den Umfang der Protokolle.
apt install -y fail2ban
cat > /etc/fail2ban/jail.local <<'EOF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
banaction = ufw
[sshd]
enabled = true
backend = systemd
port = ssh
maxretry = 3
bantime = 24h
EOF
systemctl enable --now fail2ban
systemctl restart fail2ban
Falls Sie den Port geändert haben, ersetzen Sie port = ssh von port = 2222. backend = systemd ist unter Debian 12 erforderlich, da dort keine Dateien mehr geschrieben werden /var/log/auth.log standardmäßig; er wird im Abschnitt [sshd] und nicht in [DEFAULT], um die Jails, die später Dateien lesen werden – wie beispielsweise die von Nginx –, nicht zu beeinträchtigen. Um auch Nginx, das E-Mail-System oder WordPress zu schützen, siehe Fail2ban für Fortgeschrittene.
8. Überprüfen
fail2ban-client status sshd
journalctl -u ssh --since "1 hour ago" | tail
Der erste Befehl zeigt die Anzahl der gesperrten Adressen an. Um noch einen Schritt weiter zu gehen, fügen Sie der Verbindung einen zweiten Faktor hinzu: siehe Die Zwei-Faktor-Authentifizierung bei SSH aktivieren. Ergänzen Sie dies durch eine Whitelist-Firewall: UFW konfigurieren.
Häufig gestellte Fragen
Was kann ich tun, wenn ich mich aus meinem VPS ausgesperrt habe?
Nutzen Sie die Notfallkonsole (VNC) im Kundenbereich oder, falls dies nicht möglich ist, wenden Sie sich an den Support: Über diese erhalten Sie Zugriff auf den Server ohne SSH. Löschen oder korrigieren Sie die Datei /etc/ssh/sshd_config.d/00-durcissement.conf und starten Sie anschließend SSH neu. Um diese Situation zu vermeiden, sollten Sie den Vorgang stets von einem zweiten Terminal aus testen.
Warum funktionieren meine SSH-Passwörter weiterhin, obwohl ich „PasswordAuthentication no“ eingestellt habe?
Dies liegt fast immer daran, dass eine andere Datei vor Ihrer eingelesen wird, wie beispielsweise „50-cloud-init.conf“ unter Ubuntu: OpenSSH behält den ersten gefundenen Wert bei. Benennen Sie Ihre Datei mit dem Präfix „00-“ und überprüfen Sie den angewendeten Wert mit dem Befehl „sshd -T“.
RSA-Schlüssel oder ED25519?
ED25519: Die Schlüssel sind kürzer, schneller und gelten als mindestens ebenso sicher wie ein RSA-Schlüssel mit 4096 Bit. RSA ist nur noch für sehr alte Systeme von Nutzen, die ED25519 nicht unterstützen.
Ist Fail2ban sinnvoll, wenn Passwörter deaktiviert sind?
Ja, wenn auch in geringerem Maße: Die Versuche können zwar nicht mehr erfolgreich sein, verbrauchen jedoch Ressourcen und füllen die Protokolle. Fail2ban unterbindet sie schnell, und sein wahrer Wert zeigt sich, wenn Sie es auf andere Dienste ausweiten, wie beispielsweise die Anmeldeseite einer Website.










