Дек 19 2008

Установка и настройка spamd

Spamd — антиспам фильтр от разработчиков OpenBSD. Команда OpenBSD, разрабатывает огромное количество абсолютно уникальных и необходимых вещей. Их руки дошли до реализации своего SMTP сервера, и конечно не могли обойти своим вниманием проблему спама. spamd, работает при помощи файерволла pf, использует в своей работе списки ip адресов спамеров, а по умолчанию для всех адресов, которых нет в списках, реализует схему серого списка (greylist).

Принцип работы серого списка заключается в том, что спамеры, как правило не придерживаются стандартов и не реализуют почтовые очереди в своем софте. То есть, схема работы серого списка такая, удаленный сервер(или спамер) соединяется с вашим сервером, начинает SMTP диалог, сервер собирает всю нужную информацию, а это адрес отправителя, адрес получателя и ip адрес и помещает их в свою базу. После чего отвечает 450 Try later, то есть, если отправлял письмо нормальный почтовый сервер, то он повторит отправку этого письма через примерно полчаса и отправка уже пройдет нормально. Но если это был спамер у которого нет очереди отправки, то письмо будет утеряно. Спамерам же не выгодно создавать очереди и вообще заниматься повторными отправками. Им нужно максимально быстро выдуть миллионы писем, и пара сотен не отправленных писем значения для них не имеют. А для вас это может быть огромным выигрышем. Если же, отправка письма из очереди будет повторяться чаще чем раз в 15 минут(примерно), письмо так и не будет принято, спамер всегда будет получать 450 Try later. Та же ситуация касается тех, кто ведет SMTP диалог, не дожидаясь ответов на команды от сервера.

Теперь от теории перейдем к практике. В первую очередь у вас должен быть pf и pflog, если это условие выполняется, переходим к установке, если нет, то внесите в конфиг ядра такие строки:

device          pf
device          pflog

пересоберите ядро и перезагрузитесь.
Устанавливаем spamd из портов:

cd /usr/ports/mail/spamd
make install clean

Никаких дополнительных диалогов настройки нет.
Для нормальной работы нужно немного поправить стандартный файл настроек, у меня он выглядит так:

# As of November 2004, a place to search for black lists is
#     http://spamlinks.net/filter-bl.htm
 
all:\
        :uatraps:nixspam:china:korea:
 
# University of Alberta greytrap hits
# Addresses stay in it for 24 hours from time they misbehave.
uatraps:\
        :black:\
        :msg="Your address %A has sent mail to a ualberta.ca spamtrap\n\
        within the last 24 hours":\
        :method=http:\
        :file=www.openbsd.org/spamd/traplist.gz
 
# Nixspam recent sources list.
# Mirrored from http://www.heise.de/ix/nixspam
nixspam:\
        :black:\
        :msg="Your address %A is in the nixspam list\n\
        See http://www.heise.de/ix/nixspam/dnsbl_en/ for details":\
        :method=http:\
        :file=www.openbsd.org/spamd/nixspam.gz
 
# Mirrored from http://www.okean.com/chinacidr.txt
china:\
        :black:\
        :msg="SPAM. Your address %A appears to be from China\n\
        See http://www.okean.com/asianspamblocks.html for more details":\
        :method=http:\
        :file=www.openbsd.org/spamd/chinacidr.txt.gz:
 
# Mirrored from http://www.okean.com/koreacidr.txt
korea:\
        :black:\
        :msg="SPAM. Your address %A appears to be from Korea\n\
        See http://www.okean.com/asianspamblocks.html for more details":\
        :method=http:\
        :file=www.openbsd.org/spamd/koreacidr.txt.gz:
 
# Whitelists are done like this, and must be added to "all" after each
# blacklist from which you want the addresses in the whitelist removed.
#
whitelist:\
        :white:\
        :method=file:\
        :file=/var/db/whitelist.txt:
 
blacklist:\
        :black:\
        :method=file:\
        :file=/var/db/blacklist.txt:

В начале файла перечисленный стандартные для spamd списки адресов спамеров, в конце я добавил whitelist и blacklist. Whitelist — отменяет действие стандартных черных списков, то есть почта от адресов перечисленные в файле /var/db/whitelist.txt, даже если они присутствуют в стандартных черных списках, все равно будут иметь возможность отправить вам почту. Последний blacklist отменяет действие whitelist для адресов перечисленных в нем. То есть — это ваш личный черный список.
После того как файл настроек сохранен, перейдем к следующему этапу, поправим файерволл. Необходимо внести такие строки в файл /etc/pf.conf:

table <spamd-white> persist

и чуть ниже, там где присутствуют правила ната:

no rdr inet proto tcp from <spamd-white> to any port smtp
rdr pass on $ext_if inet proto tcp from any to any port smtp -> 127.0.0.1 port spamd

Проверяем новые настройки pf:

pfctl -nf /etc/pf.conf

если не видно всяких ругательств на синтаксис, перезапускаем файерволл:

pfctl -f /etc/pf.conf

Зачем нужны и что делают эти правила? Они отправляют всех кто пыитается соединиться с почтовым сервером, и ip адрес которых не присутствует в таблице файерволл spamd-white, на порт spamd, а он делает вид что он почтовый сервер и собирает всю информацию. В таблицу spamd-white адреса добавляет spamd, адреса тех, кто нормально придерживается правил отправки почты.
Переходим к следующему этапу, построим специальный интерфейс взаимодействия, из командной строки выполним:

mount_fdescfs fdescfs /dev/fd/

и пропишем строку в /etc/fstab, что бы после перезагрузки, система смогла нормально работать:

fdescfs                 /dev/fd         fdescfs                 rw 0 0

Добавим логирование действий spamd, в файл /etc/syslog.conf, в самом конце, внесите такие строки:

!spamd
*.*                                             /var/log/spamd.log

и хапните сислог:

killall -HUP syslogd

А теперь можно настроить разрешение на старт spamd, внесем в /etc/rc.conf такие строки:

obspamd_enable="YES"
obspamlogd_enable="YES"

Можно запускать spamd:

/usr/local/etc/rc.d/obspamd start
/usr/local/etc/rc.d/obspamlogd start

Рекомендую понаблюдать немного за действиями spamd:

tail -f /var/log/spamd.log

если все идет нормально, настройка окончена.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
  • By Maxim, 19.08.2009 @ 00:51

    А не кажется ли вас что правильнее будет дописать в эту строку
    all:\
    :uatraps:nixspam:china:korea:whitelist:blacklist:
    для того что бы работали ручные черные
    белые списки

    mount_fdescfs — в FreeBSD последних версий этой команды нет. Надо в ручную указывать тип FS.

Other Links to this Post


Украинская Баннерная Сеть