1
Linux 討論版 / 在Postfix上安裝設定SPF/SenderID
« 於: 2005-09-30 23:00 »
作者: zoob (vincent@myunix.idv.tw)
版權聲明:可以任意轉載,轉載時請務必標明原始出處和作者資訊
一、SenderID & SPF 簡介
各位應該有收到你自己或董事長寄給你的電子垃圾郵件吧?
別懷疑!!這非常容易(光靠OE就可以簡單達到了)
Relays只能限制哪些使用者可寄給非電子郵件伺服器負責的E-mail Domain
在不區分「收」「發」E-mail Server的情況下,但很難限制別人假冒你的E-mail Address透過你公司的E-mail Server寄給你自己,或透過其它E-mail Server寄給其它公司。
雖然可以從Mail Header,但一般使用者根本不會看,更看不懂。
如何解決此問題呢?我們可以採用SenderID 或 SPF 機制
SenderID與SPF主要為Microsoft與Pobox所推出之防堵垃圾郵件、釣魚郵件、驗明寄件者身份之機制
此機制是依據已設定DNS SPF Record的E-mail Domain來驗明寄件者身份,加以拒絕假冒E-mail Domain的電子郵件,以保障已設定DNS SPF Record的E-mail Domain
以下為SPF/SenderID流程圖,SPF/SenderID流程如下述
1.寄件者傳送E-mail給收件者
2.收件者的Inbound E-mail Server接收E-mail
3.Inbound E-mail Server依E-mail的寄件者 E-mail Domain至該E-mail Domain查詢DNS SPF Record
檢查寄件者的E-mail Server IP是否列於SPF Record的IP清單中
4.如果寄件者的E-mail Server IP列於SPF Record的IP清單中,則這封信件可取得授權並可正常傳送至收件者信箱
反之則會被退信

二、新增DNS SPF record for Mail Domain
(1)首先前往以下其中一網址,依其需求協助產生 DNS SPF Record
The SPF Setup Wizard
Sender ID Framework SPF Record Wizard
下列以www.anti-spamtools.org為申請範例
(1-1)輸入E-mail Domain

(1-2)查詢E-mail Domain是否已有設定SPF,請直接點選「Next」

(1-3)Domain Not Used for Sending E-Mail
該E-mail Domain是否有在傳送E-mail

(1-4)Inbound Mail Servers Send Outbound Mail
「收」E-mail的E-mail Server是否也有在「發」E-mail

(1-5)Outbound Mail Server Addresses
「發」E-mail的E-mail Server IP
註:是否有其他未列在MX Record的SMTP Server在傳送電子郵件,適用於將透過代管E-mail Server或ISP Relays的情況

(1-6)Reverse DNS Lookup
DNS反解析

(1-7)OutSourced Domains

(1-8)Default
一般設定為「No」

(1-9)Scope
一般設定為「Both」

(1-10)點選「Next」後,會出現依你上一頁所設定的結果。請將此結果複製並設定於你公司的DNS Server

