C、MAIL FROM指令过滤(发送者地址限制)
在接受了SMTP连接,客户端发送了HELO/EHLO指令后(该指令可选),应该通过MAIL FROM指令声明发送者的身份。可以对发送者身份进行过滤检查。
按照RFC规范,在MAIL FROM指令和下面的RCPT TO指令中应该使用RFC 821格式的邮件地址(例如:<
[email protected]>),但是由于有许多的邮件客户端的不规范,往往不使用标准的RFC 821格式。Postfix默认接受任何可以理解的邮件地址,如:丢失了地址里的一对尖括号、可以包含RFC 822格式的注释等。如果希望打开对RFC 821格式的限制,可以将strict_rfc821_envelopes设置为yes。
通过Postfix的smtpd_sender_restrictions指令可以指定这个阶段的过滤规则。这个阶段可用的过滤规则除了公共规则和smtpd_client_restrictions的规则和smtpd_helo_restrictions的规则外还有:
reject_unknown_sender_domain
拒绝发送者邮件的域没有DNS的A记录或MX记录的连接。
unknown_address_reject_code指定了拒绝的返回状态码(默认是450)。当进行DNS查询出现临时错误时(如查询超时)也总是返回450。
reject_rhsbl_sender domain.tld
拒绝发送者邮件的域属于RHSBL黑名单的连接。通过检查一个域名是否存在于domain.tld的RHSBL中,可以判断该客户端是否被列入了domain.tld的实时黑名单,从而决定是否接受连接。
maps_rbl_reject_code指定了拒绝的返回状态码(默认是554)。
check_sender_access maptype:mapname
搜索名为mapname的maptype类型的访问数据库。可以根据发送者邮件的邮件地址、名字、域和父域来匹配。关于访问数据库请参阅下面的附录。
reject_non_fqdn_sender
拒绝发送者邮件的域不是FQDN格式的连接。
non_fqdn_reject_code指定了拒绝的返回状态码(默认时504)。
reject_sender_login_mismatch
拒绝发送者在$smtpd_sender_owner_maps中所匹配的用户名和SASL登录名不一致的连接。
D、RCPT TO指令过滤(接收者地址限制)
在MAIL FROM指令后要通过RCPT TO指令指定邮件接收者。可以对接收者身份进行过滤检查
通过Postfix的smtpd_recipient_restrictions指令可以指定这个阶段的过滤规则。同以上的检查指令不同,为了避免开放转发,这个指令有默认值:permit_mynetworks,reject_unauth_destination。这个阶段可用的过滤规则除了公共规则和smtpd_client_restrictions的规则和smtpd_helo_restrictions的规则和smtpd_sender_restrictions的规则外还有:
permit_auth_destination
允许发往默认转发和默认接收的连接。
Postfix默认转发以下的邮件:
来自$mynetworks中地址发送的邮件
发往$relay_domains中的域或其子域的邮件。但是不能包含邮件路由(如user@
[email protected])。
Postfix默认接收最终投递目标符合如下条件的邮件:
目标在$inet_interfaces
目标在$mydestinations
目标在$virtual_alias_domains
目标在$virtual_mailbox_domains
reject_unauth_destination
拒绝不是发往默认转发和默认接收的连接。
relay_domain_reject_code指定了拒绝的返回状态码(默认是554)。
permit_mx_backup
允许接收本地主机是邮件投递目标的MX地址的邮件。但是不能包含邮件路由(如user@
[email protected])。
check_recipient_access maptype:mapname
搜索名为mapname的maptype类型的数据库。可以根据接收者邮件的邮件地址、名字、域和父域来匹配。 关于访问数据库请参阅下面的附录。
check_recipient_maps
拒绝接收者不匹配如下列表的连接:
$local_recipient_maps($mydestinations和$inet_interfaces)
$virtual_alias_maps($virtual_alias_domains)
$virtual_mailbox_maps($virtual_mailbox_domains)
$relay_recipient_maps($relay_domains)
空的$local_recipient_maps和$local_recipient_maps表示不对接收者地址进行过滤检查。
Postfix默认在接收者检查列表的最后做check_recipient_maps检查
reject_unknown_recipient_domain
拒绝接收者邮件的域没有DNS的A记录或MX记录的连接。
unknown_address_reject_code指定了拒绝的返回状态码(默认是450)。当进行DNS查询出现临时错误时(如查询超时)也总是返回450。
reject_rhsbl_recipient domain.tld
拒绝接收者邮件的域属于RHSBL黑名单的连接。通过检查一个域名是否存在于domain.tld的RHSBL中,可以判断该客户端是否被列入了domain.tld的实时黑名单,从而决定是否接受连接。
maps_rbl_reject_code指定了拒绝的返回状态码(默认是554)。
reject_non_fqdn_recipient
拒绝接收者邮件的域不是FQDN格式的连接。
non_fqdn_reject_code指定了拒绝的返回状态码(默认时504)。
permit_sasl_authenticated
允许通过了SASL认证的用户发送邮件。通过SASL协议(包括SASL1和SASL2)实现的SMTP认证功能需要在编译Postfix时编译进SASL支持,并在main.cf中将smtpd_sasl_auth_enable设置为yes。有关SASL及如何在Postfix中实现SASL认证请参阅下面的附录。通过SASL认证可以对漫游用户提供发信支持,是关闭Open-Relay的重要手段