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

Ужас, летящий на крыльях SMTP

Сергей Супрунов

Хакер, номер #100, стр. 100-154-2


Второй недостаток заключается в том, что в условиях широкого использования «одноразовых» зомби-сетей такие списки становятся не слишком полезны. Поэтому эволюция пошла дальше и стали появляться другие методы.

Серые от злости

Интересно, а как спамеры будут реагировать на ошибки доставки? Как показывает практика, из них мало кто утруждает себя следованием стандартам, получив временную ошибку 4xx. А вот нормальные серверы честно перемещают письмо в очередь и повторяют попытку, спустя несколько минут. На этом и основана идея использования серых списков - greylisting.

Одна из простейших реализаций для Sendmail - milter-greylist. Устанавливается стандартно из портов, в sendmail.mc добавляется единственная строка:

INPUT_MAIL_FILTER(`miltergreylist', `S=local:/var/milter-greylist/milter-greylist.sock, F=, T=S:4m;R:4m')dnl

Тонкую настройку (например, выставить тайм-ауты, занести некоторые серверы в белый список и т.д.) можно выполнить в /usr/local/etc/mail/greylist.conf.

Более функциональное средство реализации грейлистинга (работает в OpenBSD и FreeBSD) - spamd. Этот фильтр полагается в своей работе на файрвол pf. Его принцип действия заключается в следующем: pf заворачивает соединения, адресованные на 25-й порт, на другой, прослушиваемый демоном spamd (обычно 8025). Если адрес отправителя фигурирует в черном списке (на сей раз это статический файл, который нужно периодически обновлять), то для него будет выполняться стандартный SMTP-диалог, но с задержкой в одну секунду после каждого символа, а, дойдя до этапа DATA, спамер получит ошибку 550 или 450 (зависит от ключей запуска демона). Для неизвестных адресатов реализуется стандартная процедура грейлистинга, то есть отклонение с ошибкой 451 «Сервис временно недоступен».

В FreeBSD установка spamd из дерева портов выполняется тривиально:

# cd /usr/ports/mail/spamd

# make install

Настройка сводится к добавлению в правила pf трех строк:

table <spamd-white> persist

no rdr inet proto tcp from <spamd-white> to any port 25

rdr pass inet proto tcp from any to any port 25 -> 100.100.100.100 port 8025

В таблицу <spamd-white> будут попадать адреса, подтвердившие свою приверженность протоколу (этим они заслужили право соединяться непосредственно с 25-м портом). Остальные будут отданы на растерзание spamd (здесь 100.100.100.100 - адрес, на котором работает демон, в идеале он должен быть 127.0.0.1). Кроме того, не забудь проверить, что в /etc/rc.conf обеспечивается автозапуск демона и поддержка pf:

pf_enable="YES"

pf_flags=""

pflog_enable="YES"

pfspamd_enable="YES"

pfspamd_flags="-g -G 25:4:864 -v"

Последней строкой задаем нужные параметры работы (грейлистинг, тайм-ауты и подробный вывод). Замечу, что spamd можно использовать и исключительно в режиме черных списков (без ключей '-g' и '-G').

Назад на стр. 100-154-1  Содержание  Вперед на стр. 100-154-3