kn007 avatar

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

kn007

Published: 17 Sept 2016 › Updated: 17 Sept 2016[Postfix进阶]Postfix配置SPF并禁止伪造发件人

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

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

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

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

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

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

安装不难,如下(算原创吧,亲身安装编辑):
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-perl

编辑/etc/postfix/master.cf,添加:
policy unix - n n - 0 spawn
user=nobody argv=/usr/local/lib/policyd-spf-perl

接着编辑/etc/postfix/main.cf,添加:
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unknown_sender_domain,
reject_unauth_destination,
check_policy_service unix:private/policy
policy_time_limit = 3600

注意:check_policy_service unix:private/policy-spf 必須放置于 reject_unauth_destination 后面。
重启下postfix即可生效。如果不生效的话,可用python来支持。

下载Python2.6.7.tar.bz2 :
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 -V

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

编辑/etc/postfix/master.cf,添加:
policy-spf unix - n n - - spawn
user=nobody argv=/usr/bin/python /usr/bin/policyd-spf

重启下postfix即可生效。


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

编辑/etc/postfix/main.cf,添加或修改如下:
smtpd_sender_login_maps = hash:/etc/postfix/sasl_sender
smtpd_sender_restrictions =
reject_sender_login_mismatch
smtpd_recipient_restrictions =
permit_sasl_authenticated

然后,新建用户与账号匹配表,如:
echo "root@kn007.net root" > /etc/postfix/sasl_sender
echo "no-reply@kn007.net www" > /etc/postfix/sasl_sender
echo "www@kn007.net www" > /etc/postfix/sasl_sender

最后,生成hash数据库:
postmap /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程度减少。

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

Written by

Read more #postfix posts


Best Posts From kn007

We have not curated any of kn007's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From kn007