Sicherheitgilt für Debian 12/13, Ubuntu 24.04, Pi OS
Wie sehe ich fehlgeschlagene Anmeldeversuche unter Linux?
Der Server ist per SSH aus dem Internet erreichbar, und man möchte wissen, wer es versucht: welche Adressen, welche Benutzernamen, wie oft. Und wer war zuletzt wirklich angemeldet?
Lösung
Kurz: Auf jedem aktuellen System zeigt sudo journalctl -u ssh die fehlgeschlagenen SSH-Anmeldungen mit Benutzername und Adresse. lastb gibt es nur noch bis Debian 12 und Ubuntu 24.04, ab Debian 13 und damit auch im aktuellen Raspberry Pi OS ist es entfernt.
Fehlgeschlagene SSH-Anmeldungen im Journal
sudo journalctl -u ssh --since today | grep -E "Failed|Invalid"
„Invalid user“ heißt, dass es den Benutzernamen gar nicht gibt, „Failed password“, dass das Passwort falsch
war. Der Dienst heißt unter Debian, Ubuntu und Raspberry Pi OS ssh. sshd ist dort
nur ein zweiter Name, mit dem journalctl -u meist nichts findet. Andere Distributionen wie Fedora
nennen den Dienst tatsächlich sshd.
Die häufigsten Angreifer zählen
sudo journalctl -u ssh --since "7 days ago" \
| grep -oE "from [0-9a-f.:]+" | sort | uniq -c | sort -rn | head
Das zählt die Adressen aus allen SSH-Meldungen der letzten sieben Tage, bei den vorderen Plätzen sind das fast immer Fehlversuche. Wer immer wieder auftaucht, gehört gesperrt. Das übernimmt fail2ban automatisch.
Debian 12 und Ubuntu 24.04: lastb
sudo lastb -i | head -20
lastb liest die Datei /var/log/btmp und braucht deshalb sudo,
-i zeigt die Adressen als Zahlen. Die Datei enthält nicht jeden Fehlversuch: Ein abgelehnter
SSH-Schlüssel landet zum Beispiel nicht darin, im Journal schon. Ab Debian 13 gibt es lastb nicht
mehr, Debian verweist dafür selbst auf das Journal.
Erfolgreiche Anmeldungen
last -a | head -20
-a schreibt die Herkunftsadresse ans Zeilenende, wo sie nicht abgeschnitten wird,
last reboot zeigt die Neustarts. Ab Debian 13 kommt last aus dem Paket
wtmpdb. Fehlt der Befehl, installiert sudo apt install wtmpdb ihn. Er zählt dann
ab der Installation.
Nachträge
Wie leere ich die Listen?
Unter Debian 12 und Ubuntu 24.04 mit sudo truncate -s 0 /var/log/btmp für die Fehlversuche und
sudo truncate -s 0 /var/log/wtmp für die erfolgreichen Anmeldungen. Die Dateien bleiben dabei
mit ihren Rechten erhalten. Normalerweise ist das nicht nötig: logrotate beginnt btmp unter
Debian jeden Monat neu, wtmp ebenfalls, aber erst ab 1 MB Größe. Ab Debian 13 verschiebt
sudo wtmpdb rotate alte Einträge aus der Datenbank.
lastb zeigt nichts an, obwohl es Angriffe gibt
Dann ist /var/log/btmp leer, weil logrotate sie gerade neu begonnen hat. Ältere Einträge stehen
in /var/log/btmp.1 und lassen sich mit sudo lastb -f /var/log/btmp.1 lesen. Das
Journal ist die verlässlichere Quelle.
Warum findet die Shell lastb nicht?
Weil Debian 13 den Befehl entfernt hat, und damit auch Raspberry Pi OS Trixie. Er lässt sich nicht nachinstallieren. Für Fehlversuche ist dort das Journal zuständig, siehe oben.