Postfix

帶有 Postfix 的 Policyd-spf 返回 550 spf 失敗 - 未授權

  • August 5, 2022

這讓我很困惑。我檢查了我的 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 檢查。

引用自:https://serverfault.com/questions/1107497