Bei uns im studentischen Netzwerk hatten wir letztens das Problem, dass ein infiziertes Notebook massenweise Spam-Mails in die Welt geschickt hat. Innerhalb von 15 Minuten waren das 2.500 ausgehende Spam-Verbindungen.
Da wir nicht komplett Port 25 sperren wollten (wie beispielsweise die
TU Darmstadt), habe ich eine Anpassung der Firewall vorgenommen, die den normalen Benutzer nicht einschränken sollte aber solch Spam-Versender effektiv behindert.
Das ganze basiert auf dem IPTables-Modul recent.
iptables -A auth_out -p tcp --dport 25 -m recent --set --name SMTP_OUT
iptables -A auth_out -p tcp --dport 25 -m recent --update --seconds 180 --hitcount 20 --name SMTP_OUT -j spam_warn
iptables -A auth_out -m recent --rcheck --seconds 180 --hitcount 30 --name SMTP_OUT -j cleanreject
In der Chain auth_out landen nur ausgehende, neue Verbindungen (-m state --state NEW).
In Zeile eins wird jede ausgehende Verbindung im Chain auth_out auf Port 25 gespeichert (unter dem Namen SMTP_OUT). Recent speichert das ganze automatisch in der Defaulteinstellung unter der Abenderadresse.
In Zeile zwei wird dann bei jeder weiteren SMTP-Verbindung geprüft ob innerhalb von 180 Sekunden mehr als 20 Verbindungen aufgebaut wurden und falls es zutrifft in spam_warn gesprungen.
In der Zeile drei wird dann der gesamte Internetzugang für eine Absender-IP gesperrt falls weitere SMTP-Verbindungen aufgebaut wurden. Andere Pakete zählen aber nicht zu dem Hitcount dazu (deswegen nur rcheck anstatt von update).
In /proc/net/ipt_recent/SMTP_OUT kann man die Liste der gespeicherten Absender-IPs und deren Timestamp anschauen bzw. sogar modifizeren
Weitere Möglichkeiten sind online bei Linux Magazin beschrieben:
Hausverbot
Seitdem die Regeln aktiv sind, wurde eine weitere Spam-Welle eines verseuchten Notebooks verhindert - 65227 verhinderte SMTP-Verbindungen innerhalb von ein paar Stunden!
Wer also nicht Port 25 komplett sperren will, sollte eine solche Sperre benutzen um den Katastrophenfall zu verhindern.