天天看點

postfix反垃圾郵件說明

#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

繼續閱讀