Из личного блога

Ищем PHP спаммеров
Сентябрь 24, 2008, admin

http://valroot.com/

Вообще, апач и пхп не в состоянии находить спаммеров своими штатными средствами. А спам может быть отправлен через PHP функцию mail(). И в заголовках письма не будет отображено откуда, кто отправил.

например:

(ИП адреса и домены изменены)

Return-Path:X-Originating-IP: [66.98.220.220]Authentication-Results: mta222.mail.re2.yahoo.com from=million.com; domainkeys=neutral (no sig)Received: from 66.98.220.220 (EHLO valroot.com) (66.98.220.220)by mta222.mail.re2.yahoo.com with SMTP; Sat, 20 Sep 2008 23:51:41 -0700Received: from nobody by valroot.com.net with local (Exim 4.69)(envelope-from )id 1KhIm3-0000KS-16for naecole@yahoo.com; Sun, 21 Sep 2008 01:50:27 -0500To: naeco@yahoo.comSubject: Winning Number (2-9-41-48-51) Bonus Ball (37).From: MILLIONSReply-To: fastwaycouriers@yahoo.com.hkMIME-Version: 1.0Content-Type: text/plainContent-Transfer-Encoding: 8bitMessage-Id:Date: Sun, 21 Sep 2008 01:50:27 -0500X-AntiAbuse: This header was added to track abuse, please include it with any abuse reportX-AntiAbuse: Primary Hostname — valroot.comX-AntiAbuse: Original Domain — yahoo.comX-AntiAbuse: Originator/Caller UID/GID — [99 99] / [47 12]X-AntiAbuse: Sender Address Domain — valroot.com

Content-Length: 560

MIME element (text/plain)Be notified by our organization MILLIONS

http://www.millions.com/numbers/

That your email id has just won you a lump sum pay out of $250,000.00.

Как видно из хедеров жалобы, мы не видим домена либо логина спаммера

Мониторинг файла exim_mainlog также ничем не помогает, мы видим, что письмо было отправлено, и видим кому было отправлено…но самое главное, мы НЕ видим кто это отправил…

Если Вы откроете свой файл php.ini,найти его можно

locate php.ini

то мы увидим, что почтовая программа стоит: /usr/sbin/sendmail
99.99% скриптов выполняющие функцию mail() в PHP используют /usr/sbin/sendmail для отправки сообщений.

Итак, как же найти спаммера?

Требования: apache 1.3x, 2.x. PHP 4/5, Exim. Может работает и в PHP 6, честно, не знаю. Тестировал на php 4/5, с панелью управления cpanel/whm на системе Red Hat Enterprise.

Шаг №1.
Заходим под рутом

Шаг №2Останавливаем exim:

service exim stop

Шаг №3Переименовуем /usr/sbin/sendmail в /usr/sbin/sendmail.hidden

mv /usr/sbin/sendmail /usr/sbin/sendmail.hidden

Шаг №4Делаем шлюзСоздаем новый файл /usr/sbin/sendmail

vi /usr/sbin/sendmail

Вставляем следующее:

#!/usr/local/bin/perl

# use strict;use Env;my $date = `date`;chomp $date;open (INFO, «>>/var/log/spam_log») || die «Failed to open file ::$!»;my $uid = $>;my @info = getpwuid($uid);if($REMOTE_ADDR) {print INFO «$date — $REMOTE_ADDR ran $SCRIPT_NAME at $SERVER_NAME n»;}

else {

print INFO «$date — $PWD — @infon»;

}my $mailprog = ‘/usr/sbin/sendmail.hidden’;foreach (@ARGV) {$arg=»$arg» . » $_»;

}

open (MAIL,»|$mailprog $arg») || die «cannot open $mailprog: $!n»;while ( ) {print MAIL;}close (INFO);

close (MAIL);

Сохраняем и выходим (для vi — ESC, :wq)

Шаг №5Даем права на запуск для /usr/sbin/sendmail:

chmod a+x /usr/sbin/sendmail

Шаг №6

Создаем новый файл лога, для мониторинга сообщений от Nobody:
touch /var/log/spam_log

И разрешаем запись в него:
chmod 0777 /var/log/spam_log

Шаг №7Запускаем Exim

/etc/init.d/exim start

Теперь мы можем мониторить все сообщения от nobody, все эти логи находятся здесь: /var/log/spam_log
tail -f /var/log/spam_log

Также можно выставить права только на чтение и выполнения для /usr/sbin/sendmail

довольно таки полезная штука. Делается это командой:
chattr +i /usr/sbin/sendmail

Вернуть обратно:
chattr -i /usr/sbin/sendmail

В логах будем видеть примерно следующее:
Fri Sep 19 00:57:02 EDT 2008 — / — Fri Sep 19 00:58:02 EDT 2008 — / — Fri Sep 19 00:59:02 EDT 2008 — / — Fri Sep 19 01:00:02 EDT 2008 — / — Fri Sep 19 01:01:02 EDT 2008 — / — Fri Sep 19 01:02:02 EDT 2008 — / — Fri Sep 19 01:03:02 EDT 2008 — / — Fri Sep 19 01:04:02 EDT 2008 — / — Fri Sep 19 01:04:18 EDT 2008 — /home/girls/public_html — Fri Sep 19 01:05:02 EDT 2008 — / — Fri Sep 19 01:05:16 EDT 2008 — — Fri Sep 19 01:06:03 EDT 2008 — / — Fri Sep 19 01:07:02 EDT 2008 — / — Fri Sep 19 01:08:02 EDT 2008 — / —