Leslie Schnee – Blog

Frankfurt und Umgebung

Durchsuche Beiträge mit Schlagwörtern qmail-remove

Die automatische Serverüberwachung bei PS-Webhosting hat heute Vormittag den Stopp des E-Mailversandes von sogenannten Formular-Mails gemeldet, auf Grund sehr vieler Einlieferungen in kurzer Zeit - ein Indiz für Spam über eine gehackte Kundenseite.

Ein Login auf unserem Mailrelay-Server, auf dem seit Urzeiten noch qmail läuft, offenbart das Ausmaß der Spamattacke:

turbocalculon:/home/ls# qmailctl stat
/service/qmail-send: down 677 seconds, normally up
/service/qmail-send/log: up (pid 2351) 10362937 seconds
/service/qmail-smtpd: down 77 seconds, normally up
/service/qmail-smtpd/log: up (pid 2349) 10362937 seconds
messages in queue: 212969
messages in queue but not yet preprocessed: 7813

Über zweihunderttausend E-Mails wurden in kurzer Zeit eingeliefert. Beim Betrachten einer dieser Mails in der Queue konnte man schnell den Verursacher ausfindig machen; das von uns auf den Webhosting-Servern eingesetzte Programm nullmailer, welches die durch Kontaktformulare, Gästebücher und Onlineshop-Bestellbestätigungen generierten E-Mails an das o.g. Mailrelay weiterleitet, schreibt die User-ID jeder E-Mail in den Header:

Received: (qmail 18107 invoked from network); 2 Feb 2010 12:13:44 -0000
Received: from unknown (HELO turbolrrr.planet-school.de.planet-school.de) (194.116.187.71)
by 0 with SMTP; 2 Feb 2010 12:13:44 -0000
Received: (nullmailer pid 12051 invoked by uid 1411);
Tue, 02 Feb 2010 02:51:53 -0000
To: pmriosaude@slavenet.com.br
Subject: Segurana On-line: Seu dispositivo de segurana expirou.
MIME-Version: 1.0
Content-type: text/html; charset=iso-8859-1
From: Ita Bankline <clientes.bankline@online.com.br>
Date: Tue, 02 Feb 2010 03:51:53 +0100
Message-Id: <1265079113.076354.12050.nullmailer@turbolrrr.planet-school.de.planet-school.de>

Durch die genannte User-ID 1411 kann man anhand der /etc/passwd Datei des ebenfalls genannten Webservers den Kunden ermitteln. In diesem Fall war (wie so oft) eine veraltete Installation des Content-Management-Systems Joomla für den Spamversand verantwortlich. Die "Hacker", hier offenbar aus Brasilien, suchen gezielt über Google nach Joomla-Installationen und versuchen durch Ausnutzung bekannter Sicherheitslücken Code einzuschleusen, um damit dann Spam/Phishing-Mails im großen Rahmen zu versenden. Warum nutzen die Spammer keine eigenen Server? Diese sind in der Regel sehr schnell geblacklistet und damit für die allermeisten Mailserver nicht mehr vertrauenswürdig. Man ist daher immer auf der Suche nach "sauberen" Maschinen.

Das Problem war schnell gelöst, mittels qmail-remove sucht man nach einem eindeutigen Begriff, der in jeder der Spammails vorkommt (und in keiner normalen E-Mail, die sich ebenfalls in der Queue befindet, vorkommen sollte!):

qmail-remove -p "expirou" -d

Vorher qmail anhalten (qmailctl stop).

Vorher wurde noch der nullmailer auf dem Webhosting-Server angehalten (/etc/init.d/nullmailer stop) und die Queue in /var/spool/nullmailer/queue ebenfalls bereinigt (durch einfaches löschen der Maildateien mit der User-ID des Kunden).

Leider kommt es auf unserem Mailrelay-Server sehr oft vor, dass beispielsweise über gehackte Formulare, Content-Management-Systeme oder sonstige PHP-Scripte Unmengen an Spam versendet werden.

