Оригинал статьи:
Установка почтового сервера iRedMail на CentOS 7. Часть 2. Боремся со спамом
Настройка Dovecot
Подключаем плагин imap_sieve в Dovecot
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[root@localhost]# nano /etc/dovecot/dovecot.conf protocol imap { mail_plugins = $mail_plugins imap_quota imap_acl imap_sieve ... } plugin { ... # Antispam sieve_plugins = sieve_imapsieve sieve_extprograms # From elsewhere to Spam folder imapsieve_mailbox1_name = Junk imapsieve_mailbox1_causes = COPY imapsieve_mailbox1_before = file:/var/vmail/sieve/report-spam.sieve # From Spam folder to elsewhere imapsieve_mailbox2_name = * imapsieve_mailbox2_from = Junk imapsieve_mailbox2_causes = COPY imapsieve_mailbox2_before = file:/var/vmail/sieve/report-ham.sieve sieve_pipe_bin_dir = /var/vmail/sieve sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.environment +vnd.dovecot.debug } |
[/codesyntax]
Создаем скрипт report-spam.sieve
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@localhost]# nano /var/vmail/sieve/report-spam.sieve require ["vnd.dovecot.debug", "vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"]; debug_log "report_spam executed ${1}"; if environment :matches "imap.user" "*" { # to use a global user: #set "username" “amavis”; set "username" "${1}"; } pipe :copy "sa-learn-spam.sh" [ "${username}" ]; |
[/codesyntax]
Создаем скрипт report-ham.sieve
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@localhost]# nano /var/vmail/sieve/report-ham.sieve require ["vnd.dovecot.debug", "vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"]; debug_log "report_ham executed ${1}"; if environment :matches "imap.mailbox" "*" { set "mailbox" "${1}"; } if string "${mailbox}" "Trash" { stop; } if environment :matches "imap.user" "*" { # to use a global user: #set "username" “amavis”; set "username" "${1}"; } pipe :copy "sa-learn-ham.sh" [ "${username}" ]; |
[/codesyntax]
Создаем исполняемые sa-learn файлы
1 2 |
[root@localhost]# nano /var/vmail/sieve/sa-learn-spam.sh exec /usr/bin/sa-learn -u ${1} --spam |
1 2 |
[root@localhost]# nano /var/vmail/sieve/sa-learn-ham.sh exec /usr/bin/sa-learn -u ${1} --ham |
Меняем владельца файлов на vmail и делаем файлы исполняемые
1 2 3 4 |
[root@localhost]# chown vmail:vmail /var/vmail/sieve/report-* [root@localhost]# chown vmail:vmail /var/vmail/sieve/sa-learn-* [root@localhost]# chmod +x /var/vmail/sieve/report-* [root@localhost]# chmod +x /var/vmail/sieve/sa-learn-* |
Настройка SpamAssassin
Настраиваем хранение базы SpamAssasin в MySQL, редактируем файл local.cf
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@localhost]# nano /etc/mail/spamassassin/local.cf use_bayes 1 bayes_auto_learn 1 bayes_auto_expire 1 # Store bayesian data in MySQL bayes_store_module Mail::SpamAssassin::BayesStore::MySQL bayes_sql_dsn DBI:mysql:sa_bayes:127.0.0.1:3306 # Store bayesian data in MySQL #bayes_store_module Mail::SpamAssassin::BayesStore::PgSQL #bayes_sql_dsn DBI:Pg:database:sql_server:sql_port # bayes_sql_username %user% bayes_sql_password %password% |
[/codesyntax]
где:
%user% — имя пользователя, который имеет доступ к базе sa_bayes
%password% — пароль
Эти данные мы заведем чуть позже
Проверим версию SpamAssassin и скачаем схему базы spamassassin
1 2 3 4 5 |
[root@localhost]# spamassassin -V SpamAssassin version 3.4.0 running on Perl version 5.16.3 [root@localhost]# cd /home [root@localhost]# wget http://svn.apache.org/repos/asf/spamassassin/tags/spamassassin_release_3_4_0/sql/bayes_mysql.sql |
Отредактируем файл bayes_mysql.sql
В нем надо varchar(200) поменять на varchar(191), иначе при добавлении схемы в базу произойдет не полностью
Создадим базу sa_bayes, пользователя и пароль
[codesyntax lang="php"]
1 2 3 4 5 6 7 |
[root@localhost]# mysql -uroot -p mysql> CREATE DATABASE sa_bayes; mysql> USE sa_bayes; mysql> SOURCE /home/bayes_mysql.sql; mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON sa_bayes.* TO %user%@localhost IDENTIFIED BY '%password%'; mysql> FLUSH PRIVILEGES; mysql> EXIT; |
[/codesyntax]
Не забываем менять %user% и %password% на свои значения
Еще одна настройка Dovecot
Эта настройка нужна, чтобы письма, помеченные в Thunderbird меткой spam автоматически добавлялись в базу SpamAssassin
Редактируем файл dovecot.sieve
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 |
[root@localhost]# nano /var/vmail/sieve/dovecot.sieve require ["fileinto", "vnd.dovecot.debug", "vnd.dovecot.pipe", "copy", "environment", "variables"]; # rule:[Move Spam to Junk Folder] if header :is "X-Spam-Flag" "YES" { fileinto "Junk"; set "username" "amavis"; pipe :copy "sa-learn-spam.sh" [ "${username}" ]; } |
[/codesyntax]
У нас в организации в основном используется pop3 протокол (с целью не загромождать свободное место на сервер), по-этому я отключил автоматическое перемещение писем, помеченных SPAM, в каталог почтового ящика Спам, т.к. pop3 не умеет работать с каталогами. Для отключения перемещения надо закомментировать строку:
1 |
# fileinto "Junk"; |
Перезапускаем Dovecot и Amavis
1 2 |
[root@localhost]# systemctl restart dovecot [root@localhost]# systemctl restart amavisd |
Дополнительные настройки
Так же. для того, что бы pop3-пользователи могли участвовать в процессе обучения на spam/ham было заведено 2 почтовых ящика:
spam@test.ru — ящик для перенаправления спама
ham@test.ru — ящик для писем, которые ошибочно были помечены как спам
Добавим в сrontab задания на обучение spamassassin и очистку почтовых ящиков, указанных выше:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 |
[root@localhost]# nano /var/spool/cron/root # SpamAssassin learn spam at 00:05 from mailbox spam@test.ru 5 0 * * * /usr/bin/sa-learn --spam /var/vmail/vmail1/test.ru/s/p/a/spam-2019.02.01.13.15.26/Maildir/new/ # SpamAssassin learn ham at 00:06 from mailbox ham@test.ru 6 0 * * * /usr/bin/sa-learn --ham /var/vmail/vmail1/test.ru/h/a/m/ham-2019.02.01.13.16.51/Maildir/new/ # Deleete messages from spam@test.ru and ham@test.ru 15 0 * * * /bin/rm -rf /var/vmail/vmail1/test.ru/s/p/a/spam-2019.02.01.13.15.26/Maildir/new/* 17 0 * * * /bin/rm -rf /var/vmail/vmail1/test.ru/h/a/m/ham-2019.02.01.13.16.51/Maildir/new/* |
[/codesyntax]
В данный момент механизм обучения через пересылки писем уже не используется, т.е. spamassasin обучается за счет того, что вся почта с несуществующих ящиков и с алиаса info@test.ru перенаправляется в ящик postmaster@test.ru, а этот почтовый ящик подключен в thunderbird по протоколу imap. Thunderbird сам автоматически помечает спам-письма соответствующей меткой, и благодаря этой пометки происходит обучение spamassassin
Настройки Amavis
Для того, чтобы Amavis не удалял письма помеченные в теме письма как spam, отредактируем файл amavisd.conf
1 2 3 |
[root@localhost]# nano /etc/amavisd/amavisd.conf # SPAM $final_spam_destiny = D_BOUNCE |
Для того, чтобы активировать обучение SpamAssassin в Amavis, отредактируем файл amavisd.conf
[codesyntax lang="php"]
1 2 3 4 5 |
[root@localhost]# nano /etc/amavisd/amavisd.conf $sa_tag_level_deflt = -999; $sa_tag2_level_deflt = 5; $sa_kill_level_deflt = 6.3; $sa_dsn_cutoff_level = 10; |
[/codesyntax]
Перезапускаем Amavis
1 |
[root@localhost]# systemctl restart amavisd |