您的位置:首页 > 其它

Postfix (3) 反垃圾邮件的措施(2)

2011-08-04 12:58 441 查看
本系统接着Postfix (3) 反垃圾邮件的措施(1)继续

Postfix共有6种限制条件,

1) 访问表

2) 客户端参数

3)严格语法检查

4)DNS检查

5)实时黑名单

6)通用限制条件

1. 访问表

任何涉及客户端资格检查的限制条件,都需要提供一个访问表, 由一系列的key-value组成。

check_client_access maptype:mapname
Check_client_access指向一个含有 IP地址、网络地址、主机名称、从属网络名称的访问表。

Postfix先从DNS系统中反查出客户端的IP地址的完整主机名(PTR),并自己分析出主机名与网络,然后以这些信息与访问表中的每一个索引键对比,如果发现相同的,就采取对应的动作。 如果没有就是DUNNO

Check_helo_access maptype:mapname
用于对比客户端在HELO命令中显示的主机名

Check_recipient_access maptype:mapname
check_recipient_access指向一个包含邮件地址,网络名、人名的访问表, 用于对比客户端在RCPT TO命令中提供的收件地址。 如果发现相同的键,就采用相同的动作。

check_sender_access maptype:mapname
check_sender_access指向一个包含邮件地址,网络名、人名的访问表, 用于对比客户端在MAIL FROM命令中提供的收件地址。 如果发现相同的键,就采用相同的动作。

2. 客户端参数

permit_auth_destination

如果收件地址位于Postfix的辖域内,则批准请求。 包括mydestination, inet_interfaces, virtual_alias_map或者 virtual_mailbox_maps 以及relay_domains

如果recipient不符合 permit_auth_destination它会返回DUNNO,而不是REJECT

permit_mynetwork

如果客户端的IP地址 位于mynetworks所列的任何地址范围内,则批准请求

reject_unauth_destination

如果收件人不在Postfix的辖域内,则拒绝请求。 默认值是554

3. 严格的语法条件

reject_invalid_hostname: 如果客户端在HELO命令提供的主机名不是有效的主机名,返回invalid_hostname_reject_code(501)

reject_non_fqdn_hostname:如果客户端在HELO命令提供的主机名不符合RFC的要求,返回non_fqdn_reject_code(504)

reject_non_fqdn_recipient:如果客户端在RCPT TO命令提供的收件地址的网络部分,不是RFC要求的, 返回non_fqdn_reject_code(504)

reject_non_fqdn_sender: 如果客户端在MAIL FROM命令提供的收件地址的网络部分,不是RFC要求的, 返回non_fqdn_reject_code(504)

reject_unauth_pipeline

4. DNS限制条件

reject_unknow_client:如果Postfix DNS通过反查不出PTR记录,则会拒绝服务 ,拒绝码unknown_client_reject_code 450

reject_unknow_hostname:如果HELO提供的主机名没有A记录,也没有MX记录,则拒绝服务, 拒绝码unknown_client_reject_code 450

reject_unknow_recipient_domain:如果 RCPT TO提供的收件人的网络,查不出有效的A或者是MX记录,则拒绝服务,拒绝码unknown_client_reject_code 450

reject_unknow_sender_domain:如果 MAIL FROM提供的收件人的网络,查不出有效的A或者是MX记录,则拒绝服务,拒绝码unknown_client_reject_code 450

5. 实时黑名单(RBL)

专为抵制垃圾邮件而设计的网络服务,让SMTP Server通过 DNS系统实时查询客户端是否为垃圾源。 

reject_rbl_client rblprovider.domain

将客户端的Ip地址(例如1.2.3.4)颠倒顺序(4.3.2.1),搭配RBL的网络名,构成一个主机名称,然后以此主机名向DNS系统查询, 如果能查出一个A记录,表示该IP已被列入黑名单, 则Postfix会拒收邮件。

reject_rhsbl_client rblprovider.domain

如果客户端的主机名在rblprovider.domain内有一笔A记录,则拒绝服务

reject_rhsbl_sender rblprovider.domain

如果寄件人的邮件地址的网络部分在rblprovider.domain内有一笔A记录,则拒绝服务

6. 通用限制条件

Postfix还提供了下面的限制条件

permit:批准收下邮件,Postfix不再继续当前的过滤规则,但是会跳到下一组规则

reject:无条件拒收

defer:婉拒请求,客户端被告知稍后再试。

举个例子, 对HELO,我们有如下的检查

smtpd_helo_restrictions =
check_helo_access hash:/usr/local/etc/postfix/helo_access
reject_invalid_hostname


其中 helo_access的内容如下:

a.com reject
b.com OK


现在有下面的几个连接实例

1)HELO test

首先检查check_helo_access,在helo_access中找不以test的记录

于是再检查hostname 是否valid, 由于 test不是标准的完整的主机名,所以Postfix拒收。

2) HELO a.com

首先检查check_helo_access,在helo_access中找到了a.com的记录,REJECT, Postfix当场拒收。

3) HELO b.com

首先检查check_helo_access,在helo_access中找到了b.com的记录,OK

Postfix跳过helo_restrictions的检查, 如果有其他的检查,就转到其他的检查去(比如:sender_restrictions)

4) HELO c.com

首先检查check_helo_access,在helo_access中找不以c.com的记录

于是再检查hostname 是否valid, 由于 c.com是标准的完整的主机名,所以postfix继续下面的检查(如果还有的话,比如:sender_restrictions)

Postfix的最后一道防线就是内容检查

Postfix提供了4邮件内容检查的参数

header_checkes

mime_header_checks

nested_header_checks

body_checks

内容检查是全面的, 要么都检查,要么都不检查,没有办法让特定的寄件人或者是收件人绕过。

header_checks = regexp:/usr/local/etc/postfix/header_checks


模式表的索引键是正则表达式,所以必须放在一对分隔符“/"之间, 例如

/match pattern/ REJECT


内容检查的动作:

REJECT Message txt拒收邮件,并将message传给客户端
WARN message txt模拟拒收动作,还会真的拒收,只将message记录在日志文件中,
IGNORE删除符合模式的标题字段或整行文字
HOLD message text将整封邮件放在保留队列中
DISCARD message要求Postfix假装接收邮件,其实偷偷丢掉
对于模式匹配,想要测试的话,可以使用postmap命令,

postmap -q -regexp:/usr/local/etc/postfix/header_checks <msg.txt
这样的话,postmap会显示出符合模式的字符串,以及对应该模式的动作。

最后上传一个笔者测试环境的一个配置文件的内容如下 :

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: