close

最近幫公司更換 mail server,因為原本使用 Synology 內建的 mail server 功能,發現彈性小,問題多,公司又不想花錢買 mail server,所以只好自己研究一番,遇到許多雷也一一解決,因次寫這篇心得文來記錄一下,本篇不教怎麼安裝 hmailserver (因為安裝精靈會引導,非常簡單)。

一個好的 mail server 需要那些設定, mail server 並不是安裝起來,測試可收可寄就了事

如果只是安裝起來就開始用,容易遇到:

別人可能會仿造我方寄出的信

寄出去的信容易被歸類為垃圾郵件

收到病毒信沒有有效的防禦管道

收到大量垃圾郵件造成困擾

 

基本設定篇:

-DNS該做的事

A Record

建立一筆 Mail Server 的 A Record

說明:建立一筆 主機<->IP 對應,後續才能設定 MX Record

e.g. A mail 123.45.67.89

MX Record

說明:收信用,讓要寄送到我的網域的 Mail Server 知道我的 Mail Server IP 位置

設定 MX紀錄 對應 Mail Server 的 A Record

SPF Record

設定 SPF 的 IPv4 位置對應(有些DNS代管的TXT Record 不需要加上雙引號 ")

說明:SPF 作用為宣告我寄出去的信會從哪個 IP 發出 (SMTP協定如果只要寄信不需要設定 MX、A Record,所以沒設這條無法確認寄件者 IP 的合法性)

e.g. "v=spf1 ip4:123.45.67.89 mx -all" (要注意寄出IP位置如果和收信IP不同,不能只設定 mx,要加入 ip4)

PTR Record (IP 反解)

要上 ISP 網站去向提供你 IP 的業者申請 PTR 反解,驗證你發送 SMTP 出去的這個 IP 確實為你的 mail server domain 所用的 IP,減少被對方 mail server 當作垃圾郵件的機率

以中華電信為例,申請反解的位置&反解說明(這個說明已經很清楚就不用加長這篇文章的圖文量了): https://domain.hinet.net/dns_reverse_c/ ​​​​

 

進階設定篇:

防毒過濾引擎 - 以 Microsoft Security Essentials、Kaspersky、NOD32 為例 (如果之後有機會測試別家防毒會陸續新增,也歡迎網友提供)

1. 安裝防毒軟體,並查詢你的防毒軟體有支援 指令指定掃描 模式(要能夠停用自動刪除檔案功能,最好能停用即時掃描,檢測到病毒的後續處理是 hmailserver,不是防毒軟體)

2. 設定 hmailserver 的外部程式參數和位置、檢測到病毒的回傳值,郵件檔案變數為 %FILE% (每家防毒軟體都不一樣,請參考官方文件)

Kaspersky Endpoint Security 設定方式:

命令列指令:"C:\Program Files (x86)\Kaspersky Lab\Kaspersky Endpoint Security 10 for Windows SP2\avp.com" scan "%FILE%" /i0 /R:C:\mail_scan_log\report.txt

傳回值:102

Kaspersky Free 設定方式:

命令列指令:"C:\Program Files (x86)\Kaspersky Lab\Kaspersky Free 19.0.0\avp.com" scan "%FILE%" /i0 /R:C:\mail_scan_log\report.txt

傳回值:2

Microsoft Security Essentials 設定方式:

命令列指令:"C:\Program Files\Microsoft Security Client\MpCmdRun.exe" -Scan -ScanType 3 -File "%FILE%" -DisableRemediation

傳回值:2

NOD32 設定方式 (參考 https://support.eset.com/kb3417/):

命令列指令:"C:\Program Files\ESET\ESET NOD32 Antivirus\ecls.exe" /mail "%FILE%" /log-file=C:\mail_scan_log\report.txt

傳回值:50

垃圾郵件過濾引擎 - 以 SpamAssassin 為例

1. 從 www.jam-software.com 下載並安裝 SpamAssassin for Windows (這是收費軟體(能夠用服務以背景執行),但如果以視窗模式執行則免費)

2. 安裝好後執行 spamd.exe 開始視窗模式

3. 設定 hmailserver 的垃圾郵件設定把 SpamAssassin 打勾即可

可以按測試來檢查 hmailserver 有沒有正確和 spamd.exe 通訊

安裝 OpenSSL for Windows (以便稍後設定 DKIM 和 加密憑證)

1. 從 slproweb.com 下載並安裝 OpenSSL (選 Light 版即可)

2. 新增 OpenSSL 的 bin 路徑至環境變數內 (e.g. C:\OpenSSL-Win64\bin)

設定 DKIM 簽章

說明:利用非對稱金鑰的特性,由我的 Mail Server 的 private key 編碼的 DKIM Header 如果能被我在DNS宣告的 public key 正確解開,能證明信件確實是從我的 mail server 發出的(SPF只能認證到OSI第四層,DKIM的方式能認證到OSI應用層第七層)

使用 openssl 產生 public key 與 private key

openssl.exe genrsa -out gmail.com.private 1024

openssl.exe rsa -in gmail.com.private -out gmail.com.public -pubout -outform PEM

進入 DNS 新增一筆 TXT Record

主機名稱格式為 "<selector name>._domainkey"

值格式為 "k=rsa;p=<你的公開金鑰>" (<你的檔案名稱>.public 裡面的金鑰)

待 DNS 生效後(使用 nslookup -q=txt <selector name>._domainkey.<你的網域名稱> 查詢),至 hmailserver 設定並啟用 DKIM

 

設定 DMARC (示範介面為 Hinet DNS 代管,但是 Hinet 的 DNS 代管不支援底線開頭的 TXT Record ,要設定這筆請轉用別家,或自架 DNS Server)

說明:DMARC 作用為 當 SPF 或 DKIM 驗證失敗時,要向哪個單位通知,讓管理者知道誰在仿冒我的郵件網域,設定 DMARC 前置條件為 設定完 SPF + DKIM

其中 p 參數有三種模式, 讓收信方參考的規則:

none : 無規則

quarantine: 隔離,假如信件沒通過 SPF & DKIM 檢查,將信隔離(放到垃圾信匣)

reject: 拒絕,假如信件沒通過 SPF & DKIM 檢查,將信拒絕(直接丟棄或拒連)

e.g. "v=DMARC1; p=reject; rua=mailto:admin@gmail.com"

-建立自我簽署憑證啟用加密傳輸

1. 使用 openssl 建立自我簽署憑證

openssl req -nodes -new -x509  -keyout mailserver.key -out mailserver.cert

2. 匯入憑證至 hmailserver

3. 設定 SMTP、POP3 使用加密憑證(下圖是我的設定,供參考)

 

都設定完成後,可以寄一封信到 Gmail ,透過檢視原始郵件可以驗證設定是否正確

 

參考資料:

http://slproweb.com/products/Win32OpenSSL.html

https://answers.microsoft.com/zh-hant/outlook_com/forum/osecurity-oother/%E5%AF%84%E4%BF%A1%E6%96%B9%E8%88%87%E6%94%B6/19e32c5d-9599-49da-b91b-768ff270d568

https://technet.microsoft.com/zh-tw/library/jj937231(v=exchg.150).aspx

http://jackli.logdown.com/posts/665785/hmailserver-added-dkim-records

https://support.google.com/a/answer/2466563?hl=zh-Hant

https://www.raidenmaild.com/tw/kb/how-to-setup-dmarc.html

 

SPF 測試工具:

http://ithelp.ithome.com.tw/articles/10023169

http://www.kitterman.com/spf/validate.html

arrow
arrow
    全站熱搜

    AwEi 發表在 痞客邦 留言(5) 人氣()