Good to Know Database

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.

Quellen