Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #85, ЯНВАРЬ 2006 г.

Spamd - секретный контрудар

Andrey Matveev, Anton Karpov

Хакер, номер #085, стр. 085-106-3


Задача спамера состоит в том, чтобы в кратчайшие сроки отправить максимально возможное количество рекламных писем. При этом успешность отправки каждого сообщения не отслеживается. Одна из главных причин - в мире электронной почты надежность доставки исходящей корреспонденции дорогого стоит, а именно: наличия специальных инжекторов, выполнения дополнительных ресурсоемких системных вызовов, к примеру, fsync(2) и write(2), и операций с очередью /var/spool/mqueue (либо миграции очередей). Так что работу спамеров можно охарактеризовать как «отправил и забыл» (fire and forget). Мы на этом и сыграем.

Суть идеи greylisting'а предельно проста: корректно сконфигурированный почтовый сервер отправителя, получив определенный ответ от сервера получателя, обязан повторить попытку доставки письма через некоторый промежуток времени (обычно 5, 15, 25, 30 или 60 минут). Зная это, в качестве ответа на соединение от неизвестного почтового сервера с помощью spamd мы будем возвращать не стандартное SMTP-сообщение OK или Rejected, а временную ошибку с кодом 450, 451 или 550. Когда почтовый сервер отправителя повторит доставку письма (а по RFC он обязан это сделать), мы примем к сведению, что данный сервер уже пытался отправить нам письмо N минут назад, а значит, он не спамер. И тогда мы примем корреспонденцию.

Некоторые SMTP-коды ошибок, после которых отправитель обязан повторить попытку отправки письма:

450 Requested mail action not taken: mailbox unavailable (E.g., mailbox busy)

451 Requested action aborted: local error in processing

550 Requested action not taken: mailbox unavailable (E.g., mailbox not found, no access)

# tail /var/log/maillog

Dec 1 01:55:53 toxahost sm-mta[21632]: j9F9jgYV021632: to=<andrushock@domain1.ru>, delay=00:00:11, xdelay=00:00:11, mailer=esmtp, pri=30808, relay=mail.domain1.ru. [81.211.11.22], dsn=4.3.0, stat=Deferred: 451 Temporary failure, please try again later.

На приведенном куске лога видно, что сервер mail.domain1.ru отверг наше письмо адресату andrushock@domain1.ru. Если бы мы заглянули в /var/log/daemon этого сервера, мы бы увидели результат работы greylisting:

# tail /var/log/daemon

Dec 1 01:56:19 mail spamd[3135]: 62.16.22.33: connected (1/0)

Dec 1 01:56:30 mail spamd[3135]: (GREY) 62.16.22.33: <toxa@domain2.ru> -> <andrushock@domain1.ru>

Dec 1 01:56:30 mail spamd[3135]: 62.16.22.33: disconnected after 11 seconds.

Затем, через некоторое время, мы увидим, что адрес сервера отправителя - 62.16.22.33 - занесен в «белый список», и при попытке повторной отправки письмо уйдет немедленно, без каких-либо проблем:

# pfctl -t spamd-white -T show | grep 62.16.22.33

62.16.22.33

Чтобы получить все эти вкусности, включим spamd в конфигурационном файле стартового сценария. За счет указанных ниже аргументов мы сможем произвести более подробное журналирование событий ('-v'), подменить приветственный баннер на «Postfix» ('-n') и перевести демона в режим greylisting (spamd_grey=YES аналог '-g'):

Назад на стр. 085-106-2  Содержание  Вперед на стр. 085-106-4