说明: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中下载安装:
也可以从本文附件中下载:
[[email protected] ~]# rpm -ivh http://mirror.extmail.org/yum/emos/1.5/os/x86_64/EMOS/extsuite-slockd-0.99-1hzq.noarch.rpm
暂时关闭SPF插件功能
[[email protected] ~]# vi /usr/local/slockd/config/plugin.cf spf_plugin = no
设置DNS,Spam Locker很大程度依赖dns库,必须安装Net::DNS库才能正常工作(安装amavisd时已装上)
[[email protected] ~]# echo "nameserver 202.101.224.68" >> /etc/resolv.conf
2、启动
[[email protected] ~]# /usr/local/slockd/slockd-init start [[email protected] ~]# echo "/usr/local/slockd/slockd-init start" >> /etc/rc.d/rc.local [[email protected] ~]# 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 [[email protected] tools]# netstat -tnlp|grep 10030 tcp 0 0 127.0.0.1:10030 0.0.0.0:* LISTEN 33573/slockd (maste
3、查看日志
[[email protected] ~]# tail /var/log/slockd.log starting child 33574 starting child 33575
4、测试slockd
[[email protected] ~]# cd /usr/local/slockd/tools [[email protected] 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正常工作了,查看日志;
[[email protected] 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=<[email protected]> to=<[email protected]> helo=<FOOBAR> 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插件并重启进程:
[[email protected] ~]# vi /usr/local/slockd/config/plugin.cf spf_plugin = yes [[email protected] ~]# /usr/local/slockd/slockd-init stop [[email protected] ~]# /usr/local/slockd/slockd-init start
再次测试则会报551:
12-05 16:03:22 [33574]: [551 see http://bl.extmail.org/cgi/[email protected] ,from=<[email protected]> to=<[email protected]> helo=<FOOBAR> 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
[[email protected] tools]# vi /etc/postfix/main.cf #在收件人限制选项最后加上 smtpd_recipient_restrictions = ……, check_policy_service inet:127.0.0.1:10030 [[email protected] tools]# service postfix reload
6、插件介绍
(1)插件配置
插件执行顺序是按照插件在配置文件plugin.cf中的位置决定的。
[[email protected] 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会放过本地域,测试拒绝外部邮箱发件人:
[[email protected] ~]# 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日志:
[[email protected] ~]# tail /var/log/slockd.log 12-08 10:52:41 [20849]: [504 blocked by localctrl, see http://bl.extmail.org/cgi/why?localctrl , from=<[email protected]> to=<[email protected]> helo=<mail.eplantstore.com> ip=<10.188.1.86> client=<unknown>]
结论:可以看到邮件成功被本地黑名单插件localctrl拒绝了。
(2)测试收件人黑名单
[[email protected] ~]# 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整合了,可以使用黑名单阻止外部发件人以及阻止本地邮箱接收外部邮件。