[Postfix进阶]Postfix配置SPF并禁止伪造发件人

in #postfix8 years ago

spf
最近讨论比较多的是邮件被判断为SPAM的一些补救措施,接下来的几篇文章都是关于postfix邮件系统。

当服务器接收到邮件时会检查域名的SPF记录与客户端IP是否匹配,如匹配就被认为是真实的邮件,不匹配就被认为是假冒的邮件(如果对方域名未做SPF记录肯能会被误报)。

额,至于什么是SPF,当然不是防晒指数,而是指Sender Policy Framework。翻译过来就是发信者策略架构,比较拗口,通常都直接称为SPF。

基本的SPF验证,请移驾到《Postfix添加DKIM协议,完善DNS中的SPF解析》查看。

下面说的是配置发信系统,附带SPF检测,配置本地检测系统。

安装不难,如下(算原创吧,亲身安装编辑):

编辑/etc/postfix/master.cf,添加:

接着编辑/etc/postfix/main.cf,添加:

注意:check_policy_service unix:private/policy-spf 必須放置于 reject_unauth_destination 后面。
重启下postfix即可生效。如果不生效的话,可用python来支持。yum install -y perl-Mail-SPF perl-Sys-Hostname-Long perl-NetAddr-IP wget https://launchpad.net/postfix-policyd-spf-perl/trunk/release2.010/+download/postfix-policyd-spf-perl-2.010.tar.gz tar zxvf postfix-policyd-spf-perl-2.010.tar.gz cp postfix-policyd-spf-perl-2.010/postfix-policyd-spf-perl /usr/local/lib/policyd-spf-perl chmod +x /usr/local/lib/policyd-spf-perlpolicy unix - n n - 0 spawn user=nobody argv=/usr/local/lib/policyd-spf-perlsmtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_sender_domain, reject_unauth_destination, check_policy_service unix:private/policy policy_time_limit = 3600

下载Python2.6.7.tar.bz2 :

解决系统python软链接指向python2.6版本后,yum不能正常工作
vi /usr/bin/yum将文本编辑显示的#!/usr/bin/python修改为#!/usr/bin/python2.4,:wq保存修改即可。
安装python版的policy-spf:

编辑/etc/postfix/master.cf,添加:

重启下postfix即可生效。python -V wget http://www.python.org/ftp/python/2.6.7/Python-2.6.7.tar.bz2 tar jxvf Python-2.6.7.tar.bz2 cd Python-2.6.7 ./configure $make && make install mv /usr/bin/python /usr/bin/python.bak cp /usr/local/bin/python2.6 /usr/bin/python python -Vwget https://launchpad.net/pypolicyd-spf/1.2/1.2/+download/pypolicyd-spf-1.2.tar.gz tar zxvf pypolicyd-spf-1.2.tar.gz cd pypolicyd-spf-1.2 python setup.py build python setup.py installpolicy-spf unix - n n - - spawn user=nobody argv=/usr/bin/python /usr/bin/policyd-spf


至于禁止发送伪造发件人邮件嘛,只要改改配置就好了。

编辑/etc/postfix/main.cf,添加或修改如下:

然后,新建用户与账号匹配表,如:

最后,生成hash数据库:
postmap /etc/postfix/sasl_sendersmtpd_sender_login_maps = hash:/etc/postfix/sasl_sender smtpd_sender_restrictions = reject_sender_login_mismatch smtpd_recipient_restrictions = permit_sasl_authenticatedecho "[email protected] root" > /etc/postfix/sasl_sender echo "[email protected] www" > /etc/postfix/sasl_sender echo "[email protected] www" > /etc/postfix/sasl_sender

Policy-spy默认不阻止验证失败的发件人邮件,会在邮件头部添加Received-SPF: softfail标签,如果要对其处理可使用Postfix过滤规则header_checks进行匹配操作。

在/etc/postfix/header_checks下,添加:
/Received-SPF: softfail/ REJECT
在/etc/postfix/main.cf中,添加:
header_checks = pcre:/etc/postfix/header_checks
ok,这样一切在服务器自身通不过SPF的会被禁止发送。


我会告诉你,我在添加邮件SPF验证的时候,postfix并没有生效么。。我的vps系统及postfix版本,有点问题(猜的),所以,发送时并没有附带SPF结果。其他vps应该是没问题的。但是因为是本地其实功能不大,只是他在发出去的邮件会带Received-SPF: pass,使被检测为SPAM程度减少。