Настройка спам-фильтра DSpam (dspam, dspam-web, dovecot-antispam) в CentOS/RHEL
Содержимое
- 1 Установка DSpam
- 2 Настройка DSpam
- 3 Настройка postfix
- 4 Настройка SELinux для DSpam и Postfix
- 5 Настройка fetchmail
- 6 Настройка Apache и DSpam-web
- 7 Настройка SELinux для DSpam-web и Apache
- 8 Настройка Dovecot
- 9 Установка плагина dovecot-antispam
- 10 Настройка SELinux для плагина dovecot-antispam
- 11 Обновление от 18.01.2016
- 12 Обновление от 08.12.2018
Установка DSpam
Сначала установим необходимые пакеты:
1
|
$ yum -y install dspam dspam-mysql dspam-web
|
В CentOS 6 пользователь dspam создавался с UID, который меньше 500 и возникала проблема с запуском веб-части DSpam в Apache, поэтому приходилось менять UID. Сейчас эта часть уже не актуальна:
1
2
3
|
$ usermod -u 597 dspam
$ find /usr -user 497 -exec chown dspam {} \;
$ find /var -user 497 -exec chown dspam {} \;
|
Создадим для DSpam базу и специального пользователя в MySQL:
1
2
3
4
5
6
7
8
9
10
11
|
$ 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 [crayon-63625db198d72592156754 ]%DSpamDB%
|
1
|
%DSpamDB%
|
Теперь создадим в базе MySQL необходимые для работы таблицы:
1
2
3
|
$ 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
$ 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:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
$ 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
$ 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:
1
|
$ systemctl restart postfix
|
Настройка fetchmail
Настроим fetchmail, для того, чтобы он принятую почту принимал с использованием DSpam:
1-й вариант (попроще)
1
2
3
4
|
$ 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:
1
|
"/usr/bin/dspam --user dspam --deliver=innocent --rcpt-to ${mailbox}"
|
прямо так, с кавычками.
Настройка Apache и DSpam-web
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
$ 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$ 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:
1
|
$ systemctl reload httpd.service
|
Теперь можно открыть в браузере ссылку https://mail.example.com:8443/ для доступа к DSpam-web.
Настройка Dovecot
Для того, чтобы Dovecot письма со спамом помещал в папку Spam, нужно проделать следующее:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
$ 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 нет, поэтому соберём его и установим из исходников. Для этого сделаем следующее:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ 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 мы увидим следующие ошибки:
1
2
3
4
5
6
7
|
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
|
нужно будет сделать следующее:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ 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:
1
2
3
4
5
6
7
8
9
10
11
12
|
$ 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
$ 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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ 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:
1
|
$ cat /var/log/audit/audit.log | grep -e "dspam|dovecot" | grep AVC | ausearch -i
|
Если ошибок нет, а статус письма в веб-интерфейсе DSpam меняется – значит мы настроили всё правильно.
Обновление от 18.01.2016
Во время очередного обновления CentOS, отказались обновляться пакеты dovecot:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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, что ж, выполним:
1
2
3
4
|
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
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 и устанавливать его, либо искать какое-нибудь более актуальное решение. Решение нашлось достаточно быстро, и плагин был удалён:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
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
|