Mehrfach habe ich über die massenhaften Comment- bzw. Trackbackspam Attacken berichtet. So richtig scheint kein Kraut dagegen gewachsen. Zwar ist von den nunmehr >140000 Versuchen nicht ein einziger erfolgreich gewesen, aber die Terrorangriffe belasten meinen Server, kosten Platz in Form von Datenbankeinträgen und stinken. Ich habe mich heute mal hingesetzt und die Einträge mal näher angesehen. "Ein bestimmtes Merkmal muss doch zu finden sein..." habe ich gedacht und bin fündig geworden. Denn nahezu allen fehlt ein Eintrag bei useragent in der Datenbank. Darauf aufbauend habe ich ein kleines Script gestrickt, das stündlich per cronjob startet und alle Terroristen mit iptables den Zutritt verwehrt. Das Sript arbeitet in Stufen, zuerst werden die relevanten Einträge aus der Datenbank selektiert und in eine Datei geschrieben, -ich habe mit den Daten noch mehr vor-, dann werden die IP sortiert und doppelte ausortiert. Alte IP Sperren werden entfernt und dann die aktuellen der vergangenen 60 Minuten frisch gesetzt.
Quick'n dirty Script. (Der echo Befehl muss in einer Zeile stehen, oder wie hier gezeigt durch ein \ am Ende concateniert werden)
(Verbesserte Version von Philipp, siehe Kommentar #1)
Quick'n dirty Script. (Der echo Befehl muss in einer Zeile stehen, oder wie hier gezeigt durch ein \ am Ende concateniert werden)
(Verbesserte Version von Philipp, siehe Kommentar #1)
#!/bin/bash
DATABASE=dbname
DBUSER=dbuser
DBPASS=geheim
echo "SELECT DISTINCT ip FROM serendipity_spamblocklog WHERE useragent = '' \
AND FROM_UNIXTIME( timestamp ) >= DATE_SUB( CURDATE( ) , \
INTERVAL 1 HOUR )"|mysql -D $DATABASE \
-u $DBUSER -p$DBPASS >/tmp/spam.log
set `cat /tmp/spam.log|grep -v ip`
iptables -F
for spamip in $*
do
iptables -I INPUT -s $spamip -j DROP
shift
done
#iptables -L
Zuerst habe ich mit INTERVAL 1 DAY gearbeitet, doch die Anzahl der Treffer sind dann so hoch, das iptables mit memory allocation error aussteigt. Jetzt, bei einen INTERVAL von 1 HOUR sind es ca. 4500, damit kommt iptables zurecht. Das script birgt auch Risiken, nicht nur, dass das Datenbankpasswort lesbar vorhanden ist, es ist auch vorstellbar, das man sich selber ausperrt, also liebe sysadmins, nur auf eigene Gefahr anwenden. Notfalls 60 Minuten warten, dann sollte man wieder reinkommen, wenn nicht, DSL-Verbindung abbeuen und erneut einwählen, durch die andere IP kann die Sperre umgangen werden,. Aber wem sage ich das?
Ich bin jetzt mal gespannt, wie sich die Sache entwickelt und ob die Terrorflut zurückgeht. Ps: Merkwürdigerweise funktioniert der code block nicht mehr so wie sonst, keine Ahnung woran das liegt. Ich habe das hier extra mit dem einfachen Editor bearbeitet, bringt aber auch nichts, naja eben noch eine Baustelle. Wer mit der Darstellung seine Schwierigkeiten hat möge Bescheid sagen, ich kann das Script auch im Downloadbereich zur Verfügung stellen, aber momentan ist's ja nur so'n kleiner 6 Zeiler da lohnt sich das eigentlich nicht.
140521 Spam Kommentare geblockt
Verbesserungsvorschlag:
Damit sparst du dir zum einen den Sort-Aufruf, zum anderen produzierst du aber erheblich weniger Ausgabedaten, da alle Einträge einer IP zusammengefasst werden. Wenn du mit der Log-Datei nichts weiter machen willst, dann würde auch folgendes ausreichen:
Dabei kannst du dir dann die cut- und sort-Aufrufe sparen.
Gruß, Philipp PS: Die [code]-Tags sind irgendwie kaputt. Wenn man den Code ohne Zeilenumbrüche reinschreibt, dann gibts Scrollbalken, wenn man Zeilenumbrüche reinmacht, dann werden sie aber nicht umgesetzt. PPS: Vielleicht wäre ein Hinweis angebracht, dass man zum Kommentieren Cookies essen muss
Haste recht, war auch ein Schnellschuss. Hat mich einfach genervt. Ich habe jetzt momentan noch ein ganz anderes Problem. Ständig Fehlermeldungen wegen zu wenig Speicher. Seitdem virtuozzo upgedated wurde, vermute ich mal. Am liebsten würde ich den Server wechseln aber ein richtiger Routserver ist mir zu teuer. Ps: wegen Cookies, müsste ich mal den Text anpassen