Wir haben bei PS-Webhosting einen eigenen Mailserver, der von den einzelnen Webhosting-Servern die (Formular-)Mails bekommt und dann versendet. Die einzelnen Hosting-Server leiten also Mails, die zum Beispiel mit der mail Funktion von PHP verschickt werden (Anmeldebestätigungen von Foren, Mails aus Kontaktformularen) an diesen Server weiter. Üblicherweise werden so höchstens einige hundert Mails pro Minute versendet. Sind es einige Tausend, ist das erstmal verdächtig und deutet auf Spam hin[*]. Hierfür haben wir ein Script geschrieben, auf dessen Erläuterung ich jetzt mal verzichte. Es sollte aber für den Einen oder Anderen durchaus hilfreich sein, und wenn es nur als Denkanstoß dient:

#!/bin/bash
MSGSENT=0
LASTMCOUNTFILE="/var/run/mail.count"
let CURMCOUNT=`cat /var/log/qmail/current  | grep 'accepted' | grep -v '194.116.187.' | wc -l`+`qmailctl queue | head -1 | tr -d ' ' | cut -d: -f2`
if [ ! -f $LASTMCOUNTFILE ]
then
echo $CURMCOUNT &gt; $LASTMCOUNTFILE
exit 1
fi
LASTMCOUNT=`head -1 $LASTMCOUNTFILE`
let DIFFMCOUNT=$CURMCOUNT-$LASTMCOUNT
if [ $DIFFMCOUNT -ge 1200 ]
then
if  [ $DIFFMCOUNT -ge 2600 ]
then
svc -d /service/qmail-send
ADDMESS="+-DELIVERSTOP-"
wget -O/dev/null -q "http://xxx.xxxxxxx.de/alertscript?from=Abuse&amp;text=eMAIL-MENGENWARNUNG$ADDMESS+($DIFFMCOUNT+$HOSTNAME)"
MSGSENT=1
fi
if [ $MSGSENT -eq 0 -a `dig @194.116.186.1 +noall +answer txt mailcount-$HOSTNAME.1800s.timer.ps-server.net | tr -s '\t' ' ' | cut -d' ' -f2` -ge 1780 ]
then
wait 1
#wget -O/dev/null -q "http://xxx.xxxxxxx.de/alertscript?from=Abuse&amp;text=eMAIL-MENGENWARNUNG$ADDMESS+($DIFFMCOUNT+$HOSTNAME)"
fi
fi
echo $CURMCOUNT &gt; $LASTMCOUNTFILE

"http://xxx.xxxxxxx.de/alertscript" ist dabei ein externes Programm, welches uns die Meldung, dass der Mailserver angehalten wurde, auf unsere Pager schickt. Das Programm hat also erkannt, dass im Zeitraum X mehr als üblich E-Mails verschickt wurden und den Mailversand mit

svc -d /service/qmail-send

angehalten. Eingehende Mails werden aber weiter angenommen und landen in der Queue.

Die Queue und die einzelnen Mails darin finden wir in einer Standardinstallation unter /var/qmail/queue/mess. In diesem Ordner finden sich verschiedene Unterordner, in denen sich die Mails als Textdatei befinden. Wir schauen uns eine der Mails mit less an und versuchen nun zunächst die Ursache ausfindig zu machen. Praktischerweise werden bei uns bei Formular-Mails die UID des Kunden und der Server immer in den Mailheader geschrieben, sodass man anhand der Server-Logfiles die Ursache recht schnell ermitteln kann.

Anschließend stoppen wir auf dem Mailserver Qmail komplett (wichtig!!) mit

qmailctl stop

damit die Queue beim Löschen nicht durcheinander kommt. Falls noch nicht vorhanden, installieren wir mit apt-get unter Debian-Linux qmail-remove und rufen es wie folgt auf der Konsole auf:

qmail-remove -p Suchbegriff

(Suchbegriff aus der Spam-Mail, also z.B. Viagra, Porn, Paypal..)

Dies listet erst einmal alle Treffer auf. Anschließend löschen wir endgültig mit:

qmail-remove -p Suchbegriff -r

-r verschiebt die E-Mails dann in einen Ordner /var/qmail/queue/yanked. Bei älteren Systemen dauert das mit dem Verschieben aber länger, deshalb kann man auch -d auswählen, dann werden die Spam-Mails direkt gelöscht.

Viel Erfolg!

[*] Das größte Problem bei dem oben genannten Spam-Erkennungs-Script liegt darin, dass zum Beispiel legale größere Newsletter von Kunden auch als Spam erkannt werden und der Mailserver anhält. Für diese vertrauenswürdigen Kunden haben wir wiederum ein eigenes System zum Versand der Newsletter eingerichtet.