|
postfix的UCE
所謂UCE控制就是指控制postfix接收或轉發(fā)來(lái)自于什么地方的郵件。
缺省地,postfix轉發(fā)符合以下條件的郵件:
* 來(lái)自客戶(hù)端ip地址符合$mynetworks的郵件。
* 來(lái)自客戶(hù)端主機名符合$relay_domains及其子域的郵件。
* 目的地為$relay_domains及其子域的郵件。
缺省地,postfix接受符合以下條件的郵件:
* 目的地為$inet_interfaces的郵件。
* 目的地為$mydestination的郵件。
* 目的地為$virtual_maps的郵件。
但是我們也可以通過(guò)下面的規則來(lái)實(shí)現更強大的控制功能。
1. 信頭過(guò)濾
通過(guò)header_checks參數限制接收郵件的信頭的格式,如果符合指定的格式,則拒絕接收該郵件??梢灾付ㄒ粋€(gè)或多個(gè)查詢(xún)列表,如果新郵件的信頭符合列表中的某一項則拒絕該接收郵件。如:
header_checks = regexp:/etc/postfix/header_checks
header_checks = pcre:/etc/postfix/header_checks
缺省地,postfix不進(jìn)行信頭過(guò)濾。
2.客戶(hù)端主機名/地址限制
通過(guò)smtpd_client_restrictions參數限制可以向postfix發(fā)起SMTP 連接的客戶(hù)端的主機名或ip地址??梢灾付ㄒ粋€(gè)或多個(gè)參數值,中間用逗號隔開(kāi)。限制規則是按照查詢(xún)的順序進(jìn)行的,第一條符合條件的規則被執行??捎玫囊巹t有:
reject_unknown_client:如果客戶(hù)端的ip地址在DNS中沒(méi)有PTR記錄則拒絕轉發(fā)該客戶(hù)端的連接請求??梢杂胾nknown_client_reject_code參數指定返回給客戶(hù)機的錯誤代碼(缺省為450)。如果你有用戶(hù)沒(méi)有作DNS記錄則不要啟用該選項。
permit_mynetworks:如果客戶(hù)端的ip地址符合$mynetworks參數定義的范圍則接受該客戶(hù)端的連接請求,并轉發(fā)該郵件。
check_client_access maptype:mapname:根據客戶(hù)端的主機名、父域名、ip地址或屬于的網(wǎng)絡(luò )搜索access數據庫。如果搜索的結果為REJECT 或者 ‘[45]XX text‘ 則拒絕該客戶(hù)端的連接請求;如果搜索的結果為OK、RELAY 或數字則接受該客戶(hù)端的連接請求,并轉發(fā)該郵件。??梢杂胊ccess_map_reject_code參數指定返回給客戶(hù)機的錯誤代碼(缺省為554)。
reject_maps_rbl:如果客戶(hù)端的網(wǎng)絡(luò )地址符合$maps_rbl_domains參數的值則拒絕該客戶(hù)端的連接請求??梢杂胢aps_rbl_reject_code參數指定返回給客戶(hù)機的錯誤代碼(缺省為554)。
示例:
smtpd_client_restrictions = hash:/etc/postfix/access, reject_maps_rbl
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client
該參數的缺省值為:
smtpd_client_restrictions =
也即接收來(lái)自任何客戶(hù)端的SMTP連接。
3. 是否請求HELO命令
可以通過(guò)smtpd_helo_required參數指定客戶(hù)端在SMTP會(huì )話(huà)的開(kāi)始是否發(fā)送一個(gè)HELO命令。你可以指定該參數的值為yes或no。缺省值為:
smtpd_helo_required = no
4. HELO主機名限制
可以通過(guò)smtpd_helo_restrictions參數指定客戶(hù)端在執行HELO命令時(shí)發(fā)送給postfix的主機名。缺省地,postfix接收客戶(hù)端發(fā)送的任意形式的主機名??梢灾付ㄒ粋€(gè)或多個(gè)參數值,中間用逗號隔開(kāi)。限制規則是按照查詢(xún)的順序進(jìn)行的,第一條符合條件的規則被執行??捎玫囊巹t有:
reject_invalid_hostname:如果HELO命令所帶的主機名參數不符合語(yǔ)法規范則拒絕客戶(hù)機的連接請求??梢杂胕nvalid_hostname_reject_code參數指定返回給客戶(hù)機的錯誤代碼(缺省為501)。
permit_naked_ip_address:RFC要求客戶(hù)端的HELO命令包含的ip地址放在方括號內,你可以用permit_naked_ip_address參數取消該限制。因為有的mail客戶(hù)端不遵守該RFC的規定。
reject_unknown_hostname:如果客戶(hù)端執行HELO命令時(shí)的主機名在DNS中沒(méi)有相應的A 或 MX 記錄則拒絕該客戶(hù)端的連接請求??梢杂胕nvalid_hostname_reject_code參數指定返回給客戶(hù)機的錯誤代碼(缺省為450)。
reject_non_fqdn_hostname:如果客戶(hù)端執行HELO命令時(shí)的主機名不是RFC規定的完整的域名則拒絕客戶(hù)端的連接請求??梢杂胕nvalid_hostname_reject_code參數指定返回給客戶(hù)機的錯誤代碼(缺省為504)。
check_helo_access maptype:mapname:根據客戶(hù)端HELO的主機名、父域名搜索access數據庫。如果搜索的結果為REJECT 或者 ‘[45]XX text‘ 則拒絕該客戶(hù)端的連接請求;如果搜索的結果為OK、RELAY 或數字則接受該客戶(hù)端的連接請求??梢杂胊ccess_map_reject_code參數指定返回給客戶(hù)機的錯誤代碼(缺省為554)。
示例:
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname
5. RFC 821信頭限制
RFC 821對郵件的信頭做了嚴格的規定,但是廣泛使用的sendmail并不支
持該規定,所以對于該參數我們只能說(shuō)不,即:
strict_rfc821_envelopes = no
6. 通過(guò)發(fā)件人地址進(jìn)行限制
可以用smtpd_sender_restrictions參數通過(guò)發(fā)件人在執行MAIL FROM命令時(shí)提供的地址進(jìn)行限制??梢灾付ㄒ粋€(gè)或多個(gè)參數值,中間用逗號隔開(kāi)。限制規則是按照查詢(xún)的順序進(jìn)行的,第一條符合條件的規則被執行??捎玫囊巹t有:
reject_unknown_sender_domain:如果MAIL FROM命令提供的主機名在DNS中沒(méi)有相應的A 或 MX 記錄則拒絕該客戶(hù)端的連接請求??梢杂胾nknown_address_reject_code參數指定返回給客戶(hù)機的錯誤代碼(缺省為450)。
check_sender_access maptype:mapname:根據MAIL FROM命令提供的主機名、父域搜索access數據庫。如果搜索的結果為REJECT 或者 ‘[45]XX text‘ 則拒絕該客戶(hù)端的連接請求;如果搜索的結果為OK、RELAY 或數字則接受該客戶(hù)端的連接請求??梢杂胊ccess_map_reject_code參數指定返回給客戶(hù)機的錯誤代碼(缺省為554)??梢酝ㄟ^(guò)該參數過(guò)濾來(lái)自某些不受歡迎的發(fā)件人的郵件。
reject_non_fqdn_sender:如果MAIL FROM命令提供的主機名不是RFC規定的完整的域名則拒絕客戶(hù)端的連接請求??梢杂胣on_fqdn_reject_code 參數指定返回給客戶(hù)機的錯誤代碼(缺省為504)。
缺省地,postfix接受來(lái)自任何發(fā)件人的郵件。
示例:
smtpd_sender_restrictions = hash:/etc/postfix/access, reject_unknown_sender_domain
7. 通過(guò)收件人地址進(jìn)行過(guò)濾
可以用smtpd_recipient_restrictions參數通過(guò)發(fā)件人在執行RCPT TO命令時(shí)提供的地址進(jìn)行限制。缺省值為:
smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains
可以指定一個(gè)或多個(gè)參數值,中間用逗號隔開(kāi)。限制規則是按照查詢(xún)的順序進(jìn)行的,第一條符合條件的規則被執行??捎玫囊巹t有:
check_relay_domains:如果符合以下的條件,則接受SMTP連接請求,否則拒絕該連接,可以用relay_domains_reject_code 參數指定返回給客戶(hù)機的錯誤代碼(缺省為504)。
* 客戶(hù)端主機名符合$relay_domains及其子域
* 目的地為$inet_interfaces、$mydestination或$virtual_maps
permit_auth_destination:不管客戶(hù)端的主機名,只要符合以下的條件,就
接受SMTP連接請求:
* 解析后的目標地址符合$relay_domains及其子域
* 解析后的目標地址符合$inet_interfaces、$mydestination或$virtual_maps
reject_unauth_destination:不管客戶(hù)端的主機名,只要符合以下的條件,就拒絕該客戶(hù)端SMTP連接請求:
* 解析后的目標地址符合$relay_domains及其子域
* 解析后的目標地址符合$inet_interfaces、$mydestination或$virtual_maps
check_recipient_access:根據解析后的目標地址、父域搜索access數據庫。如果搜索的結果為REJECT 或者 ‘[45]XX text‘ 則拒絕該客戶(hù)端的連接請求;如果搜索的結果為OK、RELAY 或數字則接受該客戶(hù)端的連接請求??梢杂胊ccess_map_reject_code參數指定返回給客戶(hù)機的錯誤代碼(缺省為554)。
reject_unknown_recipient_domain:如果收件人的郵件地址在DNS中沒(méi)有相應的A 或 MX 記錄則拒絕該客戶(hù)端的連接請求??梢杂胾nknown_address_reject_code參數指定返回給客戶(hù)機的錯誤代碼(缺省為450)。
reject_non_fqdn_recipient:如果發(fā)件人在執行RCPT TO命令時(shí)提供的地址
不是完整的域名則拒絕其SMTP連接請求 可以用The non_fqdn_reject_code參數指定返回給客戶(hù)機的錯誤代碼(缺省為504)。
|
|
|
|