说明:
虽然通过上篇postfix增加spf过滤可以过滤掉很多伪造域名的邮箱。但如果对方没有txt域名解析记录,但又是合法的,又需要接收对方的邮件,那怎么办?
这时就需要通过配置postfix的白名单黑名单,让它跳过指定域名的spf认证。
postfxi里有2个完全不同的参数来实现白名单黑名单
check_client_access check_client_access hash:/etc/postfix/client_checks,通过客户端ip,ip段或主机名屏蔽
check_sender_access check_sender_access hash:/etc/postfix/sender_checks,通过判断发件人邮件地址(位于from段)屏蔽
这里一点很重要,check_client_access 和 check_sender_access 需要定义在smtpd_recipient_restrictions的前面。这样做,可能避免白名单,黑名单里定义的邮件地址,ip被postfix的其它过滤条件匹配到。smtpd_recipient_restrictions是从上到下匹配过滤的
具体:
1. 在main.cf的smtpd_recipient_restrictions应用白名单黑名单
# cat /etc/postfix/main.cf smtpd_recipient_restrictions = check_client_access hash:/etc/postfix/client_checks, check_sender_access hash:/etc/postfix/sender_checks, etc.... etc....
接下来,我们分别在白名单,黑名单上定义指定邮箱,ip采取的动作,ok或reject。ok为允许,reject为拒绝
2. 限制本系纺邮件使用人的ip,允许客户端哪些客户端可以进行SMTP连接
# cat /etc/postfix/client_checks example.com REJECT No spammers .example.com REJECT No spammers, from your subdomain 123.456.789.123 REJECT Your IP is spammer 123.456.789.0/24 REJECT Your IP range is spammer 321.987.654.321 OK example1.com OK
3. 限制域名,哪些邮箱地址可以发送到本系统,拒绝哪些域名发信到本系统。限制允许MAIL FROM命令发件人
# cat /etc/postfix/sender_checks example.com REJECT env. from addr any@example.com rejected .example.com REJECT env. from addr any@sub.example.com rejected user@example.com REJECT We don't want your email example2.com OK
上面2个文件只要有修改,记得运行postmap,以便postfix能能查找得到。记得reload postfix
4. 重启生效
# postmap /etc/postfix/client_checks # postmap /etc/postfix/sender_checks # /etc/init.d/postfix reload