Настройка спам-фильтра DSpam (dspam, dspam-web, dovecot-antispam) в CentOS/RHEL 7
Содержание
Установка DSpam
Сначала установим необходимые пакеты:
$ yum -y install dspam dspam-mysql dspam-web
В CentOS 6 пользователь dspam создавался с UID, который меньше 500 и возникала проблема с запуском веб-части DSpam в Apache, поэтому приходилось менять UID. Сейчас эта часть уже не актуальна:
$ usermod -u 597 dspam
$ find /usr -user 497 -exec chown dspam {} \;
$ find /var -user 497 -exec chown dspam {} \;
Создадим для DSpam базу и специального пользователя в MySQL:
$ mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2639 Server version: 5.5.40-MariaDB MariaDB Server Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE `%DSpamDB%` DEFAULT CHARACTER SET utf8; Query OK, 1 row affected (0.01 sec) MariaDB [(none)]> CREATE USER '%DSpamUser%'@'localhost' IDENTIFIED BY '%DSpamPassWord%'; Query OK, 0 rows affected (0.10 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON `%DSpamDB%`.* TO '%DSpamUser%'@'localhost'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> \q Bye
Теперь создадим в базе MySQL необходимые для работы таблицы:
$ cp /usr/share/dspam/sql-scripts/mysql/mysql_objects-4.1.sql /tmp $ sed -i 's/MyISAM/InnoDB/g' /tmp/mysql_objects-4.1.sql $ mysql -u %DSpamUser% -p --database='%DSpamDB%'
Условимся, что здесь и далее вместо %DSpamDB%, %DSpamUser% и %DSpamPassWord% нужно вписывать название базы данных, имя пользователя и пароль. Никаких процентов!
Настройка DSpam
$ nano -w /etc/dspam.conf StorageDriver /usr/lib64/dspam/libmysql_drv.so #TrustedDeliveryAgent "/usr/bin/procmail" DeliveryHost 127.0.0.1 DeliveryPort 11025 DeliveryIdent localhost DeliveryProto SMTP Trust postfix Preference "spamAction=deliver" Preference "spamSubject=" Preference "signatureLocation=headers" MySQLServer /var/lib/mysql/mysql.sock #MySQLPort MySQLUser DSpamUser MySQLPass DSpamPassWord MySQLDb DSpamDB MySQLCompress false MySQLReconnect true #PurgeSignatures 14 #PurgeNeutral 90 #PurgeUnused 90 #PurgeHapaxes 30 #PurgeHits1S 15 #PurgeHits1I 15 PurgeSignature off PurgeNeutral 90 PurgeUnused off PurgeHapaxes off PurgeHits1S off PurgeHits1I off ServerPID /var/run/dspam/dspam.pid ServerMode auto ServerParameters "--user dspam --deliver=innocent,spam -d %u" ServerIdent "mail.example.com" ServerDomainSocketPath "/var/run/dspam/dspam.sock" $ chown dspam /etc/dspam.conf
Теперь можно запустить DSpam:
$ systemctl enable dspam.service
$ systemctl start dspam.service
$ systemctl status dspam.service
dspam.service - A highly accurate statistical spam filter that uses minimal resources
Loaded: loaded (/usr/lib/systemd/system/dspam.service; enabled)
Active: active (running) since Fri 2014-11-28 01:16:19 MSK; 11s ago
Process: 3517 ExecStart=/usr/bin/dspam --daemon 2>/dev/null (code=exited, status=0/SUCCESS)
Main PID: 3518 (dspam)
CGroup: /system.slice/dspam.service
└─3518 /usr/bin/dspam --daemon 2>/dev/null
Nov 28 01:16:19 example.com dspam[3518]: Daemon process starting
Nov 28 01:16:19 example.com systemd[1]: Started A highly accurate statistical spam filter that uses minimal resources.
Настройка postfix
$ nano -w /etc/postfix/dspam_filter /./ FILTER dspam:unix:/var/run/dspam/dspam.sock $ chcon -u system_u /etc/postfix/dspam_filter $ nano -w /etc/postfix/main.cf smtpd_recipient_restrictions = ... check_recipient_access pcre:/etc/postfix/dspam_filter permit $ nano -w /etc/postfix/master.cf dspam unix - - n - 10 lmtp 127.0.0.1:11025 inet n - n - - smtpd -o smtpd_authorized_xforward_hosts=127.0.0.0/8 -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o receive_override_options=no_unknown_recipient_checks
Настройка SELinux для DSpam и Postfix
$ semanage port -a -t smtp_port_t -p tcp 11025
$ nano -w dspam-postfix.te
module dspam-postfix 2.3;
require {
type dspam_var_run_t;
type smtp_port_t;
type postfix_smtp_t;
type dspam_t;
class sock_file write;
class unix_stream_socket connectto;
class dir search;
class tcp_socket name_connect;
}
#============= dspam_t ==============
allow dspam_t smtp_port_t:tcp_socket name_connect;
#============= postfix_smtp_t ==============
allow postfix_smtp_t dspam_t:unix_stream_socket connectto;
allow postfix_smtp_t dspam_var_run_t:dir search;
allow postfix_smtp_t dspam_var_run_t:sock_file write;
$ checkmodule -M -m dspam-postfix.te -o dspam-postfix.mod
checkmodule: loading policy configuration from dspam-postfix.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 17) to dspam-postfix.mod
$ semodule_package -m dspam-postfix.mod -o dspam-postfix.pp
$ semodule -i dspam-postfix.pp
$ rm -f dspam-postfix.{mod,pp}
После того как SELinux настроен соответствующим образом для взаимосвязи postfix и DSpam – можно перезапустить postfix:
$ systemctl restart postfix
Настройка fetchmail
Настроим fetchmail, для того, чтобы он принятую почту принимал с использованием DSpam:
1-й вариант (попроще)
$ nano -w /usr/lib/fetchmail/fetchmail.pl
# $cmd.=" mda ".$mda if ($mda);
$cmd.=" mda \"/usr/bin/dspam --user dspam --deliver=innocent --rcpt-to ${mailbox}\"";
# $cmd.=" is '${mailbox}' here";
2-й вариант (правильнее):
В PostfixAdmin, в настройках fetchmail нужно прописать следующий mda:
"/usr/bin/dspam --user dspam --deliver=innocent --rcpt-to ${mailbox}"
прямо так, с кавычками. Имейте в виду, PostfixAdmin должен быть исправлен так как описано в этой статье, иначе PostfixAdmin будет неправильно записывать значения MDA в базу MySQL.
Настройка Apache и DSpam-web
$ nano -w /etc/httpd/conf.d/dspam-web.conf
Listen 8443 https
ServerAdmin postmaster@example.com
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCertificateFile /etc/pki/tls/certs/mail.example.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/mail.example.com.key
SSLCertificateChainFile /etc/pki/tls/certs/sub.class1.server.ca.pem
...
$ nano -w /var/www/dspam/configure.pl
$CONFIG{'LOCAL_DOMAIN'} = "example.com";
$ htpasswd -c /var/www/dspam-passwd dspam
$ chcon -u system_u /var/www/dspam-passwd
$ chown root:apache /var/www/dspam-passwd
$ chmod 0640 /var/www/dspam-passwd
$ firewall-cmd --permanent --zone=public --add-port=8443/tcp
$ firewall-cmd --reload
Настройка SELinux для DSpam-web и Apache
$ nano -w dspam-httpd.te
module dspam-httpd 2.3;
require {
type httpd_dspam_script_t;
type passwd_file_t;
type dspam_var_lib_t;
class file { read getattr open append };
}
#============= httpd_dspam_script_t ==============
allow httpd_dspam_script_t dspam_var_lib_t:file append;
allow httpd_dspam_script_t passwd_file_t:file { read getattr open };
$ checkmodule -M -m dspam-httpd.te -o dspam-httpd.mod
checkmodule: loading policy configuration from dspam-httpd.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 17) to dspam-httpd.mod
$ semodule_package -m dspam-httpd.mod -o dspam-httpd.pp
$ semodule -i dspam-httpd.pp
$ rm -f dspam-httpd.{mod,pp}
Перезапустим Apache:
$ systemctl reload httpd.service
Теперь можно открыть в браузере ссылку https://mail.example.com:8443/ для доступа к DSpam-web.
Настройка Dovecot
Для того, чтобы Dovecot письма со спамом помещал в папку Spam, нужно проделать следующее:
$ mkdir /var/spool/mail/example.com/username.sieve/
$ touch /var/spool/mail/example.com/username.sieve/roundcube.sive
$ ln -s roundcube.sieve /var/spool/mail/example.com/username.sieve/.dovecot.sieve
$ chown mail:mail /var/spool/mail/example.com/username.sieve/ -R
$ chcon -u system_u /var/spool/mail/example.com/username.sieve/ -R
$ chmod 0700 /var/spool/mail/example.com/username.sieve/
$ nano -w /var/spool/mail/example.com/username.sieve/roundcube.sive
## Generated by Roundcube Webmail SieveRules Plugin ##
require ["regex","body","imap4flags","fileinto","subaddress"];
# rule:[Удаляем безвозвратно...]
if anyof (address :is "From" "VIAGRA",
header :contains "Subject" "VIAGRA")
{
discard;
stop;
}
# rule:[.Spam]
elsif allof (header :contains "X-DSPAM-Result" "SPAM",
not header :contains "X-DSPAM-Reclassified" "Innocent")
{
setflag "\\Seen";
fileinto "Spam";
stop;
}
Таким образом все письма в теме которых (или в поле автор) есть слово VIAGRA – будут автоматически удаляться. А те письма, которые DSpam пометил как Spam – будут помечаться прочитанными и попадать в папку Spam. Имейте в виду, Dovecot должен быть настроен так как описано в этой статье.
Но, как известно, в некоторых случаях письма со спамом не определяются как Spam, а некоторые письма, наоборот, отмечаются как спам по ошибке. В таких случаях необходимо сказать DSpam, что вот это письмо, к примеру, не спам, а вот это, наоборот спам. Это нужно для самообучения DSpam.
Отмечать ошибочные письма как спам/не спам можно в вебинтерфейсе DSpam, но это сложный вариант, мы настроим проще.
Установка плагина dovecot-antispam
Обновление от 08.12.2018 (данный раздел уже не актуален и оставлен только для истории, см. …).
Для Dovecot есть специальный плагин, который будет следить за перемещением писем в почтовом ящике и в случае необходимости передавать эти письма на обучение DSpam. К примеру, если письмо вытаскивают из папки Spam (кроме случаев когда эти письма кладут в корзину), такое письмо передаётся DSpam со словами – это не спам. А если письмо наоборот, кладут в папку Spam, такое письмо передаётся DSpam со словами – это спам!
Плагина, который, обеспечивает нужный нам функционал, в репозиториях CentOS нет, поэтому соберём его и установим из исходников. Для этого сделаем следующее:
$ yum -y install gcc automake autoconf $ yum -y install openssl-devel $ yum -y install dovecot-devel $ cd /usr/local/src $ wget http://dl.atrpms.net/all/dovecot-devel-2.2.10-1_14.el7.x86_64.rpm $ rpm -ivh --nodeps dovecot-devel-2.2.10-1_14.el7.x86_64.rpm $ wget http://hg.dovecot.org/dovecot-antispam-plugin/archive/tip.tar.gz -O dovecot-antispam.tar.gz $ tar zxvf dovecot-antispam.tar.gz $ cd dovecot-antispam-plugin-*/ $ ./autogen.sh $ ./configure --prefix=/usr --with-dovecot=/usr/lib64/dovecot $ sed -i 's/copying_via_save/copying/g' src/mailbox.c $ make install $ cd ../ $ rm -rf dovecot-antispam-plugin-*/
В CentOS 6 присутствовал пакет dovecot-devel в репозитории EPEL, поэтому не было нужды его скачивать с сайта atrpms.net. В CentOS 7 на момент написания статьи этого пакета в репозитории EPEL ещё не было, так что, если команда yum -y install dovecot-devel выдаст ошибку – скачайте пакет вручную и установите. А если пакет установится из репозитория – скачивать и устанавливать его вручную не нужно будет.
Если в момент выполнения команды make install мы увидим следующие ошибки:
signature-log.c: In function ‘signature_log_transaction_begin’: signature-log.c:122: error: too many arguments to function ‘dict_init’ Failed to compile signature-log.c (plugin)! make[3]: *** [signature-log.plugin.o] Error 1 make[2]: *** [all] Error 2 make[1]: *** [src] Error 2 make: *** [all] Error 2
нужно будет сделать следующее:
$ nano -w src/signature-log.c
меняем строки:
if (dict_init(cfg->dict_uri, DICT_DATA_TYPE_STRING, cfg->dict_user,
cfg->base_dir, &sltc->dict, NULL))
на строки:
sltc->dict =
dict_init(cfg->dict_uri, DICT_DATA_TYPE_STRING, cfg->dict_user,
cfg->base_dir);
if (sltc->dict == NULL)
$ make install
$ cd ../
$ rm -rf dovecot-antispam-plugin-*/
Если ошибок не будет – значит всё ок.
Теперь пропишем скомпилированный и установленный плагин в настройки dovecot:
$ nano -w /etc/dovecot/conf.d/90-plugin.conf
plugin {
antispam_backend = dspam
antispam_spam = Spam
antispam_trash = Trash
antispam_unsure = Trash
antispam_dspam_binary = "/usr/bin/dspam"
antispam_dspam_args = "--user;dspam;--source=error;--signature=%%s;-d;%u"
antispam_signature = X-DSPAM-Signature
}
$ nano -w /etc/dovecot/conf.d/20-imap.conf
mail_plugins = $mail_plugins antispam
Настройка SELinux для плагина dovecot-antispam
$ nano -w dspam-dovecot.te
module dspam-dovecot 2.20;
require {
type dovecot_t;
type dovecot_deliver_t;
type dspam_exec_t;
type dspam_var_lib_t;
type httpd_dspam_rw_content_t;
type mysqld_t;
type mysqld_db_t;
type mysqld_var_run_t;
type usr_t;
type var_t;
type var_lib_t;
type cron_var_lib_t;
class dir { search getattr };
class file { lock rename read create append write getattr link unlink open execute execute_no_trans };
class process signull;
class sock_file write;
class unix_stream_socket connectto;
}
allow dovecot_deliver_t var_t:file { rename read create write getattr link unlink open };
allow dovecot_deliver_t self:process signull;
allow dovecot_t dovecot_deliver_t:process signull;
allow dovecot_t dspam_exec_t:file { read open execute execute_no_trans };
allow dovecot_t dspam_var_lib_t:dir { search getattr };
allow dovecot_t dspam_var_lib_t:file { lock read getattr open append write };
allow dovecot_t httpd_dspam_rw_content_t:dir { search getattr };
allow dovecot_t httpd_dspam_rw_content_t:file { lock read getattr open append write };
allow dovecot_t mysqld_t:unix_stream_socket connectto;
allow dovecot_t mysqld_db_t:dir search;
allow dovecot_t mysqld_var_run_t:sock_file write;
allow dovecot_t usr_t:file { read getattr open };
allow dovecot_t var_lib_t:file { lock read getattr open append write };
allow dovecot_t cron_var_lib_t:file { lock getattr open append };
$ checkmodule -M -m dspam-dovecot.te -o dspam-dovecot.mod
checkmodule: loading policy configuration from dspam-dovecot.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 17) to dspam-dovecot.mod
$ semodule_package -m dspam-dovecot.mod -o dspam-dovecot.pp
$ semodule -i dspam-dovecot.pp
$ rm -f dspam-dovecot.{mod,pp}
После настройки плагина – перезапустим dovecot:
$ systemctl restart dovecot
$ systemctl status dovecot
dovecot.service - Dovecot IMAP/POP3 email server
Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled)
Active: active (running) since Sat 2014-11-29 02:12:50 MSK; 4s ago
Process: 32357 ExecStartPre=/usr/libexec/dovecot/prestartscript (code=exited, status=0/SUCCESS)
Main PID: 32361 (dovecot)
CGroup: /system.slice/dovecot.service
├─32361 /usr/sbin/dovecot -F
├─32364 dovecot/anvil
├─32365 dovecot/log
└─32367 dovecot/config
Nov 29 02:12:50 example.com systemd[1]: Started Dovecot IMAP/POP3 email server.
Nov 29 02:12:51 example.com dovecot[32361]: master: Dovecot v2.2.10 starting up for imap, sieve (core dumps disabled)
Сейчас можете попробовать поместить письмо в папку Spam и посмотреть в веб-интерфейсе DSpam, поменялся ли статус у данного письма во вкладке «История».
Так же можно посмотреть, нет ли ошибок в SELinux:
$ cat /var/log/audit/audit.log | grep -e "dspam|dovecot" | grep AVC | ausearch -i
Если ошибок нет, а статус письма в веб-интерфейсе DSpam меняется – значит мы настроили всё правильно.
Обновление от 18.01.2016
Во время очередного обновления CentOS, отказались обновляться пакеты dovecot:
mail:~# yum -y update
Loaded plugins: changelog, fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.schlundtech.de
* epel: fedora.uib.no
* extras: ftp-stud.fht-esslingen.de
* updates: mirror.ratiokontakt.de
Resolving Dependencies
--> Running transaction check
---> Package dovecot.x86_64 1:2.2.10-4.el7_0.1 will be updated
---> Package dovecot.x86_64 1:2.2.10-5.el7 will be an update
---> Package dovecot-mysql.x86_64 1:2.2.10-4.el7_0.1 will be updated
---> Package dovecot-mysql.x86_64 1:2.2.10-5.el7 will be an update
---> Package dovecot-pigeonhole.x86_64 1:2.2.10-4.el7_0.1 will be updated
---> Package dovecot-pigeonhole.x86_64 1:2.2.10-5.el7 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Updating:
dovecot x86_64 1:2.2.10-5.el7 base 3.2 M
dovecot-mysql x86_64 1:2.2.10-5.el7 base 65 k
dovecot-pigeonhole x86_64 1:2.2.10-5.el7 base 303 k
Transaction Summary
=============================================================================
Upgrade 3 Packages
Total size: 3.5 M
Downloading packages:
Running transaction check
ERROR with transaction check vs depsolve:
dovecot = 1:2.2.10-1_14.el7 is needed by (installed) dovecot-devel-1:2.2.10-1_14.el7.x86_64
** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:
1:dovecot-devel-2.2.10-1_14.el7.x86_64 has missing requires of dovecot = ('1', '2.2.10', '1_14.el7')
Your transaction was saved, rerun it with:
yum load-transaction /tmp/yum_save_tx.2016-01-18.09-35.YDfLDF.yumtx
yum нам предлагаем выполнить yum check, что ж, выполним:
mail:~# yum check
Loaded plugins: changelog, fastestmirror
1:dovecot-devel-2.2.10-1_14.el7.x86_64 has missing requires of dovecot = ('1', '2.2.10', '1_14.el7')
Error: check all
Ожидаемо не помогло. Окей, удалим пакет который нам мешает, обновим оригинальные пакеты, а потом опять установим dovecot-devel.
mail:~# yum -y remove dovecot-devel.x86_64 Loaded plugins: changelog, fastestmirror Resolving Dependencies --> Running transaction check ---> Package dovecot-devel.x86_64 1:2.2.10-1_14.el7 will be erased --> Finished Dependency Resolution Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Removing: dovecot-devel x86_64 1:2.2.10-1_14.el7 installed 906 k Transaction Summary ============================================================================= Remove 1 Package Installed size: 906 k Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Erasing : 1:dovecot-devel-2.2.10-1_14.el7.x86_64 1/1 Verifying : 1:dovecot-devel-2.2.10-1_14.el7.x86_64 1/1 Removed: dovecot-devel.x86_64 1:2.2.10-1_14.el7 Complete! mail:~# yum -y update Loaded plugins: changelog, fastestmirror Loading mirror speeds from cached hostfile * base: centos.schlundtech.de * epel: fedora.uib.no * extras: ftp-stud.fht-esslingen.de * updates: centos.copahost.com Resolving Dependencies --> Running transaction check ---> Package dovecot.x86_64 1:2.2.10-4.el7_0.1 will be updated ---> Package dovecot.x86_64 1:2.2.10-5.el7 will be an update ---> Package dovecot-mysql.x86_64 1:2.2.10-4.el7_0.1 will be updated ---> Package dovecot-mysql.x86_64 1:2.2.10-5.el7 will be an update ---> Package dovecot-pigeonhole.x86_64 1:2.2.10-4.el7_0.1 will be updated ---> Package dovecot-pigeonhole.x86_64 1:2.2.10-5.el7 will be an update --> Finished Dependency Resolution Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Updating: dovecot x86_64 1:2.2.10-5.el7 base 3.2 M dovecot-mysql x86_64 1:2.2.10-5.el7 base 65 k dovecot-pigeonhole x86_64 1:2.2.10-5.el7 base 303 k Transaction Summary ============================================================================= Upgrade 3 Packages Total size: 3.5 M Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Updating : 1:dovecot-2.2.10-5.el7.x86_64 1/6 Updating : 1:dovecot-pigeonhole-2.2.10-5.el7.x86_64 2/6 Updating : 1:dovecot-mysql-2.2.10-5.el7.x86_64 3/6 Cleanup : 1:dovecot-mysql-2.2.10-4.el7_0.1.x86_64 4/6 Cleanup : 1:dovecot-pigeonhole-2.2.10-4.el7_0.1.x86_64 5/6 Cleanup : 1:dovecot-2.2.10-4.el7_0.1.x86_64 6/6 Verifying : 1:dovecot-pigeonhole-2.2.10-5.el7.x86_64 1/6 Verifying : 1:dovecot-2.2.10-5.el7.x86_64 2/6 Verifying : 1:dovecot-mysql-2.2.10-5.el7.x86_64 3/6 Verifying : 1:dovecot-mysql-2.2.10-4.el7_0.1.x86_64 4/6 Verifying : 1:dovecot-2.2.10-4.el7_0.1.x86_64 5/6 Verifying : 1:dovecot-pigeonhole-2.2.10-4.el7_0.1.x86_64 6/6 Updated: dovecot.x86_64 1:2.2.10-5.el7 dovecot-mysql.x86_64 1:2.2.10-5.el7 dovecot-pigeonhole.x86_64 1:2.2.10-5.el7 Complete! mail:~# cd /usr/local/src mail:/usr/local/src# wget http://dl.atrpms.net/all/dovecot-devel-2.2.10-1_14.el7.x86_64.rpm mail:/usr/local/src# rpm -ivh --nodeps dovecot-devel-2.2.10-1_14.el7.x86_64.rpm warning: dovecot-devel-2.2.10-1_14.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 66534c2b: NOKEY Preparing... ################################# [100%] Updating / installing... 1:dovecot-devel-1:2.2.10-1_14.el7 ################################# [100%]
Обновились. 🙂
Обновление от 08.12.2018
После очередного обновления CentOS, плагин dovecot-antispam перестал работать, т.к. плагины должны быть скомпилированы с актуальной версией пакета dovecot. Т.е. нужно было либо опять перекомпилировать пакет dovecot и устанавливать его, либо искать какое-нибудь более актуальное решение. Решение нашлось достаточно быстро, и плагин был удалён:
mail:~# yum -y remove dovecot-antispam.x86_64
mail:~# nano -w /etc/dovecot/conf.d/90-plugin.conf
plugin {
}
$ nano -w /etc/dovecot/conf.d/20-imap.conf
mail_plugins = $mail_plugins
$ nano -w /etc/dovecot/conf.d/90-sieve.conf
sieve_extensions = +notify +imapflags +vnd.dovecot.pipe +vnd.dovecot.environment
sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.environment
sieve_plugins = sieve_imapsieve sieve_extprograms
$ nano -w /etc/dovecot/conf.d/20-imap.conf
protocol imap {
mail_plugins = $mail_plugins imap_sieve
}
$ nano -w /etc/dovecot/conf.d/90-sieve-extprograms.conf
plugin {
# From elsewhere to Spam folder
imapsieve_mailbox1_name = Spam
imapsieve_mailbox1_causes = COPY
imapsieve_mailbox1_before = file:/usr/lib64/dovecot/sieve/mark-as-spam.sieve
# From Spam folder to elsewhere
imapsieve_mailbox2_name = *
imapsieve_mailbox2_from = Spam
imapsieve_mailbox2_causes = COPY
imapsieve_mailbox2_before = file:/usr/lib64/dovecot/sieve/mark-as-ham.sieve
sieve_pipe_bin_dir = /usr/lib64/dovecot/sieve
}
# systemctl restart dovecot.service
# systemctl status dovecot.service -l
● dovecot.service - Dovecot IMAP/POP3 email server
Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2018-12-08 23:52:24 MSK; 9s ago
Docs: man:dovecot(1)
http://wiki2.dovecot.org/
Process: 8025 ExecStop=/usr/bin/doveadm stop (code=exited, status=0/SUCCESS)
Process: 8037 ExecStart=/usr/sbin/dovecot (code=exited, status=0/SUCCESS)
Process: 8030 ExecStartPre=/usr/libexec/dovecot/prestartscript (code=exited, status=0/SUCCESS)
Main PID: 8040 (dovecot)
CGroup: /system.slice/dovecot.service
├─8040 /usr/sbin/dovecot
├─8041 dovecot/anvil
├─8042 dovecot/log
└─8044 dovecot/config
Dec 08 23:52:23 acmenet.ru systemd[1]: Starting Dovecot IMAP/POP3 email server...
Dec 08 23:52:24 acmenet.ru dovecot[8040]: master: Dovecot v2.2.36 (1f10bfa63) starting up for imap, sieve (core dumps disabled)
Dec 08 23:52:24 acmenet.ru systemd[1]: Started Dovecot IMAP/POP3 email server.
$ nano -w /usr/lib64/dovecot/sieve/mark-as-spam.sieve
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if environment :matches "imap.user" "*" {
set "username" "${1}";
}
pipe :copy "dspam-learn-spam.sh" [ "${username}" ];
$ nano -w /usr/lib64/dovecot/sieve/mark-as-ham.sieve
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if environment :matches "imap.mailbox" "*" {
set "mailbox" "${1}";
}
if string "${mailbox}" "Trash" {
stop;
}
if environment :matches "imap.user" "*" {
set "username" "${1}";
}
pipe :copy "dspam-learn-ham.sh" [ "${username}" ];
$ nano -w /usr/lib64/dovecot/sieve/dspam-learn-spam.sh
#!/bin/sh
exec /usr/bin/dspam --client --user ${1} --class=spam --source=error
$ nano -w /usr/lib64/dovecot/sieve/dspam-learn-ham.sh
#!/bin/sh
exec /usr/bin/dspam --client --user ${1} --class=innocent --source=error
$ sievec /usr/lib64/dovecot/sieve/mark-as-spam.sieve
$ sievec /usr/lib64/dovecot/sieve/mark-as-ham.sieve
$ chmod +x /usr/lib64/dovecot/sieve/dspam-learn-ham.sh /usr/lib64/dovecot/sieve/dspam-learn-spam.sh
Если в mail warning log'е будут появляться ошибки вида:
2018 Dec 9 00:05:06 dspam[8739]: Signature retrieval for '5c0c155726779832043448
' failed
2018 Dec 9 00:05:06 dspam[8739]: Unable to find a valid signature. Aborting.
2018 Dec 9 00:05:06 dspam[8739]: process_message returned error -5. dropping message.
Значит нужно раскомментировать одну строку в конфигурационном файле DSpam'а.
$ nano -w /etc/dspam.conf
Broken lineStripping
Анатолий
05.03.2015 - 01:43
Добрый день! Спасибо за отличную статью!
Хотел узнать, пробовали ли вы использовать dspam-milter, для интеграции dspam с postfix?
Если да, был бы очень признателен за описание процесса настройки.
Успехов!
Wakko
05.03.2015 - 01:44
Добрый.
Не очень понял вопрос. Дспам ведь и так интегрируется с постфиксом. Постфикс каждое письмо обрабатывает дспамом. Разве нет?
Анатолий
05.03.2015 - 13:35
В вашем примере dspam интегрируется с postfix посредством SMTP протокола. Мой вопрос был про интеграцию посредством технологии milter, что дает ряд преимуществ. Нативной поддержки milter в dspam нет, но есть пакет dspam-milter (https://github.com/whyscream/dspam-milter), который позволяет настроить взаимодействие postfix и dspam, посредством данной технологии.
Wakko
05.03.2015 - 13:36
Понято. Пока не делал. Дополнительно только dkim прикрутил. Надо будет выложить описание.
Анатолий
05.03.2015 - 13:53
Было бы хорошо.
По milter, я сейчас пытаюсь это дело прикрутить, если что-то выйдет, отпишусь тут.
P.S. вот еще интересная вещь как по мне: http://www.gabacho-net.jp/en/anti-spam/presentation.pdf
Андрей
28.10.2015 - 15:29
Подскажите пожалуйста, почему возникает такая ошибка?
В интернете много информации по написанию .te файлов и по анализу ошибок selinux, много чего перепробовал,но пока не нашёл решения. Подскажите пожалуйста в каком направлении искать
$ semodule -i dspam-dovecot.pp
libsepol.print_missing_requirements: dspam-dovecot’s global requirements were not met: type/attribute httpd_dspam_rw_content_t (No such file or directory).
libsemanage.semanage_link_sandbox: Link packages failed (No such file or directory).
semodule: Failed!