#1、postfix配置說明(強烈建議參看“postfix權威指南 第十一章 反垃圾郵件”)
#fqdn格式:完全限定域名格式,即用點分隔開的包括域名和主機名的主機全名
# smtpd related config
smtpd_recipient_restrictions =
permit_mynetworks, #檢測用戶端是否來自mynetworks或者mynetworks_style的網絡,是的話傳回OK,否則傳回DUNNO狀态碼。
permit_sasl_authenticated, #檢測使用者認證是否通過的,認證通過的傳回狀态OK,否則傳回DUNNO狀态碼。
reject_non_fqdn_hostname, #HELO/EHLO時:用戶端提供的主機名不是RFC要求的完整形式(FQND),傳回REJECT,否則傳回DUNNO狀态碼。
reject_non_fqdn_sender, #MAIL FROM時:用戶端提供的主機名不是RFC要求的完整形式(FQND),傳回REJECT,否則傳回DUNNO狀态碼。
reject_non_fqdn_recipient, #RCPT TO時:用戶端提供的主機名不是RFC要求的完整形式(FQND),傳回REJECT,否則傳回DUNNO狀态碼。
reject_unauth_destination, #RCPT TO時:收件人不在postfix管轄的區域(由mydestination定義),傳回REJECT,否則傳回DUNNO狀态碼。
reject_unauth_pipelining, #禁止非授權用戶端使用pipelining
reject_invalid_hostname #HELO/EHLO時:用戶端提供的主機名不是有效的主機名時,傳回REJECT,否則傳回DUNNO狀态碼。
# SMTP sender login matching config
smtpd_sender_restrictions =
reject_sender_login_mismatch, #拒絕發送者在$smtpd_sender_owner_maps中所比對的使用者名和sasl登入名不一緻的連接配接。
reject_authenticated_sender_login_mismatch, #拒絕認證成功的發送者在$smtpd_sender_owner_maps中所比對的使用者名和sasl登入名不一緻的連接配接。
reject_unauthenticated_sender_login_mismatch #拒絕認證失敗的發送者在$smtpd_sender_owner_maps中所比對的使用者名和sasl登入名不一緻的連接配接。
smtpd_sender_login_maps =
mysql:/etc/postfix/mysql_virtual_sender_maps.cf,
mysql:/etc/postfix/mysql_virtual_alias_maps.cf
#2、smtp會話過程的各個限制條件參數:詳看圖檔“stmp對話過程以及各個階段對于的限制條件.png”,共分為7個順序過程的參數限制:
1、smtpd_client_restrictions
2、smtpd_helo_restrictions
3、smtpd_sender_restrictions
4、smtpd_recipient_restrictions
5、smtpd_data_restrictions
6、header_checks
7、body_checks
#3、會話過程對比:
#---------------------------------------------------------------------------
root@mail:/etc/postfix# telnet mail.jmail.com 25
Trying 192.168.0.234...
Connected to mail.jmail.com.
Escape character is '^]'.
220 ESMTP #smtpd_client_restrictions
ehlo mail.zmail.com #smtpd_helo_restrictions
250-mail.jmail.com
250-PIPELINING
250-SIZE 5242880
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM:<[email protected]> #smtpd_sender_restrictions
250 2.1.0 Ok
RCPT TO:<[email protected]> #smtpd_recipient_restrictions
250 2.1.5 Ok
DATA #smtpd_data_restrictions
354 End data with <CR><LF>.<CR><LF>
Client: To: jingjing<[email protected]> #header_checks
From:<[email protected]>
Subject:SMTP Test!
this is a test message body! #body_checks
.
250 2.0.0 Ok: queued as 959FDE03CA
#4、限制條件與對應的受檢資訊
限制條件 用戶端提供的受檢資訊
#RBL:實時黑名單
reject_rbl_client 用戶端提供的IP位址或則主機名稱 #smtpd_client_restrictions
reject_rhsbl_client
reject_unknown_client
check_client_access type:mapname helo提供的主機名稱 #smtpd_helo_restrictions
permit_naked_ip_address
reject_invalid_hostname
reject_non_fqdn_hosname
reject_unknown_hosname
check_helo_access type:mapname MAIL FROM提供的寄件人郵件位址 #smtpd_sender_restrictions
reject_non_fqdn_sender
reject_rhsbl_sender
reject_unknown_sender_domain
check_sender_access type:mapname RCPT TO提供的收件人的位址 #smtpd_recipient_restrictions
permit_auth_destination
permit_mx_backup
reject_non_fqdn_recipient
reject_unauth_destination
reject_unkownn_recipient_domain
check_recipient_access type:mapname
reject_unauth_pipeling DATA指令
permint 無條件準許
reject 無條件拒絕
defer 無條件延遲
warn_if_reject 将原本的REJECT動作改為WARN(eg:warn_if_reject reject_unauth_destination 注意此指令必須放在其他條件之前,不能單獨調用)
reject_unauth_pipelining 禁止非授權用戶端使用pipelining
#參數詳細說明
reject_rbl_client #拒絕來自屬于rbl和rhsbl清單中的位址進行連接配接。通過檢查一個ip位址或域名是否存在于domain.tld的rbl或rhsbl中,可以判斷該用戶端是否被列入了domain.tld的實時黑名單,進而決定是否接受連接配接。
reject_rhsbl_client #拒絕來自屬于rbl和rhsbl清單中的位址進行連接配接。通過檢查一個ip位址或域名是否存在于domain.tld的rbl或rhsbl中,可以判斷該用戶端是否被列入了domain.tld的實時黑名單,進而決定是否接受連接配接。
reject_unknown_client #拒絕客戶的位址沒有對應的dns的a記錄或ptr記錄的連接配接。通常有些機器,尤其是個人撥号使用者的機器沒有對應的a記錄或ptr記錄,是以要注意漫遊使用者的使用(漫遊使用者是指不在$mynetworks中,比如在别的isp撥号上網的使用者。通常用smtp認證來解決這個問題)。
check_client_access type:mapname
permit_naked_ip_address #允許直接使用ip位址的連接配接。通常在helo/ehlo中使用主機名而不是ip位址。
reject_invalid_hostname #拒絕無效格式的主機名的連接配接。
reject_non_fqdn_hosname #HELO/EHLO時:用戶端提供的主機名不是RFC要求的完整形式(FQND),傳回REJECT,否則傳回DUNNO狀态碼。
reject_unknown_hosname #HELO/EHLO時:用戶端提供的主機名未知時,傳回REJECT,否則傳回DUNNO狀态碼。
check_helo_access type:mapname
reject_non_fqdn_sender #MAIL FROM時:用戶端提供的伺服器主機名不是RFC要求的完整形式(FQND),傳回REJECT,否則傳回DUNNO狀态碼。
reject_rhsbl_sender #MAIL FROM時:拒絕來自實時黑名單的使用者主機
reject_unknown_sender_domain #MAIL FROM時:提供的網域無效時(DNS查詢),傳回REJECT,否則傳回DUNNO狀态碼。
check_sender_access type:mapname
permit_auth_destination #RCPT TO時:
#允許發往預設轉發和預設接收的連接配接。
#postfix預設轉發以下的郵件:
#來自$mynetworks中位址發送的郵件
#發往$relay_domains中的域或其子域的郵件。但是不能包含郵件路由(如user@[email protected])。
#postfix預設接收最終投遞目标符合如下條件的郵件:
#目标在$inet_interfaces
#目标在$mydestinations
#目标在$virtual_alias_domains
#目标在$virtual_mailbox_domains
permit_mx_backup #RCPT TO時:允許接收本地主機是郵件投遞目标的mx位址的郵件。但是不能包含郵件路由(如user@[email protected])
reject_non_fqdn_recipient #RCPT TO時:用戶端提供的伺服器主機名不是RFC要求的完整形式(FQND),傳回REJECT,否則傳回DUNNO狀态碼。
reject_unauth_destination #RCPT TO時:拒絕不是發往預設轉發和預設接收的連接配接。(防止成為垃圾郵件伺服器)。
reject_unkownn_recipient_domain #RCPT TO時:拒絕發往未知域名的連接配接。
reject_unauth_pipeling #DATA指令
permint #無條件準許
reject #無條件拒絕
defer #無條件延遲
warn_if_reject #将原本的REJECT動作改為WARN(eg:warn_if_reject reject_unauth_destination 注意此指令必須放在其他條件之前,不能單獨調用)
reject_unauth_pipelining #禁止非授權用戶端使用pipelining