Добавление Spam assissian к Postfix: различия между версиями
Misha (обсуждение | вклад) (→Создаем файл '''/etc/postfix/scripts/spamfilter''') |
Misha (обсуждение | вклад) (→Установка пакетов) |
||
Строка 1: | Строка 1: | ||
Описание взято [http://onetforum.com/fourm/viewtopic.php?p=63#63 spamassissian + Postfix] | Описание взято [http://onetforum.com/fourm/viewtopic.php?p=63#63 spamassissian + Postfix] | ||
== Установка пакетов== | == Установка пакетов== | ||
− | Итак устанавливаем пакет spammassissian*.rpm, spammassissian- | + | Итак устанавливаем пакет spammassissian*.rpm, spammassissian-spamd *.rpm, spammassissian-spamc *.rpm со всеми зависимостями. |
==Настройка== | ==Настройка== |
Версия 10:12, 24 декабря 2009
Описание взято spamassissian + Postfix
Содержание
Установка пакетов
Итак устанавливаем пакет spammassissian*.rpm, spammassissian-spamd *.rpm, spammassissian-spamc *.rpm со всеми зависимостями.
Настройка
Добабляем пользователя, от которого будет работать спамфильтр
adduser spamfilter -s /sbin/nologin
Редактируем /etc/postfix/master.cf
Вконец добавляем строки
spamfilter unix - n n - - pipe flags=Rq user=spamfilter argv=/etc/postfix/scripts/spamfilter -f ${sender} -- ${recipient}
Редактируем строку с smtp
smtp inet n - y - - smtpd -o content_filter=spamfilter:dummy
Cоздаем конфигурационный файл /etc/mail/spamassassin/local.cf
(полная документация - см. perldoc Mail::SpamAssassin::Conf)
required_hits 5 rewrite_header Subject ****SPAM**** report_safe 0 auto_learn 1 use_bayes 1 bayes_path /etc/mail/spamassassin/bayes bayes_file_mode 0666 bayes_learn_to_journal 1 bayes_min_ham_num 50 bayes_min_spam_num 50 score SUBJ_FULL_OF_8BITS 0.00 score HTML_COMMENT_8BITS 0.01 score HEADER_8BITS 0.00 score TO_NO_USER 0.01 score FORGED_MUA_OUTLOOK 0.5 score X_AUTH_WARNING 0.01 score SUBJ_HAS_UNIQ_ID 9.99 score HTTP_USERNAME_USED 9.99 score FORGED_YAHOO_RCVD 9.99 score FORGED_JUNO_RCVD 16 score UNWANTED_LANGUAGE_BODY 1.02 score MLM 5.55 score RCVD_NUMERIC_HELO 4.95 ok_languages en ru ok_locales en ru subject_tag MESSAGE_MARKED_AS_SPAM whitelist_to vt@bykoff.ru whitelist_from root@localhost whitelist_from root@localhost.localhost auto_whitelist_path /etc/mail/spamassassin/auto-whitelist auto_whitelist_file_mode 0666 auto_learn_threshold_nonspam -2 auto_learn_threshold_spam 9 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
Примечание
bayes_path /etc/mail/spamassassin/bayes указывает что демон создаст три файла базы данных Bayesian фильтра для хранения создаваемых образчиков писем:
/etc/mail/spamassassin/bayes_seen /etc/mail/spamassassin/bayes_journal /etc/mail/spamassassin/bayes_toks
Параметры
bayes_min_ham_num 1 bayes_min_spam_num 1
указывают, сколько чистых писем и писем со спамом должно накопится в Bayesian базе прежде чем демон будет пользоваться этой базой (по умолчания - 200 чистых и спама)
Посмотреть базу можно командой sa-learn -dump auto_whitelist_path /etc/mail/spamassassin/auto-whitelist - Если Вы запустили демон с опцией -a то есть автообучения адресов, указывает, что демон создаст два файла базы данных адресов
/etc/mail/spamassassin/auto-whitelist.dir /etc/mail/spamassassin/auto-whitelist.pag
auto whitelisting вычисляет средний уровень оценки для каждого отправителя и прибавляет его к оценке очередного письма. Это позволяет не блокировать "благонадежных" отправителей если оценка отдельного письма вдруг превысит предел. Кстати, посмотреть базу адресов можно из директории с распакованным дистрибутивом командой ./tools/check_whitelist /etc/mail/spamassassin/auto-whitelist
Создаем Bayes-базу
sa-learn --sync
Затем следует убедится, что владелец файлов в директории /etc/mail/spamassassin/ - это наш новый пользователь.
# chown -R spamfilter /etc/mail/spamassassin/
Запускаем демон
service spamd start
в почтовом логфайле должны появится соответствующие строки о запуске демона
Создаем файл /etc/postfix/scripts/spamfilter
#!/bin/sh # Kalinga Athulathmudali # 2006-01-06 # Variables SENDMAIL="/usr/sbin/sendmail.postfix -i" EGREP=/bin/egrep USERS_WITH_SPAM="/etc/posfix/scripts/users_with_spam" # Exit codes from <sysexits.h> EX_UNAVAILABLE=69 # Number of *'s in X-Spam-level header needed to sideline message: # (Eg. Score of 5.5 = "*****" ) SPAMLIMIT=5 # Clean up when done or when aborting. trap "rm -f /var/tempfs/out.$$" 0 1 2 3 15 # Если письмо на пользователей без спам фильтра, то пропускаем не меняя # Туда входит и postmaster, но тк его нет в пользователях и алиасах, он # будет reject if [ -n $EGREP -q -i "$@" $USERS_WITH_SPAM ] then $SENDMAIL "$@" < /var/tempfs/out.$$ else # Передаем сообщение spamc cat | /usr/bin/spamc -u spamfilter > /var/tempfs/out.$$ if $EGREP -q "^X-Spam-Level: \*{$SPAMLIMIT,}" < /var/tempfs/out.$$ then ## Меняем Email адрес, куда Вы хотите, чтобы пересылался спам $SENDMAIL -f spamadmin@yourdomain.com spamtrap@yourdomain.com < /var/tempfs/out.$$ else $SENDMAIL "$@" < /var/tempfs/out.$$ fi fi # Postfix returns the exit status of the Postfix sendmail command. exit $?
Теперь поменяйте с этом скрипте почтовые адреса
spamadmin@yourdomain.com на почтовый адрес администратора.
spamtrap@yourdomain.com на адрес, где будет складываться спам.
Теперь поменяйте владельца файла и его атрибуты.
chown spamfilter /etc/postfix/scripts/spamfilter chmod 755 /etc/postfix/scripts/spamfilter
Теперь надо создать temp папку и дать ей нужные аттрибуты
mkdir /var/tempfs chown spamfilter:root /var/tempfs
Еще 2 проблемы спама решим в этом скрипте.
- Проверка наличия почтовых ящиков происходит после спам фильтра, те если даже не существует ящика, с спам фильтр определил письмо как спам, то письмо упадет в ящик для спама. А т.к. большинство спама идет на пользователя postmaster, то даже если такого пользователя не существует (удалены все ящики и алиасы), то письма со спамом будут попадать в ящик спама, что загружает сеть и усложняет администратору разгребать это безобразие. А т.к. очень большая часть спама идет на ящик postmaster@yourdomain.com, то мы его принимать не будем. Тк письмо на postmaster пройдет мимо спам фильтра и отобьется при проверке наличия почтового ящика (у нас удалены все ящики и алиасы данного пользователя).
- Существуют пользователи, которые хотят получать весь поток писем вместе со спамом.
Создаем файл /etc/posfix/scripts/users_with_spam, где указываем ящики, на которые нужно пропускать все письма, без спам фильтра и postmaster, удалив ящики и алиасы связанные с ним.
postmaster@yourdomain.com vasja@yourdomain.com vona@yourdomain.com
Можно, конечно взять данные адреса и из базы данных, но тут я не буду это рассматривать. Главное смысл понятен.
Ну вот и все. Перезапускаем Postfix.
/etc/init.d/postfix reload
Черные и белые списки
Чтобы добавить почтовый ящик в черный список выполните следующее
spamassassin --add-addr-to-blacklist=boss@test.mail.com
Если надо убрать его оттуда, то надо этого пользователя добавить в белый лист, и он так сказать "отбеливается"
spamassassin --add-addr-to-whitelist=boss@test.mail.com
Перенаправить Spam в отдельный почтовый ящик
В main.cf - раскоментировал
header_checks = regexp:/etc/postfix/header_checks
Создал файлик header_checks
/^Subject: .*SPAM.*/ REDIRECT spamtrap@mydomain.ru
Но если ипользовать скрипт, то в нем и так идет перенаправление спама в указанный почтовый ящик.
Проверка
Отправьте на свой почтовый ящик письмо следующего содержимого
Subject: Test spam mail (GTUBE) Message-ID: <GTUBE1.1010101@example.net> Date: Wed, 23 Jul 2003 23:30:00 +0200 From: Sender <sender@example.net> To: Recipient <recipient@example.net> Precedence: junk MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit This is the GTUBE, the Generic Test for Unsolicited Bulk Email If your spam filter supports it, the GTUBE provides a test by which you can verify that the filter is installed correctly and is detecting incoming spam. You can send yourself a test mail containing the following string of characters (in upper case and with no white spaces and line breaks): XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X You should send this test mail from an account outside of your network.
В почтовый ящик, указанный в скрипте для спама должен попасть это письмо.