【邮件服务器配置教程系列三】在 CentOS7上为 Postfix 邮件服务器配置 Spamassassin 反垃圾软件

本文是邮件服务器配置教程系列三,我们在系列一介绍了基本的 Postfix + Dovecot + Cyrus-sasl 快速实现安全邮件服务器的配置,在系列二引入了反病毒 Clamav 的配置,我们在本文将重磅介绍邮件系统里十分重要的反垃圾软件 Spamassassin 的配置。

1. 安装和启动
偷懒的做法就是 *
# yum install spamass*
这样,系统会安装如下4个软件包:

spamass-milter-0.4.0-7.el7.x86_64
spamassassin-iXhash2-2.05-12.el7.noarch
spamassassin-3.4.0-2.el7.x86_64
spamass-milter-postfix-0.4.0-7.el7.noarch

启动:
# for cmd in enable start status; do systemctl $cmd spamassassin spamass-milter; done

2. 配置:

系统带有详尽的 /usr/share/doc/spamassassin-3.4.0/README ,是很好的参考文档。要特别注意阅读一下:
/usr/share/doc/spamassassin-3.4.0/README.RHEL.Fedora,然后是 /usr/share/doc/spamassassin-3.4.0/USAGE

编辑 /etc/sysconfig/spamassassin 文件如下:

SPAMDOPTIONS=”-d -i 127.0.0.1 -c -m5 -H -s 2048000 -D\
–socketpath /run/spamassassin/spamd.sock \
–socketgroup=postfix \
–socketmode=0660 \

具体各参数的含义,可以 man spamd 查看,例如 -i 就是侦听的 IP 地址,spamd 会默认听 783 端口。(-D 是 debug,在系统调试完毕后,应该去掉它。),我们设定邮件的最大尺寸为 2048000字节,大于这个长度的邮件将不会检查是否为垃圾邮件。

在  /etc/sysconfig/spamass-milter-postfix  里,指定 SOCKET=/run/spamass-milter/postfix/sock

在 /etc/sysconfig/spamass-milter 里, 指定
EXTRA_FLAGS=”-r 7 -i 127.0.0.1 -R \”Dude, Don’t Spam!\””
Spam 分值7分以上的就会被 Reject 掉,收件人不能收到邮件。-R 指定收件人收到的退信信息。-i 忽略来自 127.0.0.1 的邮件。

编辑 /etc/postfix/main.cf,添加或编辑如下行(其中 clamav 部分是反病毒的 milter, 两个 milter 前后顺序没有关系):
smtpd_milters = unix:/var/run/spamass-milter/postfix/sock unix:/var/run/clamav-milter/clamav-milter.socket
milter_connect_macros = j {daemon_name} v {if_name} _
milter_default_action = tempfail

编辑 /etc/mail/spamassassin/local.cf ,添加如下信息:

required_hits 6.5
rewrite_header Subject ****SPAM(_SCORE_)****
report_safe 0
use_bayes 1
skip_rbl_checks 0
use_razor2 1
use_pyzor 1
blacklist_from *@sohu.com *@mailfb.com

ok_locales zh en
score HEADER_8BITS 0
score HTML_COMMENT_8BITS 0
score SUBJ_FULL_OF_8BITS 0
score UPPERCASE_25_50 0
score UPPERCASE_50_75 0
score UPPERCASE_75_100 0
header __FROM_TEATIME Received =~ /from test.com.cn/i
header __FROM_TEATIME_IP Received =~ /[12.34.56.78]/
meta FROM_TEATIME_BUT_IP_ERROR (__FROM_TEATIME)
describe FROM_TEATIME_BUT_IP_ERROR From test.com.cn but ip not match
score FROM_TEATIME_BUT_IP_ERROR 8
score NO_REAL_NAME 4.000
score SPF_FAIL 10.000
score SPF_HELO_FAIL 10.000
score BAYES_99 4.300
score BAYES_90 3.500
score BAYES_80 3.000

