在 Messaging Server 中,有多種不同的方法可以確保所有已接受要傳送或轉寄的郵 件均來自具有有效 DNS 名稱的位址。最簡單的方法是將 mailfromdnsverify 通道關鍵字置於 tcp_local 通道上。
Messaging Server 還提供了 dns_verify 程式,可讓您使用以 下 ORIG_MAIL_ACCESS 中的規則,確保所有已接受而要遞送或轉寄的郵件,均來自具備有效 DNS 名稱的位址:
ORIG_MAIL_ACCESS TCP|*|*|*|*|SMTP*|MAIL|*|*@*|*|* \ $[msg-svr-base/lib/dns_verify.so, \ dns_verify,$7|$$y|$$NInvalid$ host:$ $$7$ -$ %e]
以上範例中的換行符在此類對映項目中具有語法意義。反斜線字元是合法地繼續到下一行的方法。
亦可使用 dns_verify 影像根據 RBL (即時黑洞清單)、MAPS (郵件濫用防止系統)、DUL (撥號使用者清單) 或 ORBS (開放轉送行為修改系統) 清單檢查內送連線,做為保護系統免受 UBE 影響的其他嘗試。使用新的 mailfromdnsverify 關鍵字時,使用者還可以使用一種獨立的「更易於配置」的方法進行此類檢查,而不必呼叫 dns_verify。更簡單的方法是使用 dispatcher.cnf 檔案中的 DNS_VERIFY_DOMAIN 選項。例如,在 [SERVICE=SMTP] 區段中,將選項的實例設定為您要據以進行檢查的各種清單:
[SERVICE=SMTP] PORT=25 ! ...rest of normal options... DNS_VERIFY_DOMAIN=sbl-xbl.spamhaus.org. DNS_VERIFY_DOMAIN=list.dsbl.org. ...etc... |
在此範例中,郵件在 SMTP 層級被拒絕,也就是說,郵件在 SMTP 對話期間即被拒絕,因此不會傳送至 MTA。這種更簡單方法的缺點是,它將檢查所有正常內送的 SMTP 郵件,包括來自內部使用者的郵件。如果您的網際網路可連結性下降,這會導致效率降低以及潛在的問題。另一種方法是從 PORT_ACCESS 對映表或 ORIG_MAIL_ACCESS 對映表呼叫 dns_verify。在 PORT_ACCESS 對映表中,可以使初始項目不檢查本機內部 IP 位址或郵件提交者,並使後來的項目對其他所有人員執行所需檢查。或者,在 ORIG_MAIL_ACCESS 對映表中,如果僅對透過 tcp_local 通道進來的郵件進行檢查,將略過對來自內部系統/用戶端郵件的檢查。使用指向 dns_verify 的項目之範例如下所示。
PORT_ACCESS ! Allow internal connections in unconditionally *|*|*|*|* $C$|INTERNAL_IP;$3|$Y$E ! Check other connections against RBL list TCP|*|25|*|* \ $C$[msg-svr-base/lib/dns_verify.so,\ dns_verify_domain_port,$1,sbl-xbl.spamhaus.org.]EXTERNAL$E ORIG_MAIL_ACCESS TCP|*|25|*|*|SMTP*|*|tcp_local|*@*|*|* \ $C$[msg-svr-base/lib/dns_verify.so,\ dns_verify_domain,$1,sbl-xbl.spamhaus.org.]$E
dns_verify 程式支援基於 DNS 的資料庫,該資料庫可用於決定可能傳送未經許可的垃圾郵件的內送 SMTP 連線。某些公用的 DNS 資料庫不包含通常用於此目的的 TXT 記錄,而是僅包含 A 記錄。
在典型設定中,DNS 中針對特定 IP 位址的 TXT 記錄包含在拒絕郵件時傳回 SMTP 用戶端的錯誤訊息。但若未找到 TXT 記錄,而是找到 A 記錄,則 Messaging Server 5.2 之前的 dns_verify 版本會傳回訊息「無可用的錯誤文字」。
dns_verify 目前支援在無可用 TXT 記錄的情況下指定預設文字的選項。例如,以下 PORT_ACCESS 對映表顯示如何啟用此選項:
PORT_ACCESS *|*|*|*|* $C$|INTERNAL_IP;$3|$Y$E \ TCP|*|25|*|* \ $C$[<msg-svr-base/lib/dns_verify.so \ ,dns_verify_domain_port,$1,dnsblock.siroe.com,Your$ host$ ($1)$ \ found$ on$ dnsblock$ list]$E * $YEXTERNAL
在此範例中,如果在網域 dnsblock.siroe.com 的查詢中找到遠端系統,但是沒有可用的 TXT 記錄,則會傳回以下訊息:「在 dnsblock 清單上找到您的主機 a.b.c.d」。