前一陣子偶花很多時間將 esxi 重心改成proxmox ve, 好不容易告一段落.
但是節神又丟出來 mail gateway 這個怪獸,
原來是 proxmox mail gateway(PMG) 開源了(open-source software license GNU AGPL,v3).
這很不得了!
早在 2007 咖啡偶就開始使用 mail gateway 這個概念來過濾郵件, 過濾後才丟到公司內部郵件伺服器.
偶們公司的 mail gateway 使用 linux + postfix + amavisd-new 的方式,
設定極其複雜, 當時還無法透過套件安裝 , 要自行下載甚至編譯 perl 相關模組, 才能使用,
過了幾年為了能達到公司 SSO(single sign on) 的要求, 還研究好久 , 讓 mail gateway 與公司的網域主控站結合,
慘的是公司網域使用工號登入, 工號與郵件名稱又不一樣, 設定起來夭壽雜亂, 設定好之後就不敢動, 也怕動.
但還有些好處, 新人來的時候, 可以拿這個威風一下, 瀟灑地把秘笈丟過去.
現在裝了proxmox mail gateway 5.2 (pmg) , 真想罵髒話(哎喲, 我是彰化人…) , 居然可以輕易取代公司目前使用的mg.
這裡記下一些設定上的眉角:
1. 綁定網域主控站( ldap )
但是要注意一些相關屬性, 例如Base DN(確認帳號是否存在), BaseDN for Groups(確認是否有此群組) , Email 存放在哪個屬性

2.1 設定Who Objects, 這將用來查詢帳號是否在ldap 裡面
新增一個who物件, 於這個物件中綁定步驟1的ldap設定 , 並且務必指定 Unknow LDAP address, 代表無此帳號的意思

2.2. 設定aliases, 因為原本mail gateway 並沒有aliases這個機制, 但公司的郵件伺服器有aliases, 這時候可以這樣做

2.3 設定危險內容(exe, java ,或是副檔名是vbs, shs, 偶是額外加上ace這個副檔名)

3. 新增規則
規則號碼越高,越優先執行,rules with higher priority are executed first
以下範例, 請依現況調整優先順序(但是aliases必須要在ldap之前),
Rule: 100 若符合aliases就通過

Rule: 99 若在ldap搜尋不到該email , 就阻擋 
Rule: 98 若符合危險內容就阻擋

4. 設定Relay Domains

5.
5.設定轉寄到內部郵件伺服器

6.
6. 取消灰名單, 以前的經驗告訴偶, 不要啟用這東西, 因為跟公司往來的客戶或廠商, 並不見得有好的mail server

7. 取消寄發到使用者的報表,別讓使用者覺得困擾

8. 一般來說,初體驗會很high, 但是久了就淡了, 因此可以考慮取消各式各樣的報表 status report , 有空再來看就好了
systemctl stop pmgreport.timer
9. 設定 TLS 讓pmg的網頁, 與郵件傳輸使用TLS加密的方式傳輸
9.1 確認是否有DNS CAA
pmg網站需要設定一個對外ip, 與對應dns名稱, 並確保有Certificate Authority Authorization (CAA)功能, 請參閱這裡
9.2 ssh 登入pmg
9.3 取得憑證
安裝工具以便取得免費的證書 LetsEncrypt
apt-get install certbot
certbot certonly –standalone –preferred-challenges http -d <主機dns名稱>
ps. 成功後會在 /etc/letsencrypt/live/<主機名稱> 找到相關的證書, 需要有fullchain.pem , privkey.pem
9.4. 設定憑證
將 fullchain.pem , privkey.pem 合併成一個pem檔案, 並且取代/etc/pmg/pmg-tls.pem , /etc/pmg/pmg-apt.pem
新增並修改renew.sh內容如下
vi /etc/pmg/renew.sh
#!/bin/bash
/usr/bin/certbot renew
/bin/cat /etc/letsencrypt/live/<主機dns名稱>/fullchain.pem /etc/letsencrypt/live/<主機dns名稱>/privkey.pem > /etc/pmg/pmg-tls.pem
/bin/cat /etc/letsencrypt/live/<主機dns名稱>/fullchain.pem /etc/letsencrypt/live/<主機dns名稱>/privkey.pem > /etc/pmg/pmg-api.pem
/bin/chmod 600 /etc/pmg/pmg-tls.pem
/bin/chmod 640 /etc/pmg/pmg-api.pem
/bin/chown root:root /etc/pmg/pmg-tls.pem
/bin/chown root:www-data /etc/pmg/pmg-api.pem
/bin/systemctl restart pmgproxy
讓renew.sh變成可以執行的屬性 chmod +x /etc/pmg/renew.sh
9.5. 設定排程
我是設定1個月,但理論上3個月執行就可以了
crontab -e
輸入
0 0 1 * * /etc/pmg/renew.sh
9.6 啟用TLS
到pmg網頁, Configuration: Mail Proxo : TLS 勾選啟用
9.7.確認是否啟用startssl ,
請輸入 telnet localhost 25 , 再輸入 ehlo localhost , 即可查詢是否有starttls功能

9.8. 測試是否有加密連線
使用gmail寄信, 觀查 /var/log/mail.log 是否出現 starttls=1 字樣
Apr 16 17:43:24 pmg postfix/smtpd[13252]: disconnect from mail-pg1-f170.google.com[209.85.215.170] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
10. /etc/postfix/main.cf 加上拒絕反查無主機名稱的郵件伺服器IP
smtpd_sender_restrictions =
...
...
reject_unknown_reverse_client_hostname
然後重啟postfix ,
systemctl restart postfix
11. 還沒想到