Содержание[Скрыть]
- 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-670d76f696f3e524458591-63625db198d72592156754 ]%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
1 |
%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[/crayon]
Теперь создадим в базе 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 |
$ 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 |
$ 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 |
$ 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 |
$ 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 |
$ 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 |
$ 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 |
$ 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 |
нужно будет сделать следующее:
1 2 3 4 5 6 7 8 |
$ 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 |
$ 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 |
$ 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-mysqlx86_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 |
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-develx86_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-mysqlx86_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 |
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 |
Ваш комментарий будет первым