fail2ban

von Khark am 19. Februar 2006 um 00:45 Uhr

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

5 Antworten zu “fail2ban”

  1. codec sagt:

    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*

  2. Khark sagt:

    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

  3. Khark sagt:

    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.

    Connection from 218.108.245.37 port 59581
    Did not receive identification string from 218.108.245.37

    Connection from 218.108.245.37 port 51440
    User root not allowed because not listed in AllowUsers

    Connection from 218.108.245.37 port 50403
    Illegal user fatacunike from 218.108.245.37

    Connection from 84.134.89.162 port 1228
    Accepted keyboard-interactive/pam for nonroot from 84.134.89.162 port 1228 ssh2

    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.

  4. MichiK sagt:

    Hm, das klingt echt nett. Ich glaub, ich installiere das hier auf dem Server auch mal… ;)

  5. xsteadfastx sagt:

    Das Script sieht ja viel vielversprechend aus :) Aber ob das mit metalog funktioniert….mmhhh