Manchmal passiert es, dass eine Webseite- oder das Passwort eines Mailserver-Benutzers gehackt wird.
In der Folge steigt die mail queue auf dem Server rasant an.
In einem solchen Fall ist sehr rasches eingreifen des Administrators gefragt, denn nicht selten sendet der Server so innert wenigen Stunden Zehntausende Spam-Mails raus und die IP-Adresse des Servers landet auf diversen blacklisten, aus die man zum Teil nur sehr schwierig wieder herauskommt.
Zumindest die Mails, welche noch in der Mailqueue sind, kann man aber so entfernen, bevor dieser ebenfalls herausgeschickt werden.
Das oberste Gebot in einem solchen Fall ist es: Zuerst die Verbindung des Mailservers nach draussen kappen: Entweder durch eine Firewall-Regel, welche den Port 25 ausgehend schliesst, oder den Mailserver-Dienst stoppen.
Nun kann man nach dem Spammer in der mailq suchen:
mailq nach Sendern auflisten
mailq | awk '/^[0-9A-F]/ {print $NF}' | sort | uniq -c | sort -n
Output:
[root@webserver ~]# mailq | awk '/^[0-9A-F]/ {print $NF}' | sort | uniq -c | sort -n 1 agnes.o@example.org 1 aiden.h@example.org 1 alberta.f@example.org 1 alexandra.i@example.org 1 alyssa.w@example.org 1 amanda.j@example.org 1 andrea.d@example.org 1 andymico@example.net 1 angelica.c@example.org 1 angelina.k@example.org
Wir sehen hier, dass die meisten Mails von @example.org kommen und diese Seite wahrscheinlich gehackt wurde.
Als nächstes sucht man im maillog (meist: /var/log/maillog) nach diesen Absendern und notiert sch die Message-ID.
Diese kann man sich dann mit postcat anzeiegn lassen:
Mails in mailq anzeigen
postcat -q
Endeckt man dabei, dass die Mail von einem Web-Script (meist PHP) gesendet worden ist, ist i.d.R. die Webseite hacked:
Output:
To: lynchboogy@example.com Subject: Looking for a man with big dick X-PHP-Script: example.org/assets/snippets/ajaxSearch/configs/abepvzwj.php for 66.147.244.91, 127.0.0.1 X-PHP-Originating-Script: 5445:abepvzwj.php(1189) : runtime-created function(1) : eval()'d code(1) : eval()'d code Date: Fri, 22 Sep 2017 07:24:09 +0200 From: "Alberta F." <alberta.f@example.org> </alberta.f@example.org>
Header, welche auf ein PHP-Script hinweisen: X-PHP-Script
/ X-PHP-Originating-Script
Man kann nach diesen auch gezielt nach gehackten PHP-Scripts suchen in der mailq:
for i in `mailq | grep Fri | cut -d" " -f 1`; do postcat -q $i | grep X-PHP; done | sort | uniq -c
Output:
for i in `mailq | grep Fri | cut -d" " -f 1`; do postcat -q $i | grep X-PHP; done | sort | uniq -c 1 X-PHP-Script: example.org/assets/snippets/ajaxSearch/configs/abepvzwj.php for 10.1.0.54, 178.210.90.90, 127.0.0.1 4 X-PHP-Script: example.org/assets/snippets/ajaxSearch/configs/abepvzwj.php for 10.1.205.116, 178.210.90.90, 127.0.0.1 2 X-PHP-Script: example.org/assets/snippets/ajaxSearch/configs/abepvzwj.php for 10.1.38.183, 178.210.90.90, 127.0.0.1 8 X-PHP-Script: example.org/assets/snippets/ajaxSearch/configs/abepvzwj.php for 10.1.54.4, 178.210.90.90, 127.0.0.1 1 X-PHP-Script: example.org/assets/snippets/ajaxSearch/configs/abepvzwj.php for 10.1.71.82, 178.210.90.90, 127.0.0.1 [...]
Dann werden die Mails der betreffenden Domain in der mailq gelöscht:
mailq nach Domain löschen
mailq | awk '/^[0-9A-F].*@example.org/ {print $1}' | postsuper -d -
Hinweis: „example.org“ ersetzen mit der entsprechenden Domain.
Will man nur Mails von einem bestimmten Absender an eine bestimmte Adresse löschen, geht das folgendermassen:
mailq|grep -B2 recipient@example.org | awk '/^[0-9A-F].*MAILER-DAEMON/ {print $1}' | postsuper -d
Oder wenn man einfach ALLE Mails in der Queue löschen will:
postsuper -d ALL
Als nächstes kann man sich auf den Webserver der gehackten Domain verbinden und das DOCUMENT_ROOT (i.d.R. public_html) umbenennen und dann „säubern“, bevor die Webseite wieder online gestellt wird.
Herausfinden welche IP eine Domain hat:
[root@webserver ~]# host example.org example.org has address 93.184.216.34