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