Irgendwie hat ein Bot-Netz die Haupt-IP Adresse unseres Webservers erwischt. Seit ein paar Tagen schlägt sich der Server mit unendlich vielen, sinnlosen Referrer Anfragen herum. Immerhin ist der Traffic um ca. 1.4 GB / Stunde gestiegen und da wir die Logfiles in einer Datenbank analysieren ist auch die Response Time des Servers spürbar gestiegen.
Alle Apache-seitigen Eingriffe (.htaccess, evasieve, etc) benötigen wieder Apache Prozesse und der Server verarbeitet weiterhin Anfragen – der Traffic bleibt weiterhin höher als nötig. Also versuchen wir den Referrer Spam schon bei der Firewall abzuwehren. Wenn wir den Traffic analysieren, kommen wir schnell zu den 3 Übeltätern ; anx.batanga.net, ads.deliads.com, g.adnxs.com
Die „bösen“ IP Adressen finden wir mit
ngrep -t -W single '^GET http:\/\/(anx.batanga.net|ads.deliads.com|g.adnxs.com|ib.adnxs.com)' 'dst host my-ip.add.res and tcp and dst port 80' | grep batanga | cut -d " " -f 4 | cut -d ":" -f 1 > ips.txt
Danach machen wir die IPs unique und sortieren sie nach Häufigkeit
sort -rn ips.txt | uniq -c | sort -rn > refspamip.txt
In einem Editor markieren wir die – sagen wir mal – 1000 IPs die am öftesten vorkommen, und entfernen die Zeilennummern. Die Datei hat jetzt 1000 Zeilen, eine IP pro Zeile. Jetzt übergeben wir das Ganze an die Firewall. Dieses Script geht jetzt davon aus, das keine anderen Firewallregeln aktiv sind. Bei einem Produktivsystem sollte man das natürlich an die eigenen Regeln anpassen
_input=/path/to/refspam.txt IPT=/sbin/iptables typeset -i COUNT=1 # Die if file not found [ ! -f "$_input" ] && { echo "$0: File $_input not found."; exit 1; } echo "Stopping firewall and allowing everyone..." iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT $IPT -N droplist echo "Adding IPs ..." while IFS= read -r ip do echo "iP $COUNT: $ip" $IPT -A droplist -i eth0 -s $ip -j DROP COUNT=$COUNT+1 done < "$_input" # Drop it $IPT -I INPUT -j droplist $IPT -I OUTPUT -j droplist $IPT -I FORWARD -j droplist
Alleine die ersten gesperrten 1000 IPs haben bei und den Spam-Traffic um ein gutes Drittel verringert. Die IP Liste lässt sich durch erneutes scannen beliebig erweitern.
Wir werden natürlich von Zeit zu Zeit mal sehen ob der Spuk vorbei ist und ggf. die Drop-Rules entfernen.