среда, 24 сентября 2008 г.

Ищем PHP спаммеров

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

например:

[ad#ad-5]

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


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 s120.valroot.com) (66.98.220.220)
by mta222.mail.re2.yahoo.com with SMTP; Sat, 20 Sep 2008 23:51:41 -0700
Received: from nobody by s120.valroot.com.net with local (Exim 4.69)
(envelope-from
)
id 1KhIm3-0000KS-16
for naecole@yahoo.com; Sun, 21 Sep 2008 01:50:27 -0500
To: naeco@yahoo.com
Subject: Winning Number (2-9-41-48-51) Bonus Ball (37).
From: MILLIONS
Reply-To: fastwaycouriers@yahoo.com.hk
MIME-Version: 1.0
Content-Type: text/plain
Content-Transfer-Encoding: 8bit
Message-Id:
Date: Sun, 21 Sep 2008 01:50:27 -0500
X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
X-AntiAbuse: Primary Hostname - s120.valroot.com
X-AntiAbuse: Original Domain - yahoo.com
X-AntiAbuse: Originator/Caller UID/GID - [99 99] / [47 12]
X-AntiAbuse: Sender Address Domain - s120.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/girls4sp/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 - / -

1 комментарий: