什麼是 SPF ? SPF 的全名是 Sender Policy Framwork,它是一種可以用來檢查 SMTP Server 是否有偽造其它人的 Domain 或是虛設一個 Domain

假設我的 Mail Server 為 mail.bojack.com,要是有某個傢伙一直
以我的 Domain 偽造 Mail 的話,哪一天被人家 SPAM 了都還不知道為什麼呢

因此 SPF 的出現可以讓 Mail Server 檢查信件來源是否符合正確的來源,也成為另一種對抗垃圾信的方式

要怎麼做呢?其實很簡單,只要去修改 DNS 以及 Mail Server 的設定就可以了!
首先要在 DNS Server 幫 Mail Server 定義一筆 SPF Record ,至於 Record 要怎麼產生?其實在 OpenSPF 已經就有提供一個 Wizard 讓我們輕鬆產生出一筆 SPF Record ( 微軟這也有提供喔 !! )

參數的設定可參考藍色小舖此篇教學文章,我引用一下 ~

a ---------> 檢查右邊資訊是否正確,正確選則 Yes
mx --------> 檢查右邊資訊是否正確,正確選則 Yes
prt -------> 檢查右邊資訊是否正確,正確選則 Yes ( 官方建議選 No )
a: --------> 輸入你的主機名稱,與 /etc/hosts 有絕對的關係 (這在 Mail 主機交握時很重要,也是一個判斷廣告信的檢查項目)
mx: -------> 輸入 E-mail @ 後面的 Domain ,有多組的話請用空格隔開
ip4 -------> 輸入 Mail 主機實體IP
inclube ---> 輸入 Mail 主機所使用線路的 ISP Domain ,如果是中華電信線路就輸入 hinet.net ,有多條 ISP 線路的話請用空格隔開
~all ------> 只要符合以上輸入的資訊皆為正確... 反正通常都會選擇 Yes


至於我所產生的記錄是長這樣 v=spf1 ipv4:x.x.x.x a mx mx:mail.server.domain ~all ,若你像我一樣是用 BIND 來架 DNS 的話,只要將下面這行加入到 DNS Server 並重新啟動即可。若你是用 Windows 來架 DNS 可參考此篇文章來加入 SPF Record ~

mail.server.domain.        IN      TXT     "v=spf1 ip4:x.x.x.x a mx mx:mail.server.domain ~all"

到此為止 DNS 的部份就搞定了,特別要注意一件事情,
就是你的 Mail Server 反解一定也要一併設定!這點千萬要切記!

設定好之後,我們可以用 nslookup 來檢查一下,在 cmd 模式輸入 nslookup -query=txt _spf.google.com 就可以看到 Gmail 的 SPF Record ,此時你就可以直接檢查一下你家的 Mail Server 是否有在 DNS 加入 SPF Record 了 ~ 如圖所示



接下來我們來設定 Mail Server ,讓它支援 SPF 檢查的功能!由於我脫離 Sendmail 已經有三年的時間了,因此只介紹在 Postfix 上支援 SPF。