以上的 required_hits 可以根据自己需要调整,其他的 test.com.cn 的也可以调整为自己的域名和 IP。
如果没有 pyzor 软件包的,需要 yum install pyzor.

Spamassassin 也需要更新自己的规则,这个通过 sa-update 实现,如果有必要可以编辑 /etc/sysconfig/sa-update。
spamassassin –lint 检查配置语法

milter 要通过 spamc 和 spamd 通信, 我们需要配置 /etc/mail/spamassassin/spamc.conf

-U /run/spamassassin/spamd.sock
-u postfix
-d 127.0.0.1
-p 783
# max message size for scanning
-s 2048000

3. 测试

这样,重启 postfix 和 spamassassin 以及 spamass-milter 服务后,我们可以在 /var/log/maillog 里看到大量的反垃圾邮件的调试信息。

例如
Feb 22 16:16:11 mailhostname spamd[5137]: check: is spam? score=30.045 required=6.5
Feb 22 16:16:11 mailhostname spamd[5137]: spamd: result: Y 30 – DEAR_SOMETHING,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,FREEMAIL_REPLY,FROM_MISSP_EH_MATCH,FROM_MISSP_FREEMAIL,FROM_MISSP_SPF_FAIL,RDNS_NONE,SPF_FAIL,SPF_HELO_FAIL,TO_NO_BRKTS_FROM_MSSP,URIBL_BLACK scantime=22.3,size=4652,user=sa-milt,uid=994,required_score=6.5,rhost=localhost,raddr=127.0.0.1,rport=44758,mid=<20180222161526.AC959BA1B7CA1E8B@sina.com>,autolearn=spam autolearn_force=no

Feb 22 16:16:11 mailhostname spamd[5137]: timing: total 22293 ms – read_scoreonly_config: 0.75 (0.0%), signal_user_changed: 1.90 (0.0%), parse: 0.81 (0.0%), extract_message_metadata: 25 (0.1%), get_uri_detail_list: 3.4 (0.0%), tests_pri_-1000: 2.6 (0.0%), tests_pri_-950: 1.32 (0.0%), tests_pri_-900: 1.41 (0.0%), tests_pri_-400: 1.16 (0.0%), tests_pri_0: 22173 (99.5%), check_dkim_signature: 0.52 (0.0%), check_dkim_adsp: 10042 (45.0%), check_spf: 6650 (29.8%), poll_dns_idle: 6600 (29.6%), check_razor2: 5003 (22.4%), check_pyzor: 319 (1.4%), tests_pri_500: 13 (0.1%), learn: 24 (0.1%), b_learn: 20 (0.1%), b_count_change: 10 (0.0%), rewrite_mail: 0.83 (0.0%), copy_config: 27 (0.1%)

Feb 22 16:16:11 mailhostname postfix/cleanup[5366]: C301A1A0F0B: milter-reject: END-OF-MESSAGE from unknown[58.248.4.136]: 5.7.1 Blocked by SpamAssassin; from=<maxpo01@sina.com> to=<info@freelamp.com> proto=ESMTP helo=<sina.com>

在接收到的邮件里,我们可以看到这样的邮件头:

X-Spam-Status: No, score=0.0 required=6.5 tests=HTML_MESSAGE,UNPARSEABLE_RELAY
 autolearn=ham autolearn_force=no version=3.4.0
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mailhostname
X-Virus-Scanned: clamav-milter 0.99.3 at mailhostname
X-Virus-Status: Clean

前面两行表示 Spamassassin 的检测结果,后面两行是 Clamav 的检查结果。

我们可以用以下的语句查看那些被 reject 掉的 Spam 的分数。
# grep -B4 “milter-reject” /var/log/maillog|egrep ‘score|reject’|grep -v 4.7.1|less

或者,
# spamassassin -D </usr/share/doc/spamassassin-*/sample-spam.txt

检查 pyzor
# spamassassin -D pyzor </usr/share/doc/spamassassin-*/sample-spam.txt

作者: 甬洁网络

--移动互联网&物联网技术提供商