垃圾过滤字段:
smtpd_client_restrictions : SMTP链接,可依据客户端的IP或者主机名判断是reject还是accept
smtpd_helo_restrictions : HELO 显示送信方的主机名,可依据它判断是reject还是accept
smtpd_sender_restrictions : MAIL FROM 寄信人的邮件地址,可据此添加限制条件
smtpd_recipient_restrictions : RCPT TO 收件人的邮件地址,可据此添加限制条件
smtpd_data_restrictions : DATA 表示下面要发邮件
header_checks : TO *** FROM *** SUBJECT *** 邮件头限制条件
body_checks : content 邮件内容限制条件
SMTP对话过程中的各个阶段,如果都过,postfix收下邮件。
限制条件与接收检查的信息:
reject_rbl_client :客户端IP倒置后与RBL(实时黑名单)网域名称构成主机名称向DNS查询,若有(已经在黑名单中) 拒绝
reject_rhsbl_client rblprovider.domain: 如果客户端的主机名在指定的网域rblprovider下有记录 拒绝
reject_unknown_client : 在SMTP client 通过socket建立连接时,postfix在DNS中查不到客户端IP对应的PTR记录(IP地址在DNS系统登记的主机名)+反向查找, 拒绝(unknown_client_reject_code(450))。
check_client_access type : mapname :DNS查出客户端IP地址的完整主机名之后去表中对照完成动作。
permit_naked_ip_address :
reject_invalid_hostname : 如果HELO命令提供的主机名无效 拒绝。invalid_hostname_reject_code默认501
reject_non_fqdn_hoshname :HELO命令不是RFC要求的完整主机名 拒绝(non_fqdn_reject_code(504))。
reject_unknown_hostname : HELO提供的主机名没有DNS A记录也没有MX记录 拒绝(unknow_hostname_reject_code 450),一般不是完整形式会被拒绝。
check_helo_access type:mapname :对比客户端在HELO命令中显示的主机名去表中对照完成动作。
reject_non_fqdn_sender : MAIL FROM寄信人地址的网域部分不是RFC要求的完整形式 拒绝(non_fqdn_reject_code(504))
reject_rhsbl_sender rblprovider.domain :收件人邮件地址在rblprovider.domain网域下有记录 拒绝
reject_unknown_sender_domain : MAIL FROM提供的邮件地址网域部分DNS A 或者MX无效 拒绝
check_sender_access type:mapname : 去表中对照RCPT TO收件人地址之后完成动作。
permit_auth_destination : 收件人位于postfix所辖(mydestination、inet_interfaces、virtual_mailbox_maps、virtual_alias_maps),OK
permit_mx_backup :
reject_non_fqdn_recipient : RCPT TO收信人网域部分不是RFC要求的完整形式 拒绝(non_fqdn_reject_code(504))
reject_unauth_destination : 收件人不在postfix所辖的域(由mydestionation定义),拒绝;relay_domains_reject_code 默认554。
reject_unknown_recipient_domain : RCPT TO提供收件人地址网域部分没有DNS A或者MX记录 拒绝 unknown_address_reject_code 450
check_recipient_access type:mapname :去表中对象MAIL FROM 发信人地址之后完成动作(OK、REJECT)。
reject_unauth_pipelining :拒绝 没确定服务器是否同意pipelining之前就开始流水线操作的邮件。(加速处理大宗邮件技术)
permit_mynetworks : 客户端的IP在mynetworks之列,OK
permit :无条件批准
reject :无条件拒绝
defer :无条件延时
warn_if_reject :拒绝动作改成警告(不能单独使用,需放在其他条件之前),一般用于测试新垃圾邮件。
header_checks 检查标题
mime_header_checks 检查标题MIME的相关字段
nested_header_checks 检查夹带附件的标题
body_checks 检查邮件正文
内置条件以permit_和reject_开头;自定义条件以check_*_access开头 type:mapname是自变量(访问表)。
内置条件的工作流程:permit通过即通过、reject拒绝即拒绝。
检查结果分为:DUNNO(默认通过) 、OK、REJECT
check_*_access动作:
OK、REJECT message、DUNNO、FILTER transport:nexthop(转交给指定filter)、HOLD message(没收,除非有动作领取)、DISCARD message(偷偷丢掉mail)、4xx message(缓解误判但会使MX备用系统充斥过多spam)、5xx message(永久拒绝)。
=======================================================================
简单例子1:
smtpd_helo_restrictions =
check_helo_access hash:/etc/postfix/helo_access
reject_invalid_hostname
其中 helo_access文件内容:
greatdeals.example.com REJECT
oreillynet.com OK
客户端1:HELO example
查询check_helo_access找不到指定的example主机名接着检查oreillynet.com 也不符合 拒绝
客户端2:HELO greatdeals.example.com
查询check_helo_access对应的动作是REJECT所以 拒绝
客户端3:HELO oreillynet.com
查询check_helo_access对应的动作是OK所以 OK 不在检查smtpd_helo_restrictions项
客户端4:HELO mail.ora.com
查询check_helo_access找不到指定的example主机名接着检查reject_invalid_hostname,符合标准的规定的主机名,该项通过。
简单例子2:
电信警察spamlover;八卦部落spamhater 不同用户组用不同规则限定的极端情况。
smtpd_restriction_classes = spamlover, spamhater
spamhater = reject_invalid_hostname
reject_non_fqdn_hostname
reject_unknown_sender_domain
reject_rbl_client nospam.example.com
限制条件比较苛刻。
spamlover = permit
限制条件宽裕。
建立一个访问表:per_user_ube
abelard@example.com spamhater
heloise@example.com spamlover
postfix设置:
smtpd_recipient_restrictions = permit_mynetworks
reject_unauth_destination
check_recipient_access hash:/etc/postfix/per_user_ube
#检查访问表 按照访问表继续过滤相应的限制规则。
简单例子3:
smtpd_restriction_classes = spamlover, spamhater
spamhater = reject_invalid_hostname
reject_non_fqdn_hostname
reject_unknown_sender_domain
reject_rbl_client nospam.example.com
spamlover = permit
smtpd_helo_requried = yes
smtpd_client_restrictions =
check_client_access hash:/etc/postfix/client_access
smtpd_helo_restrictions =
reject_invalid_hostname
check_helo_access hash:/etc/postfix/helo_access
smtpd_sender_restrictions =
reject_non_fqdn_sender
reject_unknown_sender_domain
check_sender_access hash:/etc/postfix/sender_access
smtpd_recipient_restrictions =
permit_mynetworks
reject_unauth_destination
reject_non_fqdn_recipent
reject_unknown_recipient_domain
smtpd_data_restrictions =
reject_unauth_pipelining
header_checks = /etc/postfix/header_checks
body_checks = /etc/postfix/body_checks
主机名和发件地址很容易捏造。helo和sender阻挡不了太多邮件。
=================================================================================
访问表设置:
eg:
client_access内容:
10.157 REHECT
192.168.22.2 REJECT
example.com REJECT
sender _access内容:
user1@examplemail.com REJECT
user@ REJECT
hello.mail.com REJECT
用postmap转换成postfix查询的数据库格式:
#postmap /etc/postfix/client_access
#postmap /etc/postfix/sender_access
每次修改访问表时都运行上述命令
=================================================================================
字段设置:
smtp_delay_reject = no、yes:延迟reject的工作或者第一时间reject,一般在RCPT TO 之后发送reject ,考虑链接时间问题。
soft_bounce = yes、no:是否将原reject的5xx拒绝码变成4xx拒绝码。一般用来测试新垃圾邮件。
smtpd_helo_required = yes:SMTP协议的是否必须需要HELO,若YES 不打招呼 则拒绝。
本文详细介绍了如何使用Postfix进行反垃圾邮件设置,包括smtpd_client_restrictions、smtpd_helo_restrictions、smtpd_sender_restrictions等多个字段的配置,以及reject_rbl_client、reject_rhsbl_client等限制条件的使用。通过设置访问表和检查策略,如check_client_access、check_sender_access等,实现对SMTP连接、HELO、邮件头和内容的严格控制,有效阻止垃圾邮件。

165

被折叠的 条评论
为什么被折叠?



