Используются системные пользователи, т.к. пользователям нужен доступ по ftp в домашние директории для редактирования sieve-фильтров, а поднимать LDAP/RDBMS мне было лень, точнее, хотелось оставить инсталляцию минимальной. MTA и оба MDA общаются через pipe-интерфейс, т.к. Dovecot совсем не умеет LMTP, а использовать 2 разных механизма (LMTP для Postfix -> DSPAM и pipe для DSPAM -> Dovecot) опять-таки не хотелось. Итак, конфиги:
mailbox_command = /usr/bin/dspam --deliver=innocent --user $LOGNAME — -d $LOGNAME
unknown_local_recipient_reject_code = 450
mynetworks = $config_directory/mynetworks
Home /var/lib/dspam
Storage Driver /usr/lib64/libhash_drv.so
Hash Auto Extend on
Untrusted Delivery Agent «/usr/lib64/dovecot/deliver -d %u»
Training Mode teft
Test Conditional Training on
Feature whitelist
Algorithm graham burton
PValue bcr
Preference «spamAction=tag»
Preference «signatureLocation=headers»
Preference «showFactors=off»
Preference «spamSubject= "
Notifications off
Local MX 127.0.0.1
System Log on
User Log on
protocols = imap
shutdown_clients = yes
ssl_disable = yes
disable_plaintext_auth = no
mail_location = mbox:/mail/data:INDEX=~/mail/index
lock_method = fcntl
protocol pop3 {
protocol lda {
postmaster_address = root@localhost
mail_plugins = cmusieve
protocol imap {
passdb pam {
}
userdb passwd {
}
user = root
socket listen {
mode = 0666
plugin {
antispam_signature = X-DSPAM-Signature
antispam_spam = SPAM
antispam_trash = Trash
antispam_dspam_binary = /usr/bin/dspam
antispam_dspam_args = --user %u
Без дополнительных телодвижений такая конфигурация не обеспечивает ничего интересного, кроме дополнительных тормозов при анализе корреспонденции, результат анализа помещается в заголовок X-DSPAM-Result (Spam или Innocent). Но наличие плагина antispam (http://johannes.sipsolutions.net/Projects/dovecot-antispam) позволяет путем перемещения писем в папку SPAM и из нее обучать dspam, благодаря чему последний рано или поздно научится выставлять заголовки X-DSPAM-Result правильно. Можно ускорить этот процесс, если провести предварительное обучение с помощью утилиты dspam_corpus. Наконец, если каждый пользователь напишет у себя в mail/filter/filter.sieve (можно, впрочем, и глобальный фильтр для всех пользователей описать) нечто вроде:
if header :contains “X-DSPAM-Result” “Spam” {
то все, что DSPAM пометил как спам, пойдет прямиком в папку SPAM.