суббота, 12 ноября 2011 г.

SpamAssassin + MailZu + MySQL + ClamAV + Amavisd

(ОС: Debian 5.0)


apt-get install amavisd-new spamassassin clamav
Настройка SpamAssassin
Параметры запуска (/etc/default/spamassassin):
OPTIONS="--max-children 5 --sql-config --username=spamfilter --nouser-config -D"
Ключ -D включает дебаг, соответственно после тестирования его следует убрать
Создаем MySQL базу (в примере mailfilter) для хранения данных AWL, Bayes:
mysql -u mailfilter -p mailfilter < /usr/share/doc/spamassassin/awl_mysql.sql
mysql -u mailfilter -p mailfilter < /usr/share/doc/spamassassin/bayes_mysql.sql
Вот этот дамп не заливаем, так как Amavisd не умеет работать с дефолтной sql базой SpamAssassin и у него своя sql база для хранения пользовательских настроек
/usr/share/doc/spamassassin/userpref_mysql.sql
Добавляем в конфиг spamassassin настройки для доступа к его MySQL базе:
user_awl_dsn                    DBI:mysql:mailfilter:localhost
user_awl_sql_username           mailfilter
user_awl_sql_password           secret
user_awl_sql_table              awl
auto_whitelist_factory          Mail::SpamAssassin::SQLBasedAddrList
bayes_sql_dsn                   DBI:mysql:mailfilter:localhost
bayes_sql_username              mailfilter
bayes_sql_password              secret
bayes_store_module              Mail::SpamAssassin::BayesStore::SQL
Проверяем корректность конфига:
spamassassin --lint
Настройка Postfix
Добавить в /etc/postfix/master.cf:
amavisfeed unix    -       -       n       -       2     smtp
     -o smtp_data_done_timeout=1200
     -o smtp_send_xforward_command=yes
     -o smtp_tls_note_starttls_offer=no

127.0.0.1:10025 inet n    -       n       -       -     smtpd
     -o content_filter=
     -o smtpd_delay_reject=no
     -o smtpd_client_restrictions=permit_mynetworks,reject
     -o smtpd_helo_restrictions=
     -o smtpd_sender_restrictions=
     -o smtpd_recipient_restrictions=permit_mynetworks,reject
     -o smtpd_data_restrictions=reject_unauth_pipelining
     -o smtpd_end_of_data_restrictions=
     -o smtpd_restriction_classes=
     -o mynetworks=127.0.0.0/8
     -o smtpd_error_sleep_time=0
     -o smtpd_soft_error_limit=1001
     -o smtpd_hard_error_limit=1000
     -o smtpd_client_connection_count_limit=0
     -o smtpd_client_connection_rate_limit=0
     -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
     -o local_header_rewrite_clients=
     -o smtpd_milters=
     -o local_recipient_maps=
     -o relay_recipient_maps=
Добавить в /etc/postfix/main.cf:
content_filter=amavisfeed:[127.0.0.1]:10024
Настройка Amavisd-new
Раскомментировать в /etc/amavis/conf.d/15-content_filter_mode:
@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Внести в группу:
gpasswd -a clamav amavis
Разбор конфига Amavisd
Внести в /etc/amavis/conf.d/20-debian_defaults
$mydomain = 'local.lan';
(где local.lan Ваш основной почтовый домен)
Поправить в /etc/amavis/conf.d/05-node_id:
$myhostname = 'cyrus.local.lan';
(где cyrus.local.lan имя вашего хоста)
Дебаг, детализация от 0 до 5:
$log_level = 5;
Порог срабатывания, превышение которого или равнение на него добавляет к письму заголовки со служебной информацией по работе спам фильтра:
$sa_tag_level_deflt  = -200.0;
Первый параметр устанавливает уровень достигнув которого письмо помечается как спам,
а второй параметр устанавливает уровень когда письмо считается спамом и срабатывают reject/bounce/discard/pass, quarantine, notify
Обычно выставляют одинаковый уровень.
$sa_tag2_level_deflt = 6.31;
$sa_kill_level_deflt = 6.31;
Действия предпринимаемые на различные события:
$final_virus_destiny      = D_DISCARD;
$final_banned_destiny     = D_BOUNCE;
$final_spam_destiny       = D_BOUNCE;
$final_bad_header_destiny = D_PASS;
Заголовок письма посылаемого в качестве оповещения на различные события (оповещения отправителя о вирусе в его письме или оповещения админа):
$hdrfrom_notify_sender = 'Content-filter at $myhostname';
Адрес пользователя которому отправлять оповещения:
$virus_admin = "sayan.tsyrenov\@$mydomain";
(меняем на свой адрес)
Создать MySQL базу для карантина и настроить на нее amavisd,
Дамп для базы брать из /usr/share/doc/amavisd-new/README.sql-mysql.gz
@storage_sql_dsn =  ( ['DBI:mysql:mailzu:localhost', 'mailzu', 'secret'] );
$banned_files_quarantine_method = 'sql:';
$spam_quarantine_method = 'sql:';
Добавить в основной конфиг amavis (здесь добавляется порт на который c MailZu будет отсылаться "освобожденный" спам)
$inet_socket_port = [10024,9998];
$interface_policy{'9998'} = 'AM.PDP';
$inet_socket_bind = undef;
$policy_bank{'AM.PDP'} = {
    protocol => 'AM.PDP',
    inet_acl => [qw( 127.0.0.1 [::1] 172.16.0.21 )],
};
Настройка MailZu
Скопировать и настроить конфиг:
cyrus:/var/www/mailzu/config# cp config.php.sample config.php
$conf['amavisd']['spam_release_port'] = '9998';
$conf['db']['binquar'] = true;
$conf['auth']['s_admins'] = array ('sayan.tsyrenov@local.lan', 'tsyrenov.sayan@local.lan');
Для поддержки адреса электронной почты в качестве логина при аутентификации по IMAP, выставить пустое значение
$conf['auth']['serverType'] = 'imap';
$conf['auth']['imap_domain_name'] = ''; 
Создать файл логов:
touch /var/log/mailzu.log
chown www-data:www-data mailzu.log
Скрипт удаления старых данных из MySQL базы (изменить в скрипте месторасположение perl и выставить параметры
доступа к базе данных, скрипт запускается с ключом --database <типа базы>):
/var/www/mailzu/scripts/mz_db_clean.pl
Подправить кодировку, используемую для отображения HTML
/var/www/mailzu/lang/en_US.lang.php
$charset = 'UTF-8';
Внести поправку в /var/www/mailzu/lib/PHPMailer.class.php

Комментариев нет:

Отправить комментарий