Web-Server

ID #1215 Über meinen Server werden Spam's verschickt!

Problem:

Die Symptome sind immer die Selben: langsam füllt sich die Mailqueue, der eigene Mailversand wird immer langsamer, wenn man seine root-Mails ließt, erhält man massenweiße Bounces von Mails, die man nie verschickt hat.

Erklärung:

Ein Spammer nutzt den Server zum Spamversand.
Meistens steckt ein auf dem Server eingeschleustes (PHP-)Script oder ein vorhandenes, lückenhaftes Mailscript dahinter.

Was ist zu tun?

...ist meißt die erste Frage. Die Antwort klingt erstmal leicht:
1. Mailserver abschalten.
2. Fehlerhaftes Script finden und entfernen.
3. Spammails aus der Queue entfernen.

Lösung zu 2.):

Da i.d.R. ein CGI-/PHP-Script dahinter steckt (egal ob eingeschleust oder ein Vorhandenes ausgenutzt) gibt es 2 mir sinnvolle/bekannte Möglichkeiten:

1. Möglichkeit:

Wir suchen im maillog nach dem Beginn einer solchen Spam-Welle und vergleichen die Zeiteinträge in den (vielen vielen) access_log-Dateien nach passenden Einträgen.

2. Möglichkeit:

Wir gestallten die mail-Routine so um, daß aus den verschickten Mails das Script erkennbar wird.

Wir erstellen einen sendmail-wrapper welches erstens einen extra Header in die Email schreibt und zweitens ein Logfile in /tmp/ erstellt.

#!/bin/sh
TODAY=`date -Iseconds`
echo $TODAY sendmail-wrapper called $USER from $PWD >>/tmp/mail.send
(echo X-Additional-Header: $(dirname $PWD);cat) | /usr/lib/sendmail-real "$@"

Anmerkung: Im Header setzten wir ganz bewust einen dirname ein weil sonst evtl. interne Geheimnisse aus geplaudert werden könnten.)

Danach muß der Wrapper noch in die Abarbeitung eingeführt werden:

chmod +x sendmail-wrapper
mv /usr/lib/sendmail /usr/lib/sendmail-real
mv sendmail-wrapper /usr/lib/sendmail

Was tun, wenn sich nix tut?
Ob es funktioniert ist leicht mit einem kleine PHP-Script, welches ein Email verschickt zu überprüfen. Falls das Logfile nicht geschrieben wird, einfach mal prüfen, ob PHP überhaupt Sendmail nutzt und welcher sendmail_path in phpinfo() angezeigt wird. Ggf. kommen auch andere Pfade in Frage. Dann handelt man damit einfach analog zu oben.

Warum reicht das?
a) Weil die meisten Installationen von PHP oder CGI-Scripten sendmail nutzten.
b) Weil auch bei ausgeschalteten Mailserver das Logfile geschrieben wird.

Wie mach ich das Rückgängig?
einfach die sendmail-real wieder statt den Wrapper einsetzen:

mv /usr/lib/sendmail-real /usr/lib/sendmail

Was kann man noch tun?

Grundsätzlich sollte man hin und wieder mal testen, ob man nicht einen offenen Relay-Server unterhält.

 

sozial Bookmarking
Bookmarken bei YIGG Bookmarken bei Mister-Wong Bookmarken bei Icio Bookmarken bei del.icio.us Bookmarken bei Technorati Bookmarken bei Furl Bookmarken bei Spurl Bookmarken bei Yahoo Bookmarken bei Google

vom 2007-03-07 17:00, zuletzt 2007-08-12 11:01     Artikel ausdrucken Artikel weiterempfehlen Als PDF-Datei anzeigen

Dieser Inhalt ist unter der Creative-Commons Lizenz lizensiert.

Probleme bitte im Server-Support-Forum diskutieren.

Rubriken zu diesem Artikel
überflüssig 1 2 3 4 5 wertvoll  
Durchschnittliche Bewertung:   5 von 5 (16 Bewertungen)

Artikel kommentieren

Kommentar von Tom (2007-04-13 08:26:04):
hallo.

super beitrag.
nur ist es mir als linux neuling nicht ganz klar, wie ich den sendmail-wrapper erstellen muss.

eine etwas detailliertere anleitung (mit konsolenbefehlen) wäre echt toll.

danke und gruss.

Kommentar von Jan (2008-12-18 09:46:30):
Hier nochmal fast das selbe.

http://kb.parallels.com/article_22_1711_en.html

Kommentar von Mario (2009-07-14 18:20:13):
Schade das es nicht für Anfänger geschrieben ist. Bei Versuchen krieg ich nur Fehlermeldungen. Einmal das die Direktories nicht existieren. Als ich dann die Ordner erstellen wollte stürzte meine konsole ab da der Ordner sendmail nicht erstellt werden konnte... usw......

Kommentar von Centry (2009-10-10 14:35:58):
Absolut klasse! Super Beitrag!
Vielen Dank für diese tolle Hilfe,
hat mir nicht nur auf die schnelle mein Kopfzerbrechen behoben sondern auch den Mail-Verkehr transparenter gemacht um Spam-anfällige Scripts schnell und unkompliziert aufzuspüren.
Vielen, vielen Dank!

Kommentar von Mathi (2009-11-12 00:30:12):
Das ist eine Super Sache. Schön wäre es, wenn man in dem logfile ( /tmp/mai.send ) noch die Empfänger der gesendeten mails ausgeben könnte. Dann würde man sofort erkennen welches Script dafür verantwortlich ist.

Kommentar von Nico (2012-03-21 16:21:34):
Hallo,
super Beitrag, hat mir geholfen die Lücke zu finden.
Aber eine Anmerkung habe ich noch.

im Log wird mir lediglich das Verzeichnis in welchem das Skript ausgeführt wird angezeigt. Nicht jedoch das Skript selbst.

Wie muss ich das Log erweitern, damit der Skriptname auch auftaucht.

VG
Nico

Kommentar von Detlef Oberfeld (2013-01-09 22:43:45):
Sehr guter Artikel,

und nicht das erste mal das mich ein Beitrag von dieser Seite weiter bringt.

Bitte weiter so!

Kommentar von Alexander Gehrer (2013-01-17 11:29:15):
Danke für den nützlichen Artikel. Eine kleine Anmerkung: Der Befehl mailq funktioniert nicht mehr weil mailq ein Link auf sendmail ist, man kann aber vorübergehend direkt auf sendmail-real verlinken.

Kommentar von Daniel (2013-02-23 14:50:30):
Seit PHP 5.3 kann in der php.ini mit mail.log eine Logdatei für mail() hinterlegt werden. Siehe: http://php.net/manual/de/mail.configuration.php

Kommentar von joerich (2014-07-14 13:18:54):
DANKE!!!! Gern würde ich den Angreifern auf die Mütze hauen. Aber leider ist das nicht möglich. Dank dieser Beschreibung habe ich aber ganz schnell das Script gefunden und konnte die Schwachstelle beheben. VIELEN DANK !!!

Kommentar von Seb (2016-02-06 17:25:02):
Ich habe das hier gerade gemacht und 2x geprüft aber ich bekomme nichts ins log. In der php.ini ist sendmail eingetragen, die mail wird per php script verschickt und kommt an, aber nichts im log.

Der Server ist definitiv kompromitiert und sendete spam, irgend eine Idee was noch sein könnte?