帶有 Postfix 的 Policyd-spf 返回 550 spf 失敗 - 未授權
這讓我很困惑。我檢查了我的 dns、postfix 配置等……一切似乎都很好。而且,它有效。我可以發送到 gmail 等…並且我的 spf、dkim 和 dmarc 記錄都通過了。
問題是這樣的:
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, permit_auth_destination, reject_unauth_destination, check_policy_service unix:private/policyd-spf
工作正常。因為 policyd-spf 不檢查來自我域的任何電子郵件。但是假設我希望它檢查所有電子郵件,所以我將其設置為:
smtpd_recipient_restrictions = reject_unauth_destination, check_policy_service unix:private/policyd-spf
那是我得到 spf 失敗的時候 - 未授權的問題。但是…如果我將其設置為:
smtpd_recipient_restrictions = reject_unauth_destination
Postfix 從我的域發送電子郵件並發送到 gmail 等沒有問題…按預期工作。
我通讀了https://www.rfc-editor.org/rfc/rfc7208.html試圖弄清楚,並認為這可能是直升機,因為當我使用 Outlook 發送時,直升機預設為我的帳戶名。所以在 /etc/postfix-policyd-spf-python/policyd-spf.conf 我添加 HELO_reject = No_Check 根據https://manpages.debian.org/testing/postfix-policyd-spf-python/policyd-spf.conf .5.en.html 這並沒有解決它。我的 mx 記錄是:
@ IN MX 10 mail.example.com.
我的 spf 記錄是:
@ IN TXT ( "v=spf1 ip4:255.255.255.255 -all" )
在後綴 main.cf 我有:
smtpd_banner = $mydomain ESMTP (Ubuntu) mydomain = example.com myhostname = mail.example.com myorigin = $mydomain
因為機器名只是範例
也許我只是在這裡錯過了明顯的東西?
這是日誌所說的:
policyd-spf[2599481]: Config: {'debugLevel': 5, 'HELO_reject': 'No_Check', 'Mail_From_reject': 'Fail', 'PermError_reject': 'False', 'TempError_Defer': 'False', 'skip_addresses': '127.0> policyd-spf[2599481]: Cached data for this instance: [] policyd-spf[2599481]: skip_addresses enabled. policyd-spf[2599481]: _get_resultcodes: scope: mfrom, Reject_Not_Pass_Domains: None, helo_policy: No_Check, mfrom_policy: Fail policyd-spf[2599481]: Scope mfrom unused results: ['Pass', 'None', 'Neutral', 'Softfail', 'Temperror', 'Permerror'] policyd-spf[2599481]: mfrom policy true results: actions: {'defer': [], 'reject': ['Fail'], 'prepend': ['Pass', 'None', 'Neutral', 'Softfail', 'Temperror', 'Permerror']} local {'local_> policyd-spf[2599481]: spfcheck: pyspf result: "['Fail', 'SPF fail - not authorized', 'mailfrom']" policyd-spf[2599481]: Fail; identity=mailfrom; client-ip=10.0.0.1; helo=accountname; envelope-from=hostmaster@example.com; receiver=<UNKNOWN> policyd-spf[2599481]: Action: None: Text: None Reject action: 550 5.7.23
它是否因為我的 ip 與伺服器的不同而拒絕它?這在某種程度上是有道理的。但如果是這種情況,那麼當您的一個使用者發送電子郵件時,甚至可以檢查來自您域的郵件的 spf 記錄嗎?因為如果(我相信幾乎每個人都這樣做)從他們的家庭 ip 連接到郵件伺服器,這顯然與郵件伺服器的不同,spf 檢查查找域,獲取授權伺服器的 ip ,然後將它們與您的 ip 進行比較,這會失敗嗎?我敢肯定,這是一個奇怪的邊緣案例。
從日誌中可以看出,policyd 將您的郵件視為來自私有 IP 地址 10.0.0.1。
顯然,此地址無法通過域 example.com(或任何真實域)的 SPF 檢查。
這正如預期的那樣。
SPF有什麼意義?在您的伺服器上,您使用它來檢查傳入郵件的授權。必須授權客戶端 IP 為信封發件人域發送郵件。
檢查外發郵件的 SPF 是沒有意義的。在您的伺服器上送出的郵件通常來自本地或私有 IP 地址,這些地址永遠不會通過您域的 SPF 檢查。