我已经在我的centos 5.10上安装了postfix,dovecot,Clamav,Spamassassin和amavisd-new。 教程在这里:http://catatanlepas.com/komputer/aplikasi/server-mail/postfix/359-instalasi-postfix-menggunakan-dovecot-di-centos-5-5
我只是没有在该教程上安装Razor,Pyzor,dan DCC。
/ var / log / maillog中的一切正常,如果垃圾邮件没有进入收件箱,但我想将垃圾邮件移动到垃圾邮件文件夹。
我的问题是: 1.如何在我的网络邮件上自动创建垃圾邮件文件夹,因为它只是创建收件箱,草稿和已发送项目,并且我的网络邮件上没有垃圾邮件文件夹。 2.如何将垃圾邮件移动到每个用户的垃圾邮件文件夹(我在/ var / vmail上创建用户)
请帮助我,我在谷歌搜索了5天,我就是这个堆栈:(
谢谢。
答案 0 :(得分:28)
我 - 设置您的电子邮件递送以使用Dovecot LDA:
OP链接的原始网站处于离线状态,但我相信电子邮件的发送是通过sendmail
程序进行的,应该通过Dovecot LDA完成,以满足您的需求。 (为避免电子邮件原始标题更改)。
编辑Postfix的master.cf
(开头):
smtp inet n - - - - smtpd -o content_filter=spamassassin
在文件的末尾:
spamassassin unix - n n - - pipe
flags=DROhu user=vmail:vmail argv=/usr/bin/spamc -f -e
/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}
现在编辑Postfix的main.cf
并添加(可选,请检查(3)):
spamassassin_destination_recipient_limit = 1
现在,您的电子邮件将通过Dovecot LDA发送,不会更改标题。对于好奇的,这里是我的配置的一些细节:
user+nospam@example.com
的电子邮件将发送至user@example.com
收件箱) - 这就是我的原因已添加-d ${user}@${nexthop}
这将删除+
以及域名之前的所有内容。要启用此功能,还务必将recipient_delimiter = +
添加到main.cf
; flags=DROhu
,他们没有添加任何异常,但可以在这里理解:http://www.postfix.org/pipe.8.html; spamassassin_destination_recipient_limit = 1
需要确保每个收件人都被spamassassin单独处理。由于上面的D
标志(包括X-Original-To
标头),这是必需的。如果你不关心这个标题,你可以删除标志,这是不需要的。 II - 将您的垃圾邮件移至Junk
文件夹:
(在https://stackoverflow.com/a/32470349/560745的@Electronic Technologies的帮助下)
您还可以配置Dovecot将检测到的垃圾邮件移动到Junk
IMAP文件夹。请按照:
修改/etc/dovecot/conf.d/15-mailboxes.conf
并取消注释/添加Junk
文件夹(应位于namespace inbox
附近的mailbox Trash
部分):
mailbox Junk {
special_use = \Junk
}
使用dovecot-sieve
;
apt-get install dovecot-sieve
修改/etc/dovecot/conf.d/90-sieve.conf
并对该行进行评论:#sieve = ~/.dovecot.sieve
将/etc/dovecot/conf.d/90-plugin.conf
修改为:
plugin {
sieve = /etc/dovecot/sieve/default.sieve
}
修改/etc/dovecot/conf.d/15-lda.conf
和/etc/dovecot/conf.d/20-lmtp.conf
以匹配:
protocol lda/lmtp { # do not copy/paste this line!
mail_plugins = $mail_plugins sieve
}
警告:您可能在protocol
选项下有其他设置,请保留它们。行protocol lda/lmtp
更改了文件,保留原文。
创建文件夹/etc/dovecot/sieve/
使用以下内容创建文件/etc/dovecot/sieve/default.sieve
:
require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
fileinto "Junk";
}
更改虚拟电子邮件用户和组的文件夹权限,如:chown vmail:vmail /etc/dovecot/sieve/ -R
。如果你错过这个dovecot会抱怨!
重启所有内容:service postfix restart; service dovecot restart; service spamassassin restart
尝试向服务器上的某些电子邮件(来自外部服务器)发送电子邮件,首先是普通电子邮件,然后是另一个包含此主题的电子邮件:XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
。第二封电子邮件应该放入Junk
文件夹,第一封放入收件箱。
如果您第一次尝试时无效,请查看日志:tail -f /var/log/mail.log
并在tail
正在运行时发送电子邮件。良好的工作设置应报告stored mail into mailbox 'INBOX'
或stored mail into mailbox 'Junk'
。
答案 1 :(得分:7)
为Dovecot 2.1+ 修改/etc/dovecot/dovecot.conf:
namespace {
type = private
separator = .
inbox = yes
mailbox Trash {
auto = subscribe # autocreate and autosubscribe
special_use = \Trash
}
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox Junk {
auto = subscribe
special_use = \Junk
}
}
plugin {
sieve = /home/spam/default.sieve
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = $mail_plugins sieve
}
然后/etc/postfix/master.cf - 添加
spamassassin unix - n n - - pipe
user=vmail argv=/usr/bin/spamc -f -e /usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
(!!)user = vmail - 将用户更改为为spamassassin设置的用户
并将内容过滤器添加到smtp
smtp inet n - - - - smtpd -o content_filter=spamassassin
/etc/mail/spamassassin/local.cf
add_header all Status _YESNO_, score=_SCORE_ required=_REQD_ version=_VERSION_
#rewrite_header Subject *****SPAM*****
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status
我会将X-Spam标头添加到将用于以后筛选过滤的消息中 重启spamassassin,重装dovecot和postfix
将自动创建垃圾文件夹。
所有垃圾邮件将在本地传递到邮箱垃圾邮件
我还添加了筛选过滤器的示例,将所有标记为垃圾邮件的消息(上面的spamassassin配置)移动到垃圾文件夹。
require "fileinto";
if exists "X-Spam-Flag" {
if header :contains "X-Spam-Flag" "NO" {
} else {
fileinto "Junk";
stop;
}
}
答案 2 :(得分:0)
嗯,有几种方法,但这是我发现的工作方式。在你有postfix,dovecot,spamassassin和(我推荐procmail)设置之后,你可以告诉procmail / spamassassin如何将垃圾邮件分发到各种文件夹中。用dovecot。我使用以下4个文件夹:
spam (for known spam based on Bayes setting)
spam-learn (for spam that slipped through, you move it here)
spam-probably (for spam ID'd as probably spam by Bayes setting)
spam-unlearn (messages flagged as spam, that are NOT spam go here)
将文件夹设置和后缀配置为通过procmail过滤邮件:
mailbox_command = /usr/bin/procmail -a "$EXTENSION"
您现在可以设置procmailrc,将垃圾邮件放入收件箱中的正确位置。你的〜/ .procmailrc应该是这样的:
PATH=/usr/bin/vendor_perl:/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/Mail/
LOGDIR=$HOME/log
#DEFAULT=$HOME/Mail/
LOGFILE=$LOGDIR/procmail.log
VERBOSE=ON
## with spamc
:0fw: spamc.lock
* < 256000
| spamc
#| /usr/bin/vendor_perl/spamc
# Mails with a score of 15 or higher are almost certainly spam (with 0.05%
# false positives according to rules/STATISTICS.txt). Let's put them in a
# different mbox. (This one is optional.)
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
spam
#Mail/spam
# All mail tagged as spam (eg. with a score higher than the set threshold)
# is moved to "probably-spam".
:0:
* ^X-Spam-Status: Yes
spam-probably
#Mail/spam-probably
# Work around procmail bug: any output on stderr will cause the "F" in "From"
# to be dropped. This will re-add it.
:0
* ^^rom[ ]
{
LOG="*** Dropped F off From_ header! Fixing up. "
:0 fhw
| sed -e '1s/^/F/'
}
现在,让它全部自动运行的最后一个关键是使用fetchmail
扫描邮件,当它们到达您的收件箱时传递给procmail,将垃圾邮件/垃圾邮件放在正确的文件夹中并阅读邮件在垃圾邮件(删除)和垃圾邮件 - 忘记(学习为ham
)。一个典型的fetchmail脚本就是你的〜/ .fetchmailrc。它只包含轮询邮箱的命令:
poll mail.yourserver.com protocol IMAP : user yourname with password yourpass ssl \
sslfingerprint "D9:73:1A:FE:C6:7C:E7:9B:F1:31:F8:A1:A0:E1:F9:27"
(您可以通过简单地针对.fetchmailrc文件运行fetchmail --verbose
获取服务器指纹,它将打印服务器指纹,检查您当前的指纹,告诉您它们不匹配并关闭连接 - 但是 - 你刚刚获得了正确的指纹: - )
最后,通过阅读垃圾邮件学习和垃圾邮件 - 忘记文件夹,设置几个cron作业来运行这一切。每小时就够了。该脚本可能如下所示:
#!/bin/bash
## log file location and per-user name
LDIR=/home/admin/log
LFN="${LDIR}/${USER}.log"
## Retrieve and Process Spam & Ham from 'spam-learn' & 'spam-unlearn' folders
/usr/bin/fetchmail -a -s -n --folder spam-learn -m '/usr/bin/vendor_perl/sa-learn --spam' &>/dev/null
mss=$?
sleep 2
/usr/bin/fetchmail -a -s -n --folder spam-unlearn -m '/usr/bin/vendor_perl/sa-learn --ham' &>/dev/null
mhs=$?
## test and create log dir in noexist
[[ -d "$LDIR" ]] || mkdir -p "$LDIR"
if [[ -w "$LDIR" ]]; then
## check return from fetchmail and write log info
if [[ $(($mhs+$mss)) -le 2 ]]; then
echo "$(date +'%b %e %R:%S') $HOSTNAME ${0##*/}: sa-learn completed successfully for user $USER" >>$LFN
else
echo "$(date +'%b %e %R:%S') $HOSTNAME ${0##*/}: sa-learn FAILED for user $USER" >>$LFN
fi
fi
cron作业只需执行上面的spamv.sh文件:
05 * * * * /usr/local/bin/spamv.sh
我已经运行了近十年这样的服务器并且运行良好。培训文件位于用户的主目录中,可以轻松地逐个移动,为新用户提供良好的基础设置。祝好运。几年前我为openSuSE 11.0做了一个关于此设置的简短说明。那里可能还有一些信息。
P.S。 Rayzor值得装载。