打造广告邮件克星
Linux之家
笔者前不久为单位安装了基于Linux的邮件系统,感觉其安全性与以前的系统相比的确有很大提高,让我这个管理员很是清闲了一阵子但是春节过后,不少同事反映邮箱里积压了大量的广告邮件,看来又得设置一下系统中的postfix、spamassassin组件,对这些垃圾邮件痛下杀手了。
postfix在系统中可以充当MTA,也就是起smtpd组件的作用,作为邮件转发用。我们要通过加上额外的“header”参数让后面的“spam filter”来识别邮件类型。postfix有两个主要的设定文件“main.cf”和“master.cf”,我们首先用文本编辑器编辑“main.cf”文件(/usr/local/etc/postfix/main.cf):
smtpd_client_restrictions =
check_client_access cidr:/etc/postfix/header-local
permit_mynetworks
check_client_access cidr:/etc/postfix/header-auth
permit_sasl_authenticated
check_client_access cidr:/etc/postfix/header-remote
check_client_access pcre:/etc/postfix/client_checks
reject_rbl_client relays.ordb.org //从此行开始获取网上垃圾邮件地址/服务器列表
reject_rbl_client list.dsbl.org
reject_rbl_client b1.spamcop.net
reject_rbl_client rbl.maps.vix.com
reject_rbl_client dul.maps.vix.com
reject_rbl_client relays.maps.vix.com
reject_rhsbl_client dns.rfc-ignorant.org
现在使用“PREPEND”参数加上如下几段自定义的“header”(头)设置:
header-local:
0.0.0.0/0 PREPEND X-TeaTime-Auth-LOCAL: LOCAL
header-auth:
0.0.0.0/0 PREPEND X-TeaTime-Auth-SASL: SASL
header-remote:
0.0.0.0/0 PREPEND X-TeaTime-Auth-NONE: NONE
这样的话, 如果邮件是从“mynetwork”(例如内网)的机器接收进来会只有“X-TeaTime-Auth-LOCAL: LOCAL”这一个“header”信息(头信息),如果邮件通过SASL(即Simple Authentication and Security Layer,是为基于连接协议提供辅助认证支持的一种方法)之后才收下则会有X-TeaTime-Auth-LOCAL: LOCAL、X-TeaTime-Auth-SASL: SASL两个“header”信息;如果邮件接收不属于上述两个情形, 则会有X-TeaTime-Auth-LOCAL: LOCAL、X-TeaTime-Auth-SASL: SASL、X-TeaTime-Auth-NONE: NONE三个“header”。我们就可以依据上述三个“header”的存在与否来给spamassassin提供信息进行广告邮件的判断 。
# auth
header __T_AUTH_LOCAL X-TeaTime-Auth-LOCAL =~ /^LOCAL/
header __T_AUTH_SASL X-TeaTime-Auth-SASL =~ /^SASL/
header __T_AUTH_NONE X-TeaTime-Auth-NONE =~ /^NONE/
meta T_AUTH_NONE (__T_AUTH_NONE)
describe T_AUTH_NONE Received from remote site without authenticated
score T_AUTH_NONE 0.001
meta T_AUTH_SASL (!__T_AUTH_NONE && __T_AUTH_SASL)
describe T_AUTH_SASL Received with authenticated user
score T_AUTH_SASL -4
meta T_AUTH_LOCAL (!__T_AUTH_LOCAL || !__T_AUTH_SASL)
describe T_AUTH_LOCAL Received from local network
score T_AUTH_LOCAL -4
这样可以让通过“local”等信任网段发来的邮件不被认为是广告邮件,而其他不符合条件的邮件则很可能被过滤。
以往我们只能在postfix收下邮件后, 再利用“content_filter”组件把邮件转给“amavisd-new”之类的程序模块进行检测, 也就是邮件实际上对发件人来说已经被收下来了,邮件服务器的资源依然被这些垃圾邮件占用着。
而在postfix的2.1版本中,我们可以让postfix在邮件收下来后,直接转给“amavisd-new”检测,然后才决定是否接受该邮件。
首先修改 main.cf文件,把“content_filter = smtp-amavis:[127.0.0.1]:10024”删除,修改master.cf文件,将原本的smtp-amavis的设置删除,将smtp段的设置改为:
smtp inet n - n - 32 smtpd
-o smtpd_proxy_filter=127.0.0.1:10024
-o smtpd_client_connection_count_limit=16
其中:“smtpd_proxy_filter”指定在DATA 命令结束后,把邮件交给filter(过滤器)检测。“smtpd_client_connect_count_limit”限制同时连接的数量。
这样的设置会让对方发邮件后,必须等检测结束后才会回应邮件发送成功或失败的信息,好处在于病毒邮件或者广告邮件是不会被收下(amavisd-new 会有备份文件留下)的,而且垃圾邮件发送者会收到系统退信,误认为发送地址有错误。
相信通过这样的设置后,我又能过上清闲的小网管生活了。