SSH Brute-Force Analyse auf Ubuntu Servern

SSH Brute-Force Analyse auf Ubuntu Servern

Ein Ubuntu-Server der öffentlich erreichbar ist wird früher oder später mit SSH-Brute-Force-Angriffen konfrontiert. In diesem Post zeige ich wie man die Lage analysiert und was man dagegen tun kann.


1. Überblick: Wie groß ist das Problem?

echo "=== Failed Login Attempts ===" && grep -c "Failed password" /var/log/auth.log
echo "=== Accepted Logins ===" && grep -c "Accepted" /var/log/auth.log
echo "=== Unique Angreifer-IPs ===" && grep "Failed password" /var/log/auth.log | grep -oP '(?<=from )\d+\.\d+\.\d+\.\d+' | sort -u | wc -l

2. Top Angreifer-IPs

grep "Failed password" /var/log/auth.log | \
  grep -oP '(?<=from )\d+\.\d+\.\d+\.\d+' | \
  sort | uniq -c | sort -rn | head -20

3. Welche Usernamen werden probiert?

Hinweis: Das klassische Lookbehind-Pattern funktioniert mit GNU grep nicht bei variabler Länge. Stattdessen mit sed lösen:
grep "Failed password" /var/log/auth.log | \
  sed 's/.*for invalid user //; s/.*for //' | \
  awk '{print $1}' | \
  sort | uniq -c | sort -rn | head -20

4. Zeitliche Verteilung der Angriffe

grep "Failed password" /var/log/auth.log | \
  awk '{print $1, $2}' | uniq -c | sort -rn | head -20

5. Erfolgreiche Logins prüfen (das Wichtigste!)

grep "Accepted" /var/log/auth.log | tail -20

6. Gegensteuern: Passwort-Auth deaktivieren

Da SSH-Brute-Force immer auf Passwörter zielt, ist die effektivste Maßnahme Passwort-Auth komplett abzuschalten. Voraussetzung: Public-Key-Login funktioniert bereits.

sudo nano /etc/ssh/sshd_config

Folgende Werte setzen:

PasswordAuthentication no
PermitRootLogin prohibit-password
UsePAM yes
Wichtig: UsePAM auf yes lassen! Sonst kann es passieren dass selbst der Public-Key-Login nicht mehr funktioniert.

Danach SSH neu starten – auf Ubuntu heißt der Service ssh, nicht sshd:

sudo systemctl restart ssh

7. Logs aufräumen

Laufende Logfiles niemals löschen – immer mit truncate leeren, da Prozesse den File-Descriptor offen halten:

# Aktive Logs leeren
sudo truncate -s 0 /var/log/auth.log
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/btmp

# Komprimierte Altlogs löschen (sicher)
sudo find /var/log -name "*.gz" -delete
sudo find /var/log -name "*.log.[0-9]*" -not -name "*.gz" -delete

Systemd Journal begrenzen:

# Auf 200 MB begrenzen
journalctl --vacuum-size=200M

# Oder alles älter als 2 Wochen löschen
journalctl --vacuum-time=2weeks

Fazit

Mit PasswordAuthentication no ist der Großteil der Brute-Force-Angriffe wirkungslos. Der Auth-Log-Lärm bleibt zwar bestehen, aber kein Angreifer kommt ohne den passenden Private Key rein. Für zusätzlichen Schutz (und weniger Log-Spam) lohnt sich ergänzend fail2ban.