Referrer Spam

Apache-LogoIrgendwie 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.

Manfred Brandstetter

Seit 20 Jahren selbständiger IT Berater in Österreich. Im Moment kümmere ich mich am liebsten um Servervirtualisierungen auf Debian Basis und Webprogrammierung nach neuestem Technologiestand.

More Posts - Website

Follow Me:
TwitterFacebookGoogle Plus

You may also like...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.