Postfix的UCE控制

12/3/2006来源:Qmail人气:8135

postfix的UCE(unsolicited commercial email)控制

  所谓UCE控制就是指控制postfix接收或转发来自于什么地方的邮件。

  缺省地,postfix转发符合以下条件的邮件:

  * 来自客户端ip地址符合$mynetworks的邮件。

  * 来自客户端主机名符合$relay_domains及其子域的邮件。

  * 目的地为$relay_domains及其子域的邮件。

  缺省地,postfix接受符合以下条件的邮件:

  * 目的地为$inet_interfaces的邮件。

  * 目的地为$mydestination的邮件。

  * 目的地为$virtual_maps的邮件。

  但是我们也可以通过下面的规则来实现更强大的控制功能。

  1. 信头过滤

  通过header_checks参数限制接收邮件的信头的格式,如果符合指定的格式,则拒绝接收该邮件。可以指定一个或多个查询列表,如果新邮件的信头符合列表中的某一项则拒绝该接收邮件。如:

  header_checks = regexp:/etc/postfix/header_checks

  header_checks = pcre:/etc/postfix/header_checks

  缺省地,postfix不进行信头过滤。

  2.客户端主机名/地址限制

  通过smtpd_client_restrictions参数限制可以向postfix发起SMTP 连接的客户端的主机名或ip地址。可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有:

  reject_unknown_client:如果客户端的ip地址在DNS中没有PTR记录则拒绝转发该客户端的连接请求。可以用unknown_client_reject_code参数指定返回给客户机的错误代码(缺省为450)。如果你有用户没有作DNS记录则不要启用该选项。

  permit_mynetworks:如果客户端的ip地址符合$mynetworks参数定义的范围则接受该客户端的连接请求,并转发该邮件。

  check_client_access maptype:mapname:根据客户端的主机名、父域名、ip地址或属于的网络搜索access数据库。如果搜索的结果为REJECT 或者 '[45]XX text' 则拒绝该客户端的连接请求;如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求,并转发该邮件。。可以用access_map_reject_code参数指定返回给客户机的错误代码(缺省为554)。

  reject_maps_rbl:如果客户端的网络地址符合$maps_rbl_domains参数的值则拒绝该客户端的连接请求。可以用maps_rbl_reject_code参数指定返回给客户机的错误代码(缺省为554)。

  示例:

  smtpd_client_restrictions = hash:/etc/postfix/access, reject_maps_rbl

  smtpd_client_restrictions = permit_mynetworks, reject_unknown_client

  该参数的缺省值为:

  smtpd_client_restrictions =

  也即接收来自任何客户端的SMTP连接。

  3. 是否请求HELO命令

  可以通过smtpd_helo_required参数指定客户端在SMTP会话的开始是否发送一个HELO命令。你可以指定该参数的值为yes或no。缺省值为:

  smtpd_helo_required = no

  4. HELO主机名限制

  可以通过smtpd_helo_restrictions参数指定客户端在执行HELO命令时发送给postfix的主机名。缺省地,postfix接收客户端发送的任意形式的主机名。可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有:

  reject_invalid_hostname:如果HELO命令所带的主机名参数不符合语法规范则拒绝客户机的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码(缺省为501)。

  permit_naked_ip_address:RFC要求客户端的HELO命令包含的ip地址放在方括号内,你可以用permit_naked_ip_address参数取消该限制。因为有的mail客户端不遵守该RFC的规定。

  reject_unknown_hostname:如果客户端执行HELO命令时的主机名在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码(缺省为450)。

  reject_non_fqdn_hostname:如果客户端执行HELO命令时的主机名不是RFC规定的完整的域名则拒绝客户端的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码(缺省为504)。

  check_helo_access maptype:mapname:根据客户端HELO的主机名、父域名搜索access数据库。如果搜索的结果为REJECT 或者 '[45]XX text' 则拒绝该客户端的连接请求;如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code参数指定返回给客户机的错误代码(缺省为554)。

  示例:

  smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname

  5. RFC 821信头限制

  RFC 821对邮件的信头做了严格的规定,但是广泛使用的sendmail并不支

  持该规定,所以对于该参数我们只能说不,即:

  strict_rfc821_envelopes = no

  6. 通过发件人地址进行限制

  可以用smtpd_sender_restrictions参数通过发件人在执行MAIL FROM命令时提供的地址进行限制。可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有:

  reject_unknown_sender_domain:如果MAIL FROM命令提供的主机名在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用unknown_address_reject_code参数指定返回给客户机的错误代码(缺省为450)。

  check_sender_access maptype:mapname:根据MAIL FROM命令提供的主机名、父域搜索access数据库。如果搜索的结果为REJECT 或者 '[45]XX text' 则拒绝该客户端的连接请求;如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code参数指定返回给客户机的错误代码(缺省为554)。可以通过该参数过滤来自某些不受欢迎的发件人的邮件。

  reject_non_fqdn_sender:如果MAIL FROM命令提供的主机名不是RFC规定的完整的域名则拒绝客户端的连接请求。可以用non_fqdn_reject_code 参数指定返回给客户机的错误代码(缺省为504)。

  缺省地,postfix接受来自任何发件人的邮件。

  示例:

  smtpd_sender_restrictions = hash:/etc/postfix/access, reject_unknown_sender_domain

  7. 通过收件人地址进行过滤

  可以用smtpd_recipient_restrictions参数通过发件人在执行RCPT TO命令时提供的地址进行限制。缺省值为:

  smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains

  可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有:

  check_relay_domains:如果符合以下的条件,则接受SMTP连接请求,否则拒绝该连接,可以用relay_domains_reject_code 参数指定返回给客户机的错误代码(缺省为504)。

  * 客户端主机名符合$relay_domains及其子域

  * 目的地为$inet_interfaces、$mydestination或$virtual_maps

  permit_auth_destination:不管客户端的主机名,只要符合以下的条件,就

  接受SMTP连接请求:

  * 解析后的目标地址符合$relay_domains及其子域

  * 解析后的目标地址符合$inet_interfaces、$mydestination或$virtual_maps

  reject_unauth_destination:不管客户端的主机名,只要符合以下的条件,就拒绝该客户端SMTP连接请求:

  * 解析后的目标地址符合$relay_domains及其子域

  * 解析后的目标地址符合$inet_interfaces、$mydestination或$virtual_maps

  check_recipient_access:根据解析后的目标地址、父域搜索access数据库。如果搜索的结果为REJECT 或者 '[45]XX text' 则拒绝该客户端的连接请求;如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code参数指定返回给客户机的错误代码(缺省为554)。

  reject_unknown_recipient_domain:如果收件人的邮件地址在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用unknown_address_reject_code参数指定返回给客户机的错误代码(缺省为450)。

  reject_non_fqdn_recipient:如果发件人在执行RCPT TO命令时提供的地址

  不是完整的域名则拒绝其SMTP连接请求。可以用The non_fqdn_reject_code参数指定返回给客户机的错误代码(缺省为504)。