Устанавливаем пакет:
# yum -y install spamassassin
ВАЖНО: требуется подключенный репозиторий rpmforge-extras. При установке возможны проблемы типа Error: Package: perl-IO-Compress-2.052-1.el6.rfx.noarch.
После установки рабочий каталог Spamassassin выглядит так:
# ls -l /etc/mail/spamassassin/ total 44 drwxr-xr-x 2 root root 4096 Jul 13 12:20 channel.d -rw-r--r-- 1 root root 1299 Dec 5 2013 init.pre -rw-r--r-- 1 root root 276 Dec 5 2013 local.cf drwx------ 2 root root 4096 Dec 5 2013 sa-update-keys -rw-r--r-- 1 root root 62 Dec 5 2013 spamassassin-default.rc -rwxr-xr-x 1 root root 35 Dec 5 2013 spamassassin-helper.sh -rw-r--r-- 1 root root 55 Dec 5 2013 spamassassin-spamc.rc -rw-r--r-- 1 root root 2524 Dec 5 2013 v310.pre -rw-r--r-- 1 root root 1194 Dec 5 2013 v312.pre -rw-r--r-- 1 root root 2416 Dec 5 2013 v320.pre -rw-r--r-- 1 root root 1237 Dec 5 2013 v330.pre
Тут рассматриваются примеры на:
# exim -bV Exim version 4.72 #1 built 13-Jun-2014 12:17:50
# spamd -V SpamAssassin Server version 3.3.1 running on Perl 5.10.1
# cat /etc/redhat-release CentOS release 6.5 (Final)
Настройка Exim описана в статье CentOS: установка и настройка Dovecot 2 + Exim + ClamAV + Postfixadmin.
По-умолчанию Spamassassin создаёт каталог для базы Bayes в домашней директории пользователя, который его запускает:
# ls -l /root/.spamassassin total 284 -rw------- 1 root root 12288 Jul 14 08:06 bayes_seen -rw------- 1 root root 331776 Jul 14 08:06 bayes_toks
Т.к. нам это нежелательно и проще хранить всё в одном месте – то есть два варианта.
Более простой – хранить базы в заданной в конфигурации директории. Второй – в базе MySQL.
Пока выберем первый.
Создаём файлы для Bayes базы:
# mkdir /etc/mail/spamassassin/bayes/ # touch /etc/mail/spamassassin/bayes/bayes_
Дописываем в основной конфиг-файл /etc/mail/spamassassin/local.cf
:
# количество "очков спама", что бы письмо было помечено как спам required_hits 5 # что следует делать с оригинальным сообщением, если оно будет признано спамом # оставить как есть - 0 # прикрепить к отчету как вложение - 1 # добавить к отчету как текст - 2 report_safe 0 # Добавлять метку *****SPAM***** к спам сообщениям rewrite_header Subject *****SPAM***** # Указываем локальную сеть как доверенную, т.е. # исходящие письма не проверяем # в данном случае не доверяем никому # trusted_networks # Указываем кол-во баллов, при котором сообщение считается спамом # (по умолчанию: 5.0) required_score 5.0 # Использовать фильтр Bayesian (по умолчанию: 1) use_bayes 1 # Когда производится обучение по bayes, эта информация падает в # журнал bayes_learn_to_journal 1 # путь к префиксу файлов bayes-базы - НЕ директории bayes_path /etc/mail/spamassassin/bayes/bayes # Указываем сколько чистых писем и писем со спамом должно # накопится в Bayesian базе прежде чем демон будет пользоваться # этой базой (по умолчания - 200 не спама и спама) bayes_min_ham_num 1 bayes_min_spam_num 1 # Bayesian авто обучение (default: 1) # письма распознанные как 100% спам или 100% не спам # добавляются в базу bayes_auto_learn 1 # не анализировать письма, содержащие указанный тэг в заголовке bayes-ignore-header <тэг_заголовка> # не подвергать анализу письма от указанного адресата bayes_ignore_from <адрес> # не анализировать сообщения, предназначенные указанному пользователю bayes_ignore_to <адрес> # Не использовать сетевые проверки (т.к. делаем это в MTA) skip_rbl_checks 0 # Использовать Razor use_razor2 0 # Не использовать Pyzor use_pyzor 0 # Указываем допустимые языки и локали сообщений ok_locales en ru # Автоматический белый список выключаем, поскольку в него # зачастую попадают спамеры. # use_auto_whitelist 0 # auto_whitelist_path /etc/mail/spamassassin/auto-whitelist # auto_whitelist_file_mode 0666 # не проверять почту от указанных адресов; # можно указать шаблон - символ «*» обозначает любое количество символов, # «?» – любой один символ # whitelist_from <адрес_или_шаблон> # аналогично «белому» списку, но теперь отправитель априори рассматривается # как спамер, и все письма от него помечаются как спам без дальнейшего анализа # blacklist_from <адрес_или_шаблон> # все сообщения на указанный адрес будут передаваться без фильтрации; # можно использовать, если владелец адреса желает получать всю почту, адресованную ему; # также рекомендуется устанавливать этот параметр для адреса abuse, # чтобы даже в случае неправильной настройки фильтра с вами можно было связаться. # whitelist_to <адрес_или_шаблон> # все сообщения на указанный адрес будут рассматриваться как спам; # например, таким образом можно организовать «прививки» для статистического анализатора, # создав специальный адрес для спама и максимально «засветив» в интернете # (при этом должно быть включено автообучение) # blacklist_to <адрес_или_шаблон>
Проверяем синтаксис файла:
# spamassassin --lint
Запускаем обновление баз для Spamassassin:
# sa-update -v Update available for channel updates.spamassassin.org Update was available, and was downloaded and installed successfully
Запускаем и добавляем в автозапуск:
# service spamassassin start Starting spamd: [ OK ]
# chkconfig spamassassin on
Проверяем порт:
# netstat -anp | grep spam tcp 0 0 127.0.0.1:783 0.0.0.0:* LISTEN 23011/spamd.pid
Переходим к Exim.
В файле /etc/exim/exim.conf
добавляем:
spamd_address = 127.0.0.1 783
Дальше, в блок acl_check_data
: добавляем:
# указываем адрес на который пересылать сообщения # определенные как спам, на случай если это ошибка. warn message = X-Redirect-To: [email protected] hosts = !+relay_from_hosts spam = nobody # пишем в заголовки баллы за спам warn spam = nobody:true hosts = !+relay_from_hosts message = X-Spam-Level: $spam_bar # пишем в заголовки отчет spamassassin'a warn spam = nobody:true hosts = !+relay_from_hosts condition = ${if >{$spam_score_int}{29}{1}{0}} message = X-Spam-Status: $spam_report # если письмо набрало больше 10 баллов, то # не принимаем его -устанавливаем deny # что бы переслать на ящик [email protected] - ставим accept accept message = Message scored $spam_score spam points spam = nobody:true condition = ${if >{$spam_score_int}{100}{yes}{no}} # и записываем сообщение в лог logwrite = Email from $sender_address with $spam_score spam points redirected to [email protected] by SpamAssassin
В блок begin routers
добавляем пересылку писем:
begin routers # роутер пересылающий спам в ящик [email protected] scan_redirect: driver = redirect condition = ${if def:h_X-Redirect-To: {1}{0}} headers_add = X-Original-Recipient: $local_part@$domain data = $h_X-Redirect-To: headers_remove = X-Redirect-To
Проверяем конфиг:
# exim -bV
Перезапускаем Exim:
# service exim restart Shutting down exim: [ OK ] Starting exim: [ OK ]
Пробуем отправить письмо с текстом:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X#sthash.oh8083pv.dpuf
На любой ящик сервера, и смотрим лог /var/log/exim/main.log
:
2014-07-14 22:06:44 1X6laG-0008Nh-Ff Email from [email protected] with 1001.8 spam points redirected to [email protected] by SpamAssassin
Spamassasin работает.
Когда накопится какое-то количество спама в определённой папке (например – Thunderbird имеет собственный антиспам, и складывает спам в отдельную папку + можно самому помечать письма как спам) – можно запустить утилиту sa-learn
для обучения:
# sa-learn --spam /var/vmail/domain.kiev.ua/[email protected]/.Junk/ Learned tokens from 66 message(s) (67 message(s) examined)
И для обучения “хорошим” письмам:
# sa-learn --ham /var/vmail/domain.kiev.ua/[email protected]/cur/
Можно добавить вызов в cron
:
# crontab -e
# crontab -l 00 */12 * * * /usr/bin/sa-learn --spam /var/vmail/domain.kiev.ua/[email protected]/.Junk/
Проверку “хорошей” почте в cron пока не добавляем, т.к. ещё много спама будет попадать в новую почту.
И проверим базу bayes
:
# sa-learls -l bayes/ total 284 -rw-r--r-- 1 root root 0 Jul 14 08:21 bayes_ -rw------- 1 root root 12288 Jul 14 08:24 bayes__seen -rw------- 1 root root 331776 Jul 14 08:24 bayes__toks
ToDo: подключить Pyzor, Razor2 и DCC; перенести базу Bayes в MySQL.
Ссылки по теме
Примеры написания собственных правил
http://intuitive.com