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

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

Andrey Matveev, Anton Karpov

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


/* Спамеров отправляем к spamd */

rdr pass on $ext_if inet proto tcp from <spamd> to port smtp \

-> 127.0.0.1 port spamd

rdr pass on $ext_if inet proto tcp from ! <spamd-white> to \

port smtp -> 127.0.0.1 port spamd

/* Spamd ломает работу SMTP AUTH, поэтому аутентификацию почтовых клиентов можно перенести на 26/tcp */

rdr pass on $ext_if inet proto tcp from any to port 26 \

-> 127.0.0.1 port smtp

/* Обеспечиваем доступ к нашему почтовому серверу */

block in

pass in log on $ext_if inet proto tcp from any to $ext_if \

port smtp flags S/SA keep state

Чрезмерную активность спамеров можно остановить, отслеживая максимальное количество подключений (будь внимателен, в данном случае spamd и MTA разнесены по разным серверам):

# vi /etc/pf.conf

ext_if = "fxp0"

smtp_server = "192.168.5.2"

table <spammers> persist

rdr on $ext_if inet proto tcp from any to $ext_if \

port smtp tag SPAM -> $smtp_server

block in log quick on $ext_if inet from <spammers>

pass in log on $ext_if tagged SPAM flags S/SA synproxy state \

(max-src-conn 100, max-src-conn-rate 10/60, \

overload <spammers> flush global)

[грустные нотки]

Справедливости ради нужно отметить, что реализация spamd далека от идеала. Использование china и korea сделано с одной целью: минимизировать объем расходуемой оперативной памяти. Ведь когда заносятся дополнительные записи в таблицу состояния соединений, ядро и spamd в динамическом режиме начинают выделять память для подключившего сервера. Кроме того, сама технология greylisting подразумевает некоторую первоначальную задержку для писем от неизвестных почтовых серверов. Мы можем указать нижнюю планку этой задержки опцией passtime, но в большинстве случаев нам придется полагаться на разумные настройки серверов отправителя. 10, 15 минут - почти всегда терпимая цифра, но если нам встретится хост, который возобновляет отправку спустя час-два, тут уже ничего не попишешь. Вот почему greylisting плохо работает на публичных почтовых системах, таких как Rambler, где специфичны постоянные подключения с множества различных серверов, но отлично проявляет себя на корпоративных почтовых серверах средних и не очень крупных фирм, у сотрудников которых налажена деловая переписка со сравнительно узким кругом партнеров.

[фрюшные поскриптумы]

Spamd портирован в FreeBSD, и его установку можно произвести штатным образом - из портов:

# cd /usr/ports/mail/spamd

# make install clean

Разумеется, для работы spamd во FreeBSD должна быть включена поддержка OpenBSD PF:

# vi /etc/rc.conf

pf_enable="YES"

pflog_enable="YES"

pfspamd_enable="YES"

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

Пара замечаний. Во-первых, для работы greylisting mode необходима поддержка файловой системы файловых дескрипторов, fdescfs:

# echo "fdescfs /dev/fd fdescfs rw 0 0" >> /etc/fstab

# echo 'fdescfs_load="YES"' >> /boot/loader.conf

# kldload fdescfs

# mount /dev/fd

Во-вторых, для того чтобы не путать OpenBSD spamd и перловый демон spamd, входящий в состав SpamAssassin, стартовый скрипт назван pfspamd.sh. Однако этого мало: система стартовых скриптов FreeBSD делает вывод о работе процесса по выводу команды ps. И, если в системе запущен spamd от SpamAssassin, pfspamd.sh будет отрабатывать некорректно. Этот вопрос сосуществования двух spamd в системе пока не решен, и потому нам придется применить маленький хак:

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