提醒:本文最后更新于 2892 天前,文中所描述的信息可能已发生改变,请仔细核实。
最近讨论比较多的是邮件被判断为SPAM的一些补救措施,接下来的几篇文章都是关于postfix邮件系统。
当服务器接收到邮件时会检查域名的SPF记录与客户端IP是否匹配,如匹配就被认为是真实的邮件,不匹配就被认为是假冒的邮件(如果对方域名未做SPF记录肯能会被误报)。
额,至于什么是SPF,当然不是防晒指数,而是指Sender Policy Framework。翻译过来就是发信者策略架构,比较拗口,通常都直接称为SPF。
基本的SPF验证,请移驾到《Postfix添加DKIM协议,完善DNS中的SPF解析》查看。
下面说的是配置发信系统,附带SPF检测,配置本地检测系统。
安装不难,如下(算原创吧,亲身安装编辑):
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,添加:
user=nobody argv=/usr/local/lib/policyd-spf-perl
接着编辑/etc/postfix/main.cf,添加:
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 :
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:
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,添加:
user=nobody argv=/usr/bin/python /usr/bin/policyd-spf
重启下postfix即可生效。
至于禁止发送伪造发件人邮件嘛,只要改改配置就好了。
编辑/etc/postfix/main.cf,添加或修改如下:
smtpd_sender_restrictions =
reject_sender_login_mismatch
smtpd_recipient_restrictions =
permit_sasl_authenticated
然后,新建用户与账号匹配表,如:
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程度减少。
转载请注明转自:kn007的个人博客的《[Postfix进阶]Postfix配置SPF并禁止伪造发件人》