SpamAssassin – это написанный в perl (модуль Mail::SpamAssassin в CPAN) почтовый фильтр с открытым исходным кодом, предназначенный для выявления спама путем проведения эвристических проверок почтовых заголовков и текстов. Работа SpamAssassin основана на взаимодействии ключевых компонентов — оценочного сервиса, транспортного агента и базы шаблонов писем.
SpamAssassin может быть запущен как отдельное приложение, как часть другой программы, либо как клиент (spamc), который взаимодействует с демоном (spamd). Последний способ имеет более высокое быстродействие.
SpamAssassin поставляется с большим набором правил, которые определяют, какие письма являются спамом, а какие нет. Большинство правил основано на регулярных выражениях, которые сопоставляются телу или заголовку сообщения, но SpamAssassin также использует и другие методики. В документации SpamAssassin эти правила называются «tests».
Каждый тест имеет некоторую «стоимость». Если сообщение успешно проходит тест, эта «стоимость» добавляется к общему баллу. Стоимость может быть положительной или отрицательной, положительные значения называются «spam», отрицательные «ham». Сообщение проходит через все тесты, подсчитывается общий балл. Чем выше балл, тем больше вероятность, что сообщение является спамом.
У SpamAssassin'а есть настраиваемый порог, при превышении которого письмо будет классифицировано как спам. Обычно порог таков, что письмо должно подойти по нескольким критериям; срабатывания только одного теста недостаточно для превышения порога.
# aptitude install spamassassin
Редактируем файл /etc/default/spamassassin, разрешаем запуск spamd
# Change to one to enable spamd ENABLED=1
Чтобы получать новейшие правила фильтрации спама, можно включить автоматическое обновление правил
CRON=1
Запускаем и смотрим лог
# /etc/init.d/spamassassin start # tail -f /var/log/mail.log | grep spam
$ spamassassin -D --lint ... dbg: diag: [...] module installed: IO::Zlib, version 1.10 dbg: diag: [...] module not installed: Digest::SHA1 ('require' failed) dbg: diag: [...] module not installed: Geo::IP ('require' failed) dbg: diag: [...] module not installed: Razor2::Client::Agent ('require' failed) dbg: diag: [...] module not installed: IO::Socket::IP ('require' failed) dbg: diag: [...] module not installed: Encode::Detect ('require' failed) dbg: diag: [...] module not installed: Net::Patricia ('require' failed) ...
Нужно установить недостающие модули (пример установки для Ubuntu 14.04.1 LTS)
# aptitude install perl-doc libgeo-ip-perl libnet-patricia-perl razor pyzor libio-socket-ip-perl libencode-detect-perl
Если искомого модуля нет в систему установим из CPAN, например модуль Digest::SHA1. И перегрузим
# service spamassassin restart
Пример поиска в отладочном выводе spamassassin
# spamassassin -D --lint 2>&1 | grep -i failed
# perldoc Mail::SpamAssassin::Conf
# su - amavis -c 'echo "test" | spamassassin -D pyzor 2>&1 | less' dbg: pyzor: network tests on, attempting Pyzor dbg: pyzor: pyzor is available: /usr/bin/pyzor dbg: pyzor: opening pipe: /usr/bin/pyzor check < /tmp/.spamassassin26391d9kBBgtmp dbg: pyzor: [26394] finished: exit 1 dbg: pyzor: check failed: no response
Строка check failed: no response говорит о том что проблем с письмом нет.
rewrite_header Subject *****SPAM***** # report_safe (0|1|2)(default: 1) report_safe 0 # trusted_networks 212.17.35. # lock_method flock required_score 5.0 use_bayes 1 bayes_auto_learn 1 # отключить проверку сообщений по блэклистам (1-отключить, 0- включить) skip_rbl_checks 1 # pyzor 0- disable use_pyzor 1 # razor2 0- disable use_razor2 0 # Whitelist and blacklist addresses are now file-glob-style patterns, so # "friend@somewhere.com", "*@isp.com", or "*.domain.net" will all work. # whitelist_from someone@somewhere.com
# spamassassin --lint
#loadplugin Mail::SpamAssassin::Plugin::SPF
sa-learn --spam путь к каталогу писем со спамом
Для обучения программы нормальными письмами:
sa-learn --ham путь к каталогу писем без спама
# su - amavis -c 'sa-learn --dump magic'
Обучение SPAM должен происходить с правами пользователя от имени которого запущен amavisd-new. Ключ –no-sync используется потому что amavis сам на cron синхронизирует
# su - amavis -c 'sa-learn --no-sync --spam /tmp/.Spam/cur'
#!/bin/bash SPAMUSERDIR='/var/vmail/username/.Spam/cur/*' SPAMLEARNDIR='/tmp/SPAM' /bin/mkdir $SPAMLEARNDIR /bin/mv $SPAMUSERDIR $SPAMLEARNDIR /bin/chown -R amavis:amavis $SPAMLEARNDIR /bin/su - amavis -c 'sa-learn --dump magic' /bin/su - amavis -c "sa-learn --no-sync --spam $SPAMLEARNDIR" /bin/su - amavis -c 'sa-learn --dump magic' /bin/rm -rf /tmp/SPAM #service spamassassin reload
В дистрибутив SpamAssassin входят типовые файлах, с помощью которых можно проверить работает ли программа. Тестируют SpamAssassin стандартной сигнатурой GTUBE.
# spamassassin -t < sample-spam.txt > spam.out