说明:Spam Locker是一款开放源代码,并以GPL授权发布,起源于APF技术,以SMTP行为识别为核心的反垃圾邮件系统。使用Perl语言撰写;

Spam Locker使用了多种目前反垃圾邮件领域的领先技术,比如本地黑白名单、灰名单技术,多RBL查询技术等等;

这些众多厂商引以为豪的反垃圾邮件技术,现在都可以通过Spam Locker免费使用;

Spam Locker是smtp阶段(邮件没收下来时),spamassassin是内容过滤阶段(邮件已经收下来了),所以2者可以混用。

参考:

http://wiki.extmail.org/spam_locker


1、安装Slockd

Spam Locker是Extmail团队设计开发的,因此在其官方YUM中下载安装:

也可以从本文附件中下载:

[root@mail ~]# rpm -ivh http://mirror.extmail.org/yum/emos/1.5/os/x86_64/EMOS/extsuite-slockd-0.99-1hzq.noarch.rpm

暂时关闭SPF插件功能

[root@mail ~]# vi /usr/local/slockd/config/plugin.cf
spf_plugin = no

设置DNS,Spam Locker很大程度依赖dns库,必须安装Net::DNS库才能正常工作(安装amavisd时已装上)

[root@mail ~]# echo "nameserver 202.101.224.68" >> /etc/resolv.conf


2、启动

