Da die SSH-Angriffe doch wieder etwas stärker zugenommen haben, habe ich mich mal entschlossen das ganze mit fail2ban etwas genauer zu betrachten und dynamische Vorkehrungen zu treffen. (Was für ein Ausdruck :D)
Unter http://www.the-art-of-web.com/system/fail2ban/ gibt es dazu dann auch eine kleine nette Anleitung. Ich musste nur, unter Debian Sarge, das fail2ban-Paket manuell per wget herunterladen und mit “dpkg -i paketname” installieren, anstatt dies wie in der Anleitung mit “apt-get -t unstable install paketname” zu tun.
Die anschließende Konfiguration erfolgt über die Datei /etc/fail2ban.conf. Anschließend einmal restarten und evtl. noch das Logfile ( /var/log/fail2ban.log ) in den Logfiles-Screen mitaufnehmen, fertig.
Das Logfile an sich ist selbsterklärend. Ansonsten gibt es noch eine nette Anleitung unter http://www.the-art-of-web.com/system/fail2ban-log/ in der sich auch ein cooles Beispiel findet, wie man sich die gebannten Einträge, nach Häufigkeit sortiert, ausgeben lassen kann.
Ich freue mich jedenfalls drauf, wenn jemand das nächste mal einen SSH brute-force versucht :D
Ich benutze fail2ban auch und lass mir die Angriffe u.a. auch in eine MySQL-Datenbank schreiben (http://security.fnord.name).
Jetzt fällt mir auch wieder ein das ich noch so ein Rekord-Dings schreiben wollte.. *grübel*
Guck mal unter dem letzten Link.
Der awk-Ausdruck sollte sich auf auf auth.log anwenden lassen. Man muss ihn nur nicht nach “Ban: ” suchen lassen.
Dann hat man das schonmal gezählt und nach Häufigkeit sortiert :D
In etwa so:
xxx:/home/xxx# grep “Connection from” /var/log/auth.log | awk ‘{print $8}’ | sort | uniq -c | sort -r
921 220.119.33.251
564 218.108.245.37
8 62.176.251.42
5 62.176.249.118
3 84.134.89.162
3 62.176.253.233
2 203.193.148.11
1 218.94.129.230
Fehlt nur noch die Platzierung (kann mir Zeilennummern machen – nur wie? sort und wc haben keine Option dafür) und eine Highscore-History :D
Kurz im IRC angefragt und schon hat man die Lösung bzgl. der Zeilennummern.
Zudem werden jetzt nur die fehlgeschlagenen Logins gezählt.
xxx:/home/xxx# grep “Illegal user” /var/log/auth.log | awk ‘{print $10}’ | sort | uniq -c | sort -r | nl
1 867 220.119.33.251
2 23 218.108.245.37
3 1 84.134.89.162
4 1 203.193.148.11
Es gilt:
Zeilennummer (Platzierung), Anzahl versuchter Logins (fehlgeschlagene), IP
Ja.. Gut.. Ok… Platz 3 und 4 haben die gleiche Anzahl von Logins und sollten sich also eigentlich Platz 3 teilen…
Sagen wir mal zu 98% haben wir das Ziel erreicht.
Und die starke Abweichung bei der IP 218.108.245.37 kommt zustande, weil es min. 4 versch. Arten von Statusmeldungen bzgl. erfolgreich/fehlgeschlagener Login gibt.
Wir wollen ja ALLE Arten von fehlgeschlagenen Logins bekommen..
Ich glaube es ist besser das zählen der Logins anhand der PID festzumachen, daran kann man dann auch die Zeilen vergleichen.
So nach dem Motto: Wenn die PID gleich ist, gucke was in den Zeilen steht..
– Hat den Vorteil, das man nach den versch. Angriffs-/Ablehnungsmethoden trennen kann.
Hm, das klingt echt nett. Ich glaub, ich installiere das hier auf dem Server auch mal… ;)
Das Script sieht ja viel vielversprechend aus :) Aber ob das mit metalog funktioniert….mmhhh