(2-1)Bind DNS
編輯DNS SPF record,請針對你要設定的 E-mail Domain新增剛剛所產生的SPF Record
(2-2)Windows DNS
請參閱 How to Add an SPF Record in Windows 2000 and Windows 2003 DNS
註:SPF record是TXT類型
(3)重新載入DNS Server
(4)你可以傳送電子郵件給以下的E-mail來驗證你剛剛所建立的DNS SPF record是否正確
三、安裝設定SPF on Postfix
(1)請先下載以下Perl Moudle並安裝
(2)測試Mail-SPF-Query
perl test.pl
(3)編輯 sample/postfix-policyd-spf
第20行前面加上 # 符號,以避免一直處於測試狀態
[Old]
[New]
(4)產生 smtpd-policy.pl
(5)編輯Postfix - master.cf
(6)編輯Postfix - main.cf
注意!!check_policy_service unix:private/policy 必須放置於 reject_unauth_destination 後面,如有內部伺服器或用戶端會透過此伺服器傳送郵件至內部使用者,記得將其IP設定在 mynetworks。
(7)重新啟動 Postfix
(8)請測試以下步驟
(8-1)請使用非mynetworks之IP假冒你的網域傳送電子郵件至內部使用者,應該會被退信,並在maillog會出現類似以下的訊息
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: client_name=unknown
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: helo_name=myunix.idv.tw
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: instance=2dec.433c2dc2.0
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: protocol_name=SMTP
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: protocol_state=RCPT
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: queue_id=
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: recipient=vincent@myunix.idv.tw
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: request=smtpd_access_policy
Sep 30 02:09:15 fw postfix/policy-spf[11770]: Attribute: sasl_method=
Sep 30 02:09:15 fw postfix/policy-spf[11770]: Attribute: sasl_sender=
Sep 30 02:09:15 fw postfix/policy-spf[11770]: Attribute: sasl_username=
Sep 30 02:09:15 fw postfix/policy-spf[11770]: Attribute: sender=123@myunix.idv.tw
Sep 30 02:09:15 fw postfix/policy-spf[11770]: Attribute: size=0
Sep 30 02:09:15 fw postfix/policy-spf[11770]: : SPF fail: smtp_comment=Please see http://spf.pobox.com/why.html?sender=123%40myunix.idv.tw&ip=192.168.xx.yy&receiver=fw.myunix.idv.tw, header_comment=fw.myunix.idv.tw: domain of 123@myunix.idv.tw does not designate 192.168.xx.yy as permitted sender
Sep 30 02:09:15 fw postfix/policy-spf[11770]: handler sender_permitted_from: REJECT Please see http://spf.pobox.com/why.html?sender=123%40myunix.idv.tw&ip=192.168.xx.yy&receiver=fw.myunix.idv.tw
Sep 30 02:09:15 fw postfix/policy-spf[11770]: handler sender_permitted_from: REJECT Please see http://spf.pobox.com/why.html?sender=123%40myunix.idv.tw&ip=192.168.xx.yy&receiver=fw.myunix.idv.tw is decisive.
Sep 30 02:09:15 fw postfix/policy-spf[11770]: decided action=REJECT Please see http://spf.pobox.com/why.html?sender=123%40myunix.idv.tw&ip=192.168.xx.yy&receiver=fw.myunix.idv.tw
Sep 30 02:09:15 fw postfix/smtpd[11756]: NOQUEUE: reject: RCPT from unknown[192.168.xx.yy]: 554 <vincent@myunix.idv.tw>: Recipient address rejected: Please see http://spf.pobox.com/why.html?sender=123%40myunix.idv.tw&ip=192.168.xx.yy&receiver=fw.myunix.idv.tw; from=<123@myunix.idv.tw> to=<vincent@myunix.idv.tw> proto=SMTP helo=<myunix.idv.tw>
Sep 30 02:09:41 fw postfix/smtpd[11756]: disconnect from unknown[192.168.xx.yy][/list]
(8-2)請使用非mynetworks之IP使用外面的E-mail Domain傳送電子郵件至內部使用者,應該正常。
(8-4)請使用mynetworks之IP使用內部的E-mail Domain傳送電子郵件至內部使用者,應該正常。
(8-4)請使用mynetworks之IP使用內部的E-mail Domain傳送電子郵件至外部使用者,應該正常。
四、參考網址
http://www.microsoft.com/mscorp/safety/technologies/senderid/default.mspx
http://spf.pobox.com/
版權聲明:可以任意轉載,轉載時請務必標明原始出處和作者資訊
一、SenderID & SPF 簡介
各位應該有收到你自己或董事長寄給你的電子垃圾郵件吧?
別懷疑!!這非常容易(光靠OE就可以簡單達到了)
Relays只能限制哪些使用者可寄給非電子郵件伺服器負責的E-mail Domain
在不區分「收」「發」E-mail Server的情況下,但很難限制別人假冒你的E-mail Address透過你公司的E-mail Server寄給你自己,或透過其它E-mail Server寄給其它公司。
雖然可以從Mail Header,但一般使用者根本不會看,更看不懂。
如何解決此問題呢?我們可以採用SenderID 或 SPF 機制
SenderID與SPF主要為Microsoft與Pobox所推出之防堵垃圾郵件、釣魚郵件、驗明寄件者身份之機制
此機制是依據已設定DNS SPF Record的E-mail Domain來驗明寄件者身份,加以拒絕假冒E-mail Domain的電子郵件,以保障已設定DNS SPF Record的E-mail Domain
以下為SPF/SenderID流程圖,SPF/SenderID流程如下述
1.寄件者傳送E-mail給收件者
2.收件者的Inbound E-mail Server接收E-mail
3.Inbound E-mail Server依E-mail的寄件者 E-mail Domain至該E-mail Domain查詢DNS SPF Record
檢查寄件者的E-mail Server IP是否列於SPF Record的IP清單中
4.如果寄件者的E-mail Server IP列於SPF Record的IP清單中,則這封信件可取得授權並可正常傳送至收件者信箱
反之則會被退信

