postfix反垃圾郵件說明


參考地址:http://guailele.blog.51cto.com/1156442/780223

1、打開 smtp 的認證模塊

/etc/postfix/main.cf文件最后加上:
   smtpd_sasl_auth_enable = yes
   smtpd_delay_reject=yes
   smtpd_recipient_restrictions = permit_mynetworkspermit_sasl_authenticated permit_auth_destination reject
   smtpd_client_restrictions = permit_sasl_authenticated
   broken_sasl_auth_clients = yes
   smtpd_sasl_security_options = noanonymous
這樣用戶的postfix就支持smtp認證了

 

#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 =
        permit_mynetworks,        #檢測客戶端是否來自mynetworks或者mynetworks_style的網絡,是的話返回OK,否則返回DUNNO狀態碼。
        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:<zyq@zmail.com>            #smtpd_sender_restrictions
250 2.1.0 Ok
#---------------------------------------------------------------------------
RCPT TO:<jj@extmail.org>            #smtpd_recipient_restrictions
250 2.1.5 Ok
#---------------------------------------------------------------------------
DATA                        #smtpd_data_restrictions
354 End data with <CR><LF>.<CR><LF>
#---------------------------------------------------------------------------
Client: To: jingjing<jj@extmail.org>        #header_checks
From:<zyq@zmail.com>
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@elsewhere@domain.tld)。
#postfix默認接收最終投遞目標符合如下條件的郵件:
#目標在$inet_interfaces
#目標在$mydestinations
#目標在$virtual_alias_domains
#目標在$virtual_mailbox_domains
permit_mx_backup            #RCPT TO時:允許接收本地主機是郵件投遞目標的mx地址的郵件。但是不能包含郵件路由(如user@elsewhere@domain.tld)
reject_non_fqdn_recipient        #RCPT TO時:客戶端提供的服務器主機名不是RFC要求的完整形式(FQND),返回REJECT,否則返回DUNNO狀態碼。
reject_unauth_destination        #RCPT TO時:拒絕不是發往默認轉發和默認接收的連接。(防止成為垃圾郵件服務器)。
reject_unkownn_recipient_domain        #RCPT TO時:拒絕發往未知域名的連接。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM