
我已經在 Debian Wheezy 上安裝了帶有 postfix 的 opendkim 。外發郵件正在取得 DKIM 簽章。 smtpd 和非 smtpd milter 規格是相同的。
傳入郵件似乎未經過驗證 - 在郵件用戶端中沒有身份驗證結果標頭。我已將“AlwaysAddARHeader yes”新增至 opendkim 配置中,但沒有區別。
在郵件日誌中,收到訊息後,在所有各種條目中,有兩個由 opendkim 編寫。第一個標識伺服器並添加“非內部”(當它是 Google 時這似乎很合理)。第二個只是說「未經驗證」。但我看不出它沒有經過驗證的任何原因!我可以在哪裡尋找解決方案?
答案1
看起來,no_milters
內容過濾器目標中的選項可以防止運行 milter 兩次 - 在內容過濾器之前和之後。
您可以刪除,no_milters
選項。結果如下:
- opendkim 現在可以驗證電子郵件
- milter 對外發郵件運行兩次,因此您的郵件中有 2 個 dkim 簽名
如果您返回,no_milters
選項,opendkim 仍然可以簽署電子郵件,但失去驗證它們的能力。對 amavis 進行的一些修改表明,amavis 使用與 opendkim 相同的 id,這並不奇怪,因為它們都遵守標準。鑑於 amavis 將驗證後新增的 opendkim 標頭(實際上它仍然驗證訊息)替換為空標頭,因此看起來 opendkim 不驗證訊息。
因此,有兩種方法可以防止此標頭消失:
- 在內容過濾器之後運行 milter,我認為這在設計上是不可能的
- 防止 amavis 覆蓋此標頭
我找不到任何方法來阻止 milter 在 amavis 之前運行,以便讓它在 amavis 之後運行。但是,您可以透過在$myauthservid = "amavis.local";
50 使用者設定檔末尾附近重新定義來防止 amavis 重寫該標頭。至少我自己就是這樣解決這個問題的。
答案2
「未經身份驗證」可能只是因為遠端郵件伺服器未對其訊息進行簽署。並非每個人都使用 DKIM 簽署電子郵件。事實上,這項機制並沒有得到應有的廣泛實施。話雖這麼說,使用 DKIM 確實會大大提高郵件的送達率,但不要指望向您的組織發送郵件的每個人也都使用它。以我個人愚見,DKIM 發展緩慢。
你可能會覺得這個很有趣DKIM 部署趨勢實驗。
另外,如果您確定遠端伺服器正在簽署其訊息並且您的郵件伺服器忽略它,我建議您檢查這裡已知的錯誤。