libssh-Bruteforcer in IPTABLES Chain bannen
Hallo wertes Publikum,
nachdem ich nicht der einzige bin, dem die ständigen Mails vom logchecker
aus der auth.log nerven und weil man halt doch nie alle Eventualitäten
ausschließen kann, hatte ich mir gedacht, ich schreib' ein kleines
Scriptlein, das die INPUT-Chain um eine weitere "denyall" chain erweitert.
In diese "denyall" Chain kommen dann alle Einträge die in der auth.log
durch ein "Illegal user ... from ..." auffällig werden. Eine momentan noch
fest verdrahtete Whitelist sorgt dafür, daß ein Spoof-DOSen der eigenen
Maschine nicht so ohne weiteres funktioniert.
Die Deny-Chain hat eine gewisse Länge und bei Überschreiten der Länge wird
der jeweils älteste Eintrag herausgelöscht, bevor der neue Eintrag
hinzugefügt wird. Performance: Auf einem PII-166 mit 64 MB keine
Auswirkungen bei einem 1000er-DSL feststellbar. Von dem Cel1200 ganz zu
schweigen.
Da die auth.log in Echtzeit gelesen wird, wird auch eine nahezu sofortige
Reaktion auf das "böse(tm) Pattern" gewährleistet.
Wer's probieren mag: "ssh webmaster@212.227.20.60" ;-)
Soweit die Theorie: In der Praxis tut sich dann aber folgendes Problem
auf: Wenn irgendeine Instanz auf dem Rechner das Logfile weglöscht, dann
hängt das Script - klar - ist ja mit dem Script auch noch ein inode dran,
der aber nie mehr mit Daten versorgt wird. Wie kann man nun in PERL
erkennen, ob irgendein Prozess gerade die im <> befindliche Datei
umbenannt oder gelöscht hat? Timer setzen und Signal senden? Oder wie wird
das in der Praxis gelöst?
Momentan löse ich das über den Aufruf von "tail -n 2 -f ..." aber das
scheint mir sehr sehr holterdipolter zu sein.
t++
P.S.: Das Script liegt bei: http://212.227.20.60/debian/denyssh.pl
Reply to: