Главная > Программы > SpamAssassin Борьба со спамом. SpamAssassin+Sendmail
SpamAssassin - одна из самых популярных систем антиспама. Работает по оценочному принципу письма - начисляет баллы по различным критериям и если сумма баллов превысила установленный порог, то письмо помечается как спам. В статье будет показана базовая настройка SpamAssassin с включением двух дополнительных плагинов к нему Razor и DCC, а также состыковка SpamAssassin с Sendmail сервером. Установка и настройка дополнительных плагинов Razor и DCCRazor и DCC являются дополнительными методами проверки на спам, помимо встроенных алгоритмов SpamAssassin. Т.к. эти два плагина входят в настройку SpamAssassin, то сначала установим и настроим их. RazorRazor является сигнатурным анализатором, принцип действия которого заключается в том, что программа рассчитывает сигнатуру письма и сверяет ее с базой сигнатур хранящихся на серверах интернет. Если соответствие находится, то анализируемое письмо считается спамом и этому письму начисляются дополнительные баллы. # sudo aptitude install razor Для настройки пакета как клиента достаточно создать рабочую домашнюю папку (имейте ввиду, что если вы планируете запускать spamassassin из-под определенного пользователя, то дайте права на чтение этому пользователю в домашнюю папку razer) # sudo razor-admin -create -home=/path/to/home/.razor Если вы собираетесь участвовать в передаче сигнатур на сервера razor и помогать в определении спама, то потребуется регистрация # sudo razor-admin -register -user=user@domain.com -home=/path/to/home/.razor Команды передачи сигнатур читаем в документации к проекту. DCCDCC (Distributed checksum clearing house) так же является сигнатурным анализатором и метод его работы очень напоминает работу razor, но немного отличается логикой работы. Для каждого входящего сообщения определяется контрольная сумма и отправляется на сервер, где сверяется с базой данных. По контрольной сумме оценивается показатель - частота сообщений с этой контрольной суммой у других получателей системы DCC. Сообщения с высоким количеством таких же контрольных сумм будут отнесены к спаму. # ./configure $make $sudo make install Для проверки корректности установки нужно запустить команду # cdcc info которая выдаст список доступных DCC серверов. # sudo cdcc "load /var/dcc/map.txt" Так как у нас нет локального сервера я рекомендую сразу удалить из файла map.txt строки "@,-" или другие упоминания localhost. Настройка SpamAssassinУстановка в Ubuntu (Debian) # sudo aptitude install spamassassin Конфигурационные файлы SpamAssassin обычно лежат в каталогах /etc/spamassassin или в /usr/local/etc/mail/spamassassin. В системе Ubuntu был сделан симлинк на папку spamassassin в каталоге /etc/mail, так что я буду исходить от этого пути. # Доверенные сети или отдельные машины
trusted_networks 192.168.0.1
# белые списки доменов или адресов. Если письмо пришло с этого адреса,
# то ему начисляется -100 балов за белый список, помимо остальных проверок.
# Таким образом письмо гарантированно не попадет в спам.
whitelist_from *@*.subscribe.ru
whitelist_from *@subscribe.ru
whitelist_from user@domen.com
# Если письмо определилось как спам, то к теме письма добавляем
# метку спама и оценку письма в баллах. По этой метке можно в
# дальнейшем отсеивать письма в почтовой программе как нежелательные
rewrite_header subject ****[SPAM(_SCORE_)]****
# Указываем количество баллов, при котором сообщение считается спамом
# По умолчанию 5, у меня на сервере 7.9
required_score 5
# Используем алгоритм bayes
use_bayes 1
# Путь к базе bayes и права на файл
bayes_path /etc/mail/spamassassin/bayes
bayes_file_mode 0666
# Заносим в журнал обучение bayes. (По умолчанию отключено)
bayes_learn_to_journal 1
# Минимальное количество писем для обучения, после которого алгоритм bayes
# начнет работать. Если у кого-то нет много писем на обучение, то можно
# снизить пороги "белых" и "спам" писем
# bayes_min_ham_num 200
# bayes_min_spam_num 200
# Следующая опция закомментирована и нужна только для
# высоконагруженных систем спама. Этим самым мы отключаем
# фиксированный размер базы bayes, а потом чтобы база не пухла
# раз в сутки рекомендуется проводить сжатие базы.
# bayes_auto_expire 0
# Включаем самообучение алгоритма bayes при определении им
# тех или иных типов писем
bayes_auto_learn 1
# Немного подкорректируем самообучение bayes
# Самобучение на спам будет проводится в том случае, если письмо
# получило 12 баллов и выше (хотя порог у нас 5)
bayes_auto_learn_threshold_spam 12.0
# А письмо на "не спам" будет обучаться если общая
# оценка письма составит 0.1 балл и ниже
bayes_auto_learn_threshold_nonspam 0.1
# Используем плагины razor и dcc
use_razor2 1
use_dcc 1
# Сколько начисляем баллов к письму, если письмо есть в
# базе данных razor или dcc
score RAZOR2_CHECK 1.000
score DCC_CHECK 1.000
# Какие языки и кодировки обычно используется в письмах
# Если письмо не принадлежит этим языкам и кодировкам, то
# ему начислится более высокий балл
ok_languages ru en
ok_locales ru en
# Я не использую белые списки, но если это вам нужно,
# расскоментируйте посследующие строки
# use_auto_whitelist 0
# auto_whitelist_path /etc/mail/spamassassin/auto-whitelist
# auto_whitelist_file_mode 0666
# Черные списки, +100баллов к письму, если письмо пришло
# с этих доменов или адресов
blacklist_from sales-eemea@flukenetworks.com
blacklist_from *@888.com
blacklist_from *@msn.com
blacklist_from *@cat.es
blacklist_from *@pmail.gen.nz
blacklist_from *@femenino.com
blacklist_from *@infonium.com
blacklist_from *@outblaze.com
Теперь проверяем загрузку плагинов razor и DCC в файле /etc/mail/spamassassin/v310.pre loadplugin Mail::SpamAssassin::Plugin::DCC
loadplugin Mail::SpamAssassin::Plugin::Razor2
После редактирования файлов конфигураций обязательно запускаем проверку правильности конфига и смотрим чтобы не было ошибок. # spamassassin --lint На этом настройку SpamAssassin можно и закончить, но хочу показать несколько тонких настроек отсеивания спама для файла local.cf # Ищем в теле письма например слово "Worldwide" параметр "i"
# означает регистронезависимое совпадение слова
body PRIVET_MV3 /Worldwide/i
# описание правила
describe PRIVET_MV Mnogo spama s etim slovov vnutri texta pisma
# выставляем этот балл если находим совпадение
score PRIVET_MV3 5.0
# тут мы ищем слово SPAM в заголовке письма и именно
# в определенном header-е "x-spamtest-status"
header SPAM_TEST x-spamtest-status =~ /SPAM/i
describe SPAM_TEST KAV x-spamtest-status: SPAM
# оцениваем совпадение в баллах
score SPAM_TEST 10.0
# этот пользователь не хочет, чтобы SpamAssassin как-то помечал
# заголовки его писем, даже если это спам
# если встретим в любом из header совпадение по email пользователя,
# то выставим -100
# Это не очень хорошее правило, т.к. если будет перечень в поле To
# нескольким адресатам и это явный спам, то всем адресатам письмо
# дойдет с непомеченным заголовком
header FOR_USER ALL =~ /user\@domen.ru/i
score FOR_USER -100.0
# иногда некоторые письма рассылки помечаются как спам
# поэтому создадим такое правило
header FFOM_SUBSCRIBE ALL =~ /comp.soft.linux.discuss-list/i
score FFOM_SUBSCRIBE -100.0
Про остальные тонкости читайте на официальном сайте SpamAssassin. # sudo /etc/init.d/spamassassin start И самое последнее - это "скармливаем" SpamAssassin-у письма "спама" и "не спама" . Это рекомендуется делать
периодически, чтобы в системе антиспама было как можно меньше ошибок. Но все равно будьте готовы к тому что
система не идеальна и ошибки в определении "спам-не-спам" возможны. # sudo sa-learn --spam --mbox /path/to/spam/mbox_format Для "хороших" писем # sudo sa-learn --ham --mbox /path/to/ham/mbox_format Если у вас каждое письмо по отдельности, то не указывайте параметр --mbox, а путь указывайте до каталога с файлами писем. Связываем SpamAssassin и SendmailДля связки я использую milter smf-spamd. Наскольку я знаю есть еще проект
spamass-milter, но как я понял он иногда приводил к зависанию системы антиспама, поэтому
я его не использовал. Насчет smf-spamd могу сказать, что он ни разу меня не
подвел :) /* Hosts/Networks whitelist (extended regex format) */
#define WHITE_LIST "(^127\\.0\\.0\\.1$|^192\\.168\\.0\\.1$)"
/* Maximal message size for the scanning process */
#define MAX_MESSAGE_SIZE 256000
/* Reject messages on excess of this SPAM score */
#define EXTRA_SPAM_SCORE 1000
/* Add an information header to the scanned messages */
#define ADD_HEADER 1 /* set 0 for disable */
/* Tag the Subject if SPAM is detected */
#define TAG_SUBJECT 1 /* set 0 for disable */
/* Contact address ("all_spam_to" from the SA configuration) */
#define CONTACT_ADDRESS ""
/* Copy the messages marked as SPAM into the special "garbage" mailbox */
#define COPY_SPAM 0 /* set 1 for enable */
/* "Garbage" mailbox (must be existent) */
#define SPAM_BOX ""
/* SpamAssassin daemon listen here */
#define SPAMD_PORT 783
#define SPAMD_ADDRESS "127.0.0.1"
/* Syslog facility for logging */
#define SYSLOG_FACILITY LOG_LOCAL3
После редактирования smf-config.h выполняем # make # sudo make install Заносим информацию о милтере в конфиг sendmail.mc INPUT_MAIL_FILTER(`smf-spamd', `S=unix:/var/spool/smf/smf-spamd.sock, T=S:1m;R:1m')
define(`confMILTER_LOG_LEVEL',`1')
и пересобираем sendmail.cf. O InputMailFilters=smf-spamd
O Milter.LogLevel=1
################################################
##### MAIL FILTER DEFINITIONS
################################################
Xsmf-spamd, S=unix:/var/spool/smf/smf-spamd.sock, T=S:1m;R:1m
После редактирования sendmail.cf обязательно перезапускаем sendmail. Nov 29 00:34:03 ns smf-spamd[52983]: SPAM (10.9/7.9), scanned for 12.658s, \
host('mail'), sender('<bounce@subscribe.newsland.ru>'), recipient('<user@domen.ru>')
а в /var/log/maillog будут помечаться результаты проверок на спам Nov 29 00:34:03 ns spamd[86635]: spamd: identified spam (10.9/7.9) \
for (unknown):58 in 12.9 seconds, 36304 bytes.
Nov 29 00:34:03 ns spamd[86635]: spamd: result: Y 10 - BAYES_99,\
DNS_FROM_OPENWHOIS,FH_DATE_PAST_20XX,HS_INDEX_PARAM, \
HTML_FONT_SIZE_LARGE,HTML_MESSAGE,MPART_ALT_DIFF_COUNT,\
RCVD_IN_BL_SPAMCOP_NET scantime=12.9,size=36304, \
user=(unknown),uid=58,required_score=7.9,rhost=localhost.domen.ru, \
raddr=127.0.0.1,rport=63109,mid=, \
bayes=1.000000,autolearn=no
И наконец, не забываем включить SpamAssassin в автозагрузку при старте ОС. В Ubuntu (Debian) это делается в файле /etc/default/spamassassin. PS: На всякий случай привожу пример скрипта запуска/остановки/перезагрузки демона spamd. #!/bin/sh
#
RETVAL=0
case "$1" in
start)
echo -n $"Starting SPAMASSASSIN server: "
/usr/local/bin/spamd --syslog=mail -d -u spamd --max-children=45 --pidfile=/var/run/spamd.pid
echo
echo "Starting SPAMASSASSIN-MILTER connector: "
/usr/local/sbin/smf-spamd
;;
stop)
echo "Stopping SPAMASSASSIN server: "
i=`ps auxw | grep spamd | grep -v grep | grep usr | awk '{print $2}'`
if [ `ps auxw | grep spamd | grep -v grep | grep -c usr` -ne 0 ]; then
kill $i
fi
echo "Stopping SPAMASSASSIN-MILTER connector: "
i=`ps auxw | grep smf-spamd | grep -v grep | awk '{print $2}'`
if [ `ps auxw | grep smf-spamd | grep -v grep | grep -c spamd` -ne 0 ]; then
kill $i
fi
echo "10 seconds..."
sleep 10
i=`ps auxw | grep smf-spamd | grep -v grep | awk '{print $2}'`
if [ `ps auxw | grep smf-spamd | grep -v grep | grep -c spamd` -ne 0 ]; then
kill -9 $i
fi
echo
;;
restart)
$0 stop
sleep 3
$0 start
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit $RETVAL
Материал взят с сайта: Главная > Программы > SpamAssassin |