﻿# Postfix啟用SPF檢查後記得將所有郵件伺服器IP加入白名單

我們公司有兩台 SMTP 伺服器，都是用 Linux 與 Postfix 架設的，也分別就是我們公司郵件域名 MX 紀錄中的那兩台，一般來說郵件都會直接寄進公司那台主要 SMTP 伺服器，但前幾天公司的 Postfix 郵件主機出狀況，導致信件全部都發到另一台備援用的 SMTP 伺服器了，修復之後郵件的確都已經轉發到主要 SMTP 伺服器上，大家也都正確收到斷線那段時間來的郵件，不過確有一封重要的客戶郵件被退信了，幾經研究後才發現原來是 SPF 紀錄搞的鬼，最後終於把問題搞定！

首先，我請客把退信內容寄到我 Gmail 信箱，研究過標題後看到一段重要的資訊：

```
Recipient address rejected: Message rejected due to: SPF fail - not authorized.
```

剛開始看到這錯誤，一時沒有反應過來，還以為是客戶的 SPF 沒有正確設定，導致被我們的郵件伺服器檔下，但仔細一看，這個錯誤訊息後面還有接上一段參考網址，如下：

**Please see http://www.openspf.net/Why?s=mfrom;id=fromemail@example1.com;ip=10.2.3.3;r=myemail@example2.com> #SMTP#**

這才發現，該退信訊息摘要上出現了一個 IP 是我們公司另一台備援 SMTP 伺服器的 IP 地址，這下才驚覺：原來這封信是從我們備援 SMTP 伺服器寄送到主要 SMTP 伺服器的過程，因為客戶網域設定了 SPF 紀錄而且允許發送郵件的來源 IP 不在 SPF 允許清單上的關係，導致信件被直接退回！

最後，我登入主要 SMTP 伺服器上，修改 **/etc/postfix-policyd-spf-python/policyd-spf.conf** 這個檔案的 **skip\_addresses** 設定，這才解決無法從備援郵件伺服器送達主要郵件伺服器的問題！以下是設定檔範例：

```
skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0//104,::1//128,10.2.3.3/32
```

**相關連結**

-   [python-policyd-spf - pure-Python Postfix policy daemon for SPF checking](https://manpages.ubuntu.com/manpages/noble/man5/policyd-spf.conf.5.html)
-   [Sender Policy Framework](https://dmarcian.com/what-is-spf/)

-   [SPF: Tools](https://dmarcian.com/spf-survey/)
