Добавление Spam assissian к Postfix: различия между версиями

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Создаем файл '''/etc/postfix/scripts/spamfilter''')
(Создаем файл '''/etc/postfix/scripts/spamfilter''')
Строка 115: Строка 115:
 
         # Передаем сообщение  spamc
 
         # Передаем сообщение  spamc
 
         cat | /usr/bin/spamc -u spamfilter > /var/tempfs/out.$$
 
         cat | /usr/bin/spamc -u spamfilter > /var/tempfs/out.$$
         if [ $EGREP -q "^X-Spam-Level: \*{$SPAMLIMIT,}" < /var/tempfs/out.$$ ]
+
         if $EGREP -q "^X-Spam-Level: \*{$SPAMLIMIT,}" < /var/tempfs/out.$$  
 
             then
 
             then
 
                 ## Меняем Email адрес, куда Вы хотите, чтобы пересылался спам
 
                 ## Меняем Email адрес, куда Вы хотите, чтобы пересылался спам

Версия 09:03, 5 июня 2009

Описание взято spamassissian + Postfix

Установка пакетов

Итак устанавливаем пакет spammassissian*.rpm, spammassissian-cpamd *.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 "$@" $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 проблемы спама решим в этом скрипте.

  1. Проверка наличия почтовых ящиков происходит после спам фильтра, те если даже не существует ящика, с спам фильтр определил письмо как спам, то письмо упадет в ящик для спама. А т.к. большинство спама идет на пользователя postmaster, то даже если такого пользователя не существует (удалены все ящики и алиасы), то письма со спамом будут попадать в ящик спама, что загружает сеть и усложняет администратору разгребать это безобразие. А т.к. очень большая часть спама идет на ящик postmaster@yourdomain.com, то мы его принимать не будем. Тк письмо на postmaster пройдет мимо спам фильтра и отобьется при проверке наличия почтового ящика (у нас удалены все ящики и алиасы данного пользователя).
  2. Существуют пользователи, которые хотят получать весь поток писем вместе со спамом.

Создаем файл /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.

В почтовый ящик, указанный в скрипте для спама должен попасть это письмо.