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 > $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&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&text=eMAIL-MENGENWARNUNG$ADDMESS+($DIFFMCOUNT+$HOSTNAME)" fi fi echo $CURMCOUNT > $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.
Kommentare
Kommentar hinterlassen Trackback