[root@mail ~]# /usr/local/slockd/slockd-init start
[root@mail ~]# echo "/usr/local/slockd/slockd-init start" >> /etc/rc.d/rc.local
[root@mail ~]# ps aux|grep slockd
root     33573  0.0  0.6 137316  6428 ?        SNs  16:00   0:00 slockd (master)
root     33574  0.5  1.2 165324 12432 ?        SN   16:00   0:00 slockd (idle)
root     33575  0.5  1.2 165328 12416 ?        SN   16:00   0:00 slockd (idle)
root     33591  0.0  0.0 103256   848 pts/1    S+   16:01   0:00 grep slockd
[root@mail tools]# netstat -tnlp|grep 10030
tcp        0      0 127.0.0.1:10030             0.0.0.0:*                   LISTEN      33573/slockd (maste


3、查看日志

[root@mail ~]# tail /var/log/slockd.log
starting child 33574
starting child 33575


4、测试slockd

[root@mail ~]# cd /usr/local/slockd/tools
[root@mail tools]# perl policy_sig -h localhost -p 10030 --helo FOOBAR --ip 192.168.0.1 --from [email protected] --to [email protected]
action=554 blocked using zen.spamhaus.org, see http://bl.extmail.org/cgi/rbl?192.168.0.1

返回554表示slockd正常工作了,查看日志;

[root@mail tools]# tail /var/log/slockd.log
starting child 33697
12-05 16:24:45 [33693]: socket error: 没有那个文件或目录  #这个错误暂时没查到原因
12-05 16:24:45 [33693]: [554 blocked using zen.spamhaus.org, see http://bl.extmail.org/cgi/rbl?192.168.0.1 ,from= to= helo= ip=<192.168.0.1> client=<>]
12-05 16:24:45 [33693]: Policy mode: Nope
12-05 16:24:45 [33693]: [Session ended and closing socket]

打开报错中的url查看原因:

http://bl.extmail.org/cgi/rbl?192.168.0.1

192.168.0.1 已被APF server或slockd 的RBL拦截
您的主机发送了过量的垃圾邮件
您的主机是开放中继(open-relay)
您的主机已被病毒或蠕虫感染
您的主机配置不正确或不符合RFC规定

启用SPF插件并重启进程:

[root@mail ~]# vi /usr/local/slockd/config/plugin.cf
spf_plugin = yes
[root@mail ~]# /usr/local/slockd/slockd-init stop
[root@mail ~]# /usr/local/slockd/slockd-init start

再次测试则会报551:

12-05 16:03:22 [33574]: [551 see http://bl.extmail.org/cgi/[email protected] ,from= to= helo= ip=<192.168.0.1> client=<>]

打开报错中的url查看原因:

http://bl.extmail.org/cgi/[email protected]

您没有获得以 foo.com 名义发送邮件的授权
可能的拦截原因如下:
您的IP地址没获得Sender域名SPF记录所规定的授权
您的IP地址没获得Sender域名MSPF记录所规定的授权


5、配置postfix集成Slockd

[root@mail tools]# vi /etc/postfix/main.cf
#在收件人限制选项最后加上
smtpd_recipient_restrictions =
     ……,
     check_policy_service inet:127.0.0.1:10030 
[root@mail tools]# service postfix reload

 

 6、插件介绍

(1)插件配置

插件执行顺序是按照插件在配置文件plugin.cf中的位置决定的。

[root@mail tools]# vi /usr/local/slockd/config/plugin.cf
# spamtrap插件:垃圾邮件发件人地址的收集陷阱
spamtrap_plugin = yes
spamtrap_list = config/spamtrap_list
spamtrap_action = FILTER spamtrap:
# 本地黑白名单插件
localctrl_plugin = yes
#黑名单、白名单(同时控制收件和发件)
localctrl_bl = config/blacklist
localctrl_wl = config/whitelist
#发件人黑白名单
localctrl_sender_bl = config/sender_blacklist
localctrl_sender_wl = config/sender_whitelist
#收件人黑白名单
localctrl_recip_bl = config/recip_blacklist
localctrl_recip_wl = config/recip_whitelist
# SPF记录检测插件
spf_plugin = no
# 拒绝代码是硬错误还是软错误,NO为硬错误5xx
spf_soft_reject = no
# 合法则pass,返回OK,不合法则错误,如不确定则返回DUNNO
spf_default_action = DUNNO
# 多路RBL查询插件
dnsbl_plugin = no
# 拒绝代码是硬错误还是软错误,NO为硬错误5xx
dnsbl_soft_reject = no
# rbl 服务器列表
# 少数RBL可能拦截过于敏感,建议只使用以下两个RBL或者不使用
dnsbl_server_list =
  zen.spamhaus.org,
  bl.spamcop.net,
# 灰名单技术插件
greylist_plugin = yes
# 存储记录的数据库路径
greylist_db = /var/lib/greylist.db
# 延迟时间
greylist_delay = 60


(2)本地黑白名单插件说明:

过滤规则:

    邮件进来---提取发件人地址信息---whitelist---blacklist--sender_whitelist--

    --sender_blacklist----进入用户邮箱或下一处理过程

注意事项:

    blacklist\whitelist只支持域名,不能设单个邮箱账号或IP

    recipient_whitelist除了跳开Slockd的检测外,还连带跳开Amavisd/Dspam及Clamav等;

    建议不要在recipient_whitelist 里放置本地域;

    建议不要随便将容易被假冒的域,例如163等,放到sender_whitelist里。


(3)多路RBL查询插件说明:

slockd的RBL功能经常把大型运营商邮箱判断为垃圾并退回给发件人, 

把slockd的RBL服务禁用掉,使用dspam进行垃圾邮件的过滤;

默认自带了很多RBL服务器地址,如需要使用也只建议使用以下两个:

  zen.spamhaus.org,

  bl.spamcop.net,


(4)灰名单技术挂件说明:

灰名单技术设计大体上是基于一种重试的原则,即第一次看到某个IP要想给某个收件人发信,

那么它将简单的返回一个临时错误(4xx),并拒绝 此请求,正常的邮件服务器都会在一段

时间内(如半小时)重发一次邮件。greylist发现还是刚才同样的ip地址和收件人,认为此

ip是来自合法服务器 的,予以放行。如果是非正常的邮件,那么或者将永远也不再进行重试,

或者会疯狂重试,但由于间隔太近,而遭拒绝。因此,greylist只要设置一个合适 的放行间隔,

就可以在很大程度上对这类垃圾邮件有着良好的免疫能力。greylist的一大特点就是不会丢信,

正规的邮件服务器认为4xx错误只是临时 性、软性的错误,会隔一段时间重试,因此邮件还是可以投递成功。


7、测试Slockd黑白名单

(1)测试发件人黑名单

说明:postfix会放过本地域,测试拒绝外部邮箱发件人:

[root@mail ~]# vi /usr/local/slockd/config/sender_blacklist
[email protected]

说明:如果你搭建的是测试邮箱服务器,没有公网域名,可以在内网再搭建一个邮箱服务器,当作外部邮箱进行测试,在我以后的文档中也是必要的。


使用[email protected]邮箱给[email protected]发封邮件

会收到退信提示:

Recipient address rejected: blocked by localctrl, see http://bl.extmail.org/cgi/why?localctrl

查看slockd日志:

[root@mail ~]# tail /var/log/slockd.log 
12-08 10:52:41 [20849]: [504 blocked by localctrl,  see http://bl.extmail.org/cgi/why?localctrl ,
  from= to= helo= ip=<10.188.1.86> 
  client=]

结论:可以看到邮件成功被本地黑名单插件localctrl拒绝了。

(2)测试收件人黑名单

[root@mail ~]# vi /usr/local/slockd/config/receip_blacklist
[email protected]

使用[email protected]邮箱给[email protected][email protected]分别发封邮件,

结果test收不到,postmaster可以收到,

说明收件人黑名单成功阻止了本地域某邮箱账号接收外部邮件;

使用[email protected][email protected]发封邮件,

结果test可以收到,因为postfix信任本地域(mynetwork)邮箱,

要做到本地邮箱互发限制,可以使用postfix自带的访问表,以后在“限制”章节会讲。


结论:表明slockd已经和postfix整合了,可以使用黑名单阻止外部发件人以及阻止本地邮箱接收外部邮件。