如何替 sendmail 加入 SPF, DKIM, DMARC 來提升信件可靠度?

如何替 sendmail 加入 SPF, DKIM, DMARC 來提升信件可靠度? 已關閉迴響。 /

電子郵件因為容易假冒、濫發,長久以來造成人們對 email 的不信件感,現在的系統會透過 SPF, DKIM, DMARC 等附件的技術來作認證,提升郵件的可信度。

什麼是SPF?

SPF, Sender Policy Framework, 也就是發信政策架構,他的作法是利用網域所有人的 DNS 控制權來作判斷。

例如,本網站的域名是 qna.tw,那我就可以利用 DNS 來宣告這個域名的信件只會從那些主機或IP寄出,如果不在宣告範圍內的,就可能是假的。

宣告完成後,當任何一個郵件主機收到署名是 qna.tw 的信,他們會先查 qna.tw 的 DNS 記錄有沒有宣告 SPF,再看裡面註明的主機範圍是否相符,然後作出判斷。

設定範例:IN TXT "v=spf1 +a +mx include:_spf.google.com ip4:61.216.156.127/26 ip4:112.121.100.224/27 ~all"
意即,除了從 google, 辦公室主機 或機房主機外,一概不在宣告範圍內。

什麼是 DKIM?

DKIM, DomainKeys Identified Mail, 這是寄件主機在發信前對郵件內容的驗證,主要用來確認郵件沒被動手腳。

安裝:

  1. 在 FreeBSD Ports 裡安裝 /usr/ports/mail/opendkim/
    cd /usr/ports/mail/opendkim/
    make clean install
  2. 透過 webmin 將 opendkim 加入 sendmail (偷懶招,省得還要打一堆指令)
    在 webmin 的 Sendmail 伺服器頁面中選 Sendmail M4 Configuration, 然後從頁末的 Add new entry of type 功能,加入
    INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost, F=T, T=R:2m')
    然後編譯設定檔,然後套用。
  3. 設定 opendkim.conf
    cd /usr/local/etc/mail/
    vi opendkim.conf
    輸入
    Socket inet:8891@localhost
    KeyTable refile:/var/db/dkim/KeyTable
    SigningTable refile:/var/db/dkim/SigningTable
    Syslog yes
    UserID smmsp
    Mode sv
    SubDomains yes
    Canonicalization relaxed/relaxed
    DNSTimeout 10
    SignatureAlgorithm rsa-sha256
    X-Header yes
    Logwhy yes
  4. 建立相關認證檔
    產生 qna.tw 的認證檔,指令 opendkim-genkey -r -d qna.tw
    然後 mv default.txt /var/db/dkim/qna.tw.dns   (這就是 dns 要設定的公鑰)
    然後 mv default.private /var/db/dkim/qna.tw.key  (這是主機上作加密的私鑰)
    再把 KeyTable 和 SigningTable 打好 (這其實就是對應設定的概念)
  5. KeyTable
    default._domainkey.qna.tw qna.tw:default:/var/db/dkim/qna.tw.key
    default._domainkey.www.qna.tw www.qna.tw:default:/var/db/dkim/qna.tw.key
  6. SigningTable
    *@qna.tw default._domainkey.qna.tw
    *@www.qna.tw default._domainkey.qna.tw
  7. 在 DNS 中加入 DKIM 的公鑰 (其實就是 qna.tw.dns 的內容)
    default._domainkey IN TXT ( "v=DKIM1; k=rsa; s=email; "
    "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQ3b54IIqYz7geWJcfSLB1oZrxMB2+MR2PSpP2PZyRPZEEUKwGVCARnefyCVRO5LmlIyhi/dJnbkYnL/xz37OTQrbMEL9CEqpc0/jqS+XstYWYWQHkqK/SbsusAuDpjc7FniT+tEIqUpYks1D/MCz5IdaSgOZXLPOYPK+dlzA8OQIDAQAB" ) ; ----- DKIM key default for qna.tw
  8. 都設定好了之後,就可以啟用 opendkim
    /usr/local/etc/rc.d/milteropendkim start
  9. 然後 DNS 和 sendmail 都要重新啟動,之後寄信出去時就都會附加 DKIM 的認證檔頭讓收件主機作驗證了。

什麼是 DMARC?