Postfix 在 2.3 版本之後就開始支援 Sendmail 的 Milter 功能,安裝方式非常非常簡單。 ( 至於 2.2 以前的版本,可上 http://www.libspf2.org/download.html 找 Patch 來解決,如果不麻煩的話,更新 Postfix 也是個不錯的選擇 )
# cd /usr/ports/mail/sid-milter/
# make install clean


接下來在 /etc/rc.conf 加入下面這幾行
miltersid_enable="YES"
miltersid_flags="-r 1 -u postfix"
miltersid_pid="/var/run/sid-filter.pid"
miltersid_socket="local:/var/spool/postfix/private/sid-filter"


最後在 Postfix 的 main.cf 加入設定
# postconf -e smtpd_milters=unix:private/sid-filter

接下來可以直接重開機,或是直接啟動 /usr/local/etc/rc.d/milter-sid  ,啟動之後檢查一下 sid-milter 有沒有起來,有看到東西就 OK 了
# ps ax | grep 'sid-filter'

首先我用 Gmail 寄了一封信到這台有檢查 SPF 的 Mail Server,我們來檢查一下 Mail Header 是否有什麼改變 ~

Authentication-Results: mail.server.domain from=xxx@gmail.com; sender-id=pass; spf=pass

See!已經開始有出現檢查 SPF 的動作了,從 Gmail 寄來且它本身有加入 SPF Record ,因此顯示的結果就是 pass ~

若是有假造的 E-mail ,則 Header 可能會出現這些東西 ~ 以這為例,有個 kgnxcnqslnh@sidea.uos.ac.kr 假造
ujxerafxghayzjir@ms12.hinet.net 寄了信,就會發生下面這種情況 ~

Authentication-Results: mail.server.domain from=ujxerafxghayzjir@ms12.hinet.net; sender-id=neutral; spf=fail (DomainDoesNotExist)

 也可能還有這些情況,信就直接被禁止了
Authentication-Results: mail.server.domain from=itggpkqadmok@pagina.nl; sender-id=neutral; spf=fail (NotPermitted)

但是說實在的,光只靠 SPF 也是無法完全抵擋垃圾郵件,但還是建議大家能為對抗垃圾郵件對抗盡一份心力,一起幫自己的 Mail Server 加上 SPF Record 吧!

[1] http://www.real-blog.com/linux-bsd-notes/103
[2] http://blog.pixnet.net/hung/post/9789564
[3] http://www.xiaojb.com/archives/mailtech/postfix-spf.shtml
[4] http://www.5dmail.net/html/2006-7-13/200671305203.htm
[5] http://www.mw.net.tw/user/lindahu/blog/2006/11/16/1502/42684/
[6] http://www.freebsdchina.org/forum/viewtopic.php?t=33555
[7] http://en.wikipedia.org/wiki/Sender_Policy_Framework
[8] http://www.backup.idv.tw/viewtopic.php?t=1823

創作者介紹

有為青年生活札記

bojack 發表在 痞客邦 PIXNET 留言(2) 人氣()


留言列表 (2)

發表留言
  • zonely
  • 請問若在fedora core 8上面使用postfix要加上SPF過濾功能應該怎做??

    我早已經將sendmail移除掉了,我是安裝postfix2.4.5-2版,找不到你說的milter的功能耶??
  • sid-milter 可以在此下載安裝
    http://sourceforge.net/projects/sid-milter/

    BSD 方便的就是有 Ports 這東西,Fedora 我其實不太熟,但應該有類似 "RPM" or "YUM" 之類的安裝套件吧

    再補一篇文章給您
    http://www.postfix.org/MILTER_README.html

    bojack 於 2008/02/09 08:35 回覆

  • zonely
  • hi,感謝您的回復,,其實您補的這篇文我已經看了幾天了..真的看不太懂他說的!!..好像是要利用sendmail內建的套件??

    所以您是指我必須找sid-milter這個套件安裝後就可以?

    但要如何設定呢?
  • 是的,您必須要安裝 sid-milter !
    設定的方式在文章都有寫,如下 ( 不過因為您不是用 FreeBSD 所以部份路徑和使用參數可能略有不同,要請您自行修改,我對 Linux 真的不熟 )

    接下來在 /etc/rc.conf 加入下面這幾行
    miltersid_enable="YES"
    miltersid_flags="-r 1 -u postfix"
    miltersid_pid="/var/run/sid-filter.pid"
    miltersid_socket="local:/var/spool/postfix/private/sid-filter"

    最後在 Postfix 的 main.cf 加入設定
    # postconf -e smtpd_milters=unix:private/sid-filter

    接下來可以直接重開機,或是直接啟動 /usr/local/etc/rc.d/milter-sid ,啟動之後檢查一下 sid-milter 有沒有起來,有看到東西就 OK 了
    # ps ax | grep 'sid-filter'

    最後提醒一下,我的環境是只有停用 Sendmail 而沒有移除掉,這點可能要請您自行測試一下喔!

    bojack 於 2008/02/11 08:59 回覆

找更多相關文章與討論
【 X 關閉 】

【痞客邦】大學生網路社群使用習慣調查

親愛的讀者,痞客邦希望能了解大學生的網路社群使用習慣,
填問卷即可抽獨家好禮喔!
(注意:關閉此視窗將不再出現)