BIND DNS Server 建立 SPF Record


DNS Server 最常見的設定是 A Record, MX Record 及 CNAME Record 等, 而隨了以上的記錄, 另一個經常會用到的是 TXT Record, 要設定 SPF (Sender Policy Framework) Record 也是在 TXT Record 裡面定義。

SPF 主要的用途, 是定義那一台 SMTP 發出的電郵, 是屬於網域使用者發出, 而有些電郵伺服器也要求來信的網域, 必須要設定正確的 SPF 才會接收郵件。

有些網域註冊商或 ISP 會提供網頁介, 讓使用者定義 SPF, 而以下是記錄在 BIND 設定 SPF 的方法。

例如要設定網址 opencli.com, 在 BIND 開啟網域的 zone file (例如 zone file 是 /var/named/zone/opencli.com), 加入以下一行:

@ 86400 IN TXT “v=spf1 a mx ip4:xxx.xxx.xxx.xxx ~all”

或者

opencli.com. IN TXT “v=spf1 a mx ip4:xxx.xxx.xxx.xxx ~all”

上面兩種寫法都可以, 而 “v=spf1 a mx ip4:xxx.xxx.xxx.xxx ~all” 則是定義的 SPF Record, 裡上的意思是:

v=spf1: 定義這個是 SPF Record, 以及 SPF 的版本.
a: 表示網址的 A Record 的 IP, 是信任的 IP.
mx: 表示網址的 MX Record 的 IP, 是信任的 IP.
ip4:xxx.xxx.xxx.xxx: 設定 xxx.xxx.xxx.xxx 是信任的 IP.
~all: 如果沒有設定的 IP 發出的郵件, 會回傳 “softfail”, 郵件伺服器仍會接收這些郵件, 如果想不允許其他 IP, 改成 “-all”, 即 “hard fail” 的意思.

另一個常見的例子是設定 Office 365 及 Gmail 的 SPF Record, 例如:

Office 365:

@ 3600 IN TXT “MS=ms10101010”
@ 3600 IN TXT “v=spf1 include:spf.protection.outlook.com -all”

Gmail:

@ 86400 IN TXT “v=spf1 a mx include:_spf.google.com ~all”

修改後需要重新啟動 BIND:

/opencli.com/terminal

  • $ sudo systemctl restart named

當設定完成後, 可以用 host 指令檢查是否正確:

/opencli.com/terminal

  • $ host -t txt yourdomain.com

Leave a Reply