DMARC, Domain Message Authentication Reporting & Conformance, 意思就是當有人假冒你公司的名義發信時,你希望的統一處理回報方式,這往往可以顯示一個企業是否注意自己的名聲和有沒有具體作為。

因此,DMARC 這是必須先有 SPF 和(或) DKIM 後才能作的機制。也就是,當 SPF 或 DKIM 的機制找到異常使用時,透過 DMARC 的宣告來作對應的處理。

例如 _dmarc IN TXT "v=DMARC1; p=none; adkim=s; aspf=r; rua=mailto:charlie@qna.tw"

標記名稱 是否必要 用途 範例

v

必要 通訊協定版本 v=DMARC1

p

必要 網域政策 p=quarantine

pct

選用 需篩選的郵件百分比 pct=20

rua

選用 回報彙整報告的 URI rua=mailto:aggrep@example.com

sp

選用 網域的子網域政策 sp=reject

aspf

選用 SPF 校正模式 aspf=r

以這個範例來說,因為 qna.tw 並不以 email 為主要通訊,所以有異常是不作回報的。

安裝時,一樣到 FreeBSD ports /usr/ports/mail/opendmarc 去 make clean install

然後,一樣用 sendmail M4 Configuration 加入這個機制 INPUT_MAIL_FILTER(`opendmarc', `S=inet:8893@localhost')

然後設定 /usr/local/etc/mail/opendmarc.conf

寫入
PidFile /var/run/opendmarc.pid
RejectFailures false
Syslog true
SyslogFacility mail
TrustedAuthservIDs mail.domain.com
IgnoreHosts /var/db/opendmarc/ignore.hosts
UMask 002
UserID mailnull:mailnull
Socket inet:8893@localhost
FailureReportsSentBy charlie@qna.tw
FailureReportsBcc charlie@qna.tw
FailureReports false
AutoRestart true
PublicSuffixList /var/db/opendmarc/effective_tld_names.dat
HistoryFile /var/log/opendmarc.log

最後啟動 /usr/local/etc/rc.d/opendmarc start

然後在 DNS 裡加入 _dmarc IN TXT "v=DMARC1; p=none; adkim=s; aspf=r; rua=mailto:charlie@qna.tw"

重新啟動 DNS 和 sendmail 之後,以後寄出的信件檔頭就會有 DMARC 的宣告內容和自動採取對應的作法了。

收件者收到的郵件就會呈現 SPF, DKIM, DMARC 都是 PASS 的狀態,這樣的郵件對各收件主機來說的可信度最高。

 

 

 

 

[OS/X Yosemite] 設定 crontab

[OS/X Yosemite] 設定 crontab 已關閉迴響。 /

幾年前買了一台 MAC mini server 1T 版用來裝一些簡單的網站應用,歷經 OS 的升級,到了 Yosemite 之後,發現怎麼 cron job 不會動了。

原來 apple 把這部份的運作改掉了,不過因為自己還有在用 freeBSD,為了讓管理方式是一致的。

在 MAC 上面還是想用 cron 來控制。

More

[FreeBSD] 在超過 2T 以上的硬碟安裝 FreeBSD

[FreeBSD] 在超過 2T 以上的硬碟安裝 FreeBSD 已關閉迴響。 /

好一陣子沒有管理自己的主機,才發現它已經跑了 1003 天~~~所以就著手換一台電腦來轉移系統。

選擇的配備是
intel E3 CPU + 16GB ram + HGST 3T 硬碟 + ASUS B85M-E 主機板

結果到 freebsd.org 下載 ISO image 之後,發現怎麼灌都無法開機,只好開始爬文。

More

[FreeBSD] 一次清除所有程序

No Comments /

ps ax | grep http | awk '{print $1}' | xargs kill

好用的指令組合, 讚!!

444 個日常英文用句

No Comments /

‎1. I see.我明白了
2. I quit! 我不干了!
3. Let go! 放手!
4. Me too.我也是。
5. My god! 天哪!
6. No way! 不行!
7. Come on.來吧(趕快)
8. Hold on.等一等。
9. I agree。我同意。
10. Not bad.還不錯。
11. Not yet.還沒。
12. See you.再見。
13. Shut up! 閉嘴!
14. So long.再見。
15. Why not? 好呀! (為什麼不呢?)
More

Older Entries

» 台中住宿提供優良的服務和價格。