Показаны сообщения с ярлыком Postfix. Показать все сообщения
Показаны сообщения с ярлыком Postfix. Показать все сообщения

воскресенье, 13 ноября 2011 г.

Postfix + Policyd политика для исходящей почты

(ОС: Debian 5.0, настраивалось на сервере с ISPmanager, но это не принципиально, работать будет везде)


в процессе инсталляции можно будет сразу создать БД mysql для policyd
apt-get install postfix-policyd
/etc/postfix/main.cf добавляем check_policy_service inet:127.0.0.1:10031 в самый конец параметра smtpd_recipient_restrictions
smtpd_recipient_restrictions = permit_sasl_authenticated, check_recipient_access hash:/etc/mail/access, permit_mynetworks, reject_unauth_destination, reject_unlisted_recipient, reject_unverified_recipient, check_policy_service inet:127.0.0.1:60000, check_policy_service inet:127.0.0.1:10031
/etc/postfix-policyd.conf выключаем всё (по дефолту включен только whitelisting) и приводим конфиг к примерно такому виду
SENDERTHROTTLE=1
SENDER_THROTTLE_SASL=1
SENDER_THROTTLE_HOST=0
QUOTA_EXCEEDED_TEMP_REJECT=1 # какую ошибку отдавать при истечении квоты (1=4xx  0=5xx)
SENDER_QUOTA_REJECTION="Quota Exceeded." # какое сообщение получит пользователь при превышении любой из квот
SENDER_SIZE_REJECTION="Message size too big." # сообщение при превышении максим.размера исходящего письма
SENDERMSGLIMIT=50 # кол-во исходящих писем которые может отправить пользователь до истечения SENDERTIMELIMIT
SENDERRCPTLIMIT=150 # кол-во получателей которым можно отправить письмо до истечения SENDERTIMELIMIT
SENDERQUOTALIMIT=250000000 # кол-во исходящей почты в мегабайтах которое может отправить пользователь до истечения SENDERTIMELIMIT (поддерживается максимум до 2Гб)
SENDERTIMELIMIT=2h # время после которого все счетчики сбрасываются обратно до нуля
SENDERMSGSIZE=10240000 # максимальный размер исходящего письма
SENDER_INACTIVE_EXPIRE=31d # время после которого все неактивные пользователи которые хранятся в базе данных будут удалены из нее (нулевое значение позволит хранить все записи)
invoke-rc.d postfix-policyd restart
Пользователи и статистическая информация о них постепенно добавляется в БД mysql (смотрим таблицу throttle) по мере отправки ими писем.
Таким образом можно контролировать кол-во и другие параметры исходящей почты, но только для тех пользователей которые авторизуются на сервере перед отправкой письма (по сути всех кто пытается отправить исходящее письмо через основной сетевой интерфейс почтового сервера).

суббота, 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

SpamAssassin + Amavisd-new + Clamav настройка

(OC: Debian 5.0, MTA: Postfix)


Базовая настройка:
apt-get install amavisd-new spamassassin clamav
Вносим в /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
Вносим в /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
Всё. Перезагружаем SpamAssassin, Postfix, Amavisd-new