二、新增DNS SPF record for Mail Domain
(1)首先前往以下其中一網址,依其需求協助產生 DNS SPF Record
The SPF Setup Wizard
Sender ID Framework SPF Record Wizard
下列以www.anti-spamtools.org為申請範例
(1-1)輸入E-mail Domain

(1-2)查詢E-mail Domain是否已有設定SPF,請直接點選「Next」

(1-3)Domain Not Used for Sending E-Mail
該E-mail Domain是否有在傳送E-mail

(1-4)Inbound Mail Servers Send Outbound Mail
「收」E-mail的E-mail Server是否也有在「發」E-mail

(1-5)Outbound Mail Server Addresses
「發」E-mail的E-mail Server IP
註:是否有其他未列在MX Record的SMTP Server在傳送電子郵件,適用於將透過代管E-mail Server或ISP Relays的情況

(1-6)Reverse DNS Lookup
DNS反解析

(1-7)OutSourced Domains

(1-8)Default
一般設定為「No」

(1-9)Scope
一般設定為「Both」

(1-10)點選「Next」後,會出現依你上一頁所設定的結果。請將此結果複製並設定於你公司的DNS Server

(2-1)Bind DNS
編輯DNS SPF record,請針對你要設定的 E-mail Domain新增剛剛所產生的SPF Record
代碼: [選擇]
myunix.idv.tw. IN TXT "v=spf1 a mx mx:mail.myunix.idv.tw -all"
(2-2)Windows DNS
請參閱 How to Add an SPF Record in Windows 2000 and Windows 2003 DNS
註:SPF record是TXT類型
(3)重新載入DNS Server
(4)你可以傳送電子郵件給以下的E-mail來驗證你剛剛所建立的DNS SPF record是否正確
- check-auth@verifier.port25.com
spfenabled@pobox.com
三、安裝設定SPF on Postfix
(1)請先下載以下Perl Moudle並安裝
- 1.Net-CIDR-Lite
2.Sys-Hostname-Long
3.Socket6
4.IO-Socket-INET6
5.Digest-HMAC
6.Net-IP
7.Net-DNS
8.URI
9.Mail-SPF-Query
(2)測試Mail-SPF-Query
perl test.pl
(3)編輯 sample/postfix-policyd-spf
第20行前面加上 # 符號,以避免一直處於測試狀態
[Old]
代碼: [選擇]
push @HANDLERS, "testing";
[New]
代碼: [選擇]
# push @HANDLERS, "testing";
(4)產生 smtpd-policy.pl
代碼: [選擇]
cp sample/postfix-policyd-spf /usr/libexec/postfix/smtpd-policy.pl
(5)編輯Postfix - master.cf
代碼: [選擇]
policy unix - n n - - spawn
user=nobody argv=/usr/bin/perl /usr/libexec/postfix/smtpd-policy.pl
(6)編輯Postfix - main.cf
代碼: [選擇]
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, check_policy_service unix:private/policy
注意!!check_policy_service unix:private/policy 必須放置於 reject_unauth_destination 後面,如有內部伺服器或用戶端會透過此伺服器傳送郵件至內部使用者,記得將其IP設定在 mynetworks。
(7)重新啟動 Postfix
(8)請測試以下步驟
(8-1)請使用非mynetworks之IP假冒你的網域傳送電子郵件至內部使用者,應該會被退信,並在maillog會出現類似以下的訊息
- Sep 30 02:08:54 fw postfix/smtpd[11756]: connect from unknown[192.168.xx.yy]
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: client_name=unknown
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: helo_name=myunix.idv.tw
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: instance=2dec.433c2dc2.0
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: protocol_name=SMTP
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: protocol_state=RCPT
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: queue_id=
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: recipient=vincent@myunix.idv.tw
Sep 30 02:09:14 fw postfix/policy-spf[11770]: Attribute: request=smtpd_access_policy
Sep 30 02:09:15 fw postfix/policy-spf[11770]: Attribute: sasl_method=
Sep 30 02:09:15 fw postfix/policy-spf[11770]: Attribute: sasl_sender=
Sep 30 02:09:15 fw postfix/policy-spf[11770]: Attribute: sasl_username=
Sep 30 02:09:15 fw postfix/policy-spf[11770]: Attribute: sender=123@myunix.idv.tw
Sep 30 02:09:15 fw postfix/policy-spf[11770]: Attribute: size=0
Sep 30 02:09:15 fw postfix/policy-spf[11770]: : SPF fail: smtp_comment=Please see http://spf.pobox.com/why.html?sender=123%40myunix.idv.tw&ip=192.168.xx.yy&receiver=fw.myunix.idv.tw, header_comment=fw.myunix.idv.tw: domain of 123@myunix.idv.tw does not designate 192.168.xx.yy as permitted sender
Sep 30 02:09:15 fw postfix/policy-spf[11770]: handler sender_permitted_from: REJECT Please see http://spf.pobox.com/why.html?sender=123%40myunix.idv.tw&ip=192.168.xx.yy&receiver=fw.myunix.idv.tw
Sep 30 02:09:15 fw postfix/policy-spf[11770]: handler sender_permitted_from: REJECT Please see http://spf.pobox.com/why.html?sender=123%40myunix.idv.tw&ip=192.168.xx.yy&receiver=fw.myunix.idv.tw is decisive.
Sep 30 02:09:15 fw postfix/policy-spf[11770]: decided action=REJECT Please see http://spf.pobox.com/why.html?sender=123%40myunix.idv.tw&ip=192.168.xx.yy&receiver=fw.myunix.idv.tw
Sep 30 02:09:15 fw postfix/smtpd[11756]: NOQUEUE: reject: RCPT from unknown[192.168.xx.yy]: 554 <vincent@myunix.idv.tw>: Recipient address rejected: Please see http://spf.pobox.com/why.html?sender=123%40myunix.idv.tw&ip=192.168.xx.yy&receiver=fw.myunix.idv.tw; from=<123@myunix.idv.tw> to=<vincent@myunix.idv.tw> proto=SMTP helo=<myunix.idv.tw>
Sep 30 02:09:41 fw postfix/smtpd[11756]: disconnect from unknown[192.168.xx.yy][/list]
(8-2)請使用非mynetworks之IP使用外面的E-mail Domain傳送電子郵件至內部使用者,應該正常。
(8-4)請使用mynetworks之IP使用內部的E-mail Domain傳送電子郵件至內部使用者,應該正常。
(8-4)請使用mynetworks之IP使用內部的E-mail Domain傳送電子郵件至外部使用者,應該正常。
四、參考網址
http://www.microsoft.com/mscorp/safety/technologies/senderid/default.mspx
http://spf.pobox.com/