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) <code>access_logcode>-Dateien nach passenden Einträgen.
2. Möglichkeit:
Wir gestallten die <code>mailcode>-Routine so um, daß aus den verschickten Mails das Script erkennbar wird.
Wir erstellen einen <code>sendmail-wrappercode> welches erstens einen extra Header in die Email schreibt und zweitens ein Logfile in <code>/tmp/code> 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 <code>dirnamecode> 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 <code>sendmail_pathcode> in <code>phpinfo()code> 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 <code>sendmailcode> nutzten.
b) Weil auch bei ausgeschalteten Mailserver das Logfile geschrieben wird.
Wie mach ich das Rückgängig?
einfach die <code>sendmail-realcode> 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.