Linux 學習筆記 003 – Mail Server 架設練習,以 Postfix 實作
參考教學
鳥哥的 Linux 私房菜, 第第二十二章、郵件伺服器: Postfix
這篇筆記僅是個人參考鳥哥的教學,練習架設 Mail Server 的註記。它不完整,也不是一篇教學文章,因此想看比較好的教學文章的人,建議前往鳥哥的網頁噢!
筆記
1. MX 主機
- 整個領域的最上層MAIL server,也要記得開放 relay
- 許多主機檢查垃圾信的手法之一是檢查MX標誌,所以要架設郵件伺服器,最好是有MX標誌,如果沒有多的主機可以擔任專門MX,那用同一台機器兼任也可以的。
2. 名詞
- MTA 郵件的遞送者,角色比將像是郵件處理中心+郵差送信士的集合體,例如、postfix
- MUA,Outlook Express 這些跟使用者互動的收發介面(應該像是郵局窗口?)
- MDA, MTA 的一部分,在 MTA 把信收下之後,MDA分析表頭、內容,決定該如何處理、是否過濾的小程式,可能就是郵局裡面的國安人員吧!(笑)
- MRA,提供POP / IMAP 服務
3. 加密
- POP3s
- IMAPs
- SMTPs (可是沒人用…)
4. Relay
- 就是轉遞咩
- Open Relay,任何人都可以用這部主機轉遞信件,屬於十世爛好人的行為
5. postfix 主要設定
- /etc/postfix/main.cf
- /etc/postfix/master.cf
- /etc/postfix/access
- /etc/aliases
6. 設定/etc/postfix/main.cf 的原則
- 允許重複改寫資料,較晚的值為準
- 變數第一次賦予字串/數值時,不用加 $,但是 以變數賦予變數一個值時,則要 $,例如、 a = www.google.com (不用 $), b= $a (要 $)
- 行首不可以空白,空白用於接續上行 (舊行尾逗號,新行首空白)
7. 設定/etc/postfix/main.cf的重要變數
- myhostname,主機名稱, FQDN,如果 domain 不是第一個小數點後面的名稱,則還需要另外設定 mydomain。
- myorigin,發信位址,可以跟 myhostname 一樣或不一樣都沒關係,但重點是要可以用,千萬不要自定一個位址但是送到別的 MTA 時被打回。
- 例如、有的 MTA會對位址反解,反解失敗就拒收。
- inet_interfaces,介面,全部開放就是 = all
- inet_protocols,協定 ipv4 or ipv6 or all
- mydestination,可收信名稱,就是說,規範別人要如何撰寫收信人。一般來說,
- yhostname會是第一個值,其他的就看你要不要給予別名。而如果你有需要將它移動到外部檔案,則把它的值設定為檔案路徑即可
- mynetworks_style,給不給relay的信任網域,但據說會被mynetworks的值取代?(需再研究)
- mynetworks,是否幫忙 relay的客戶端信任網域。
- relay_domains,身為上游 MTA 需要慎重設定的,特別是一個網域的 MX主機,你得把它的值設定為下游 MTA 主機,或其他你可以幫忙轉遞的目標主機
8. 我的設定
## 因為很懶,所以直接全部塞在結尾 ## 反正會以較晚值為準,很適合測試 XDDDD #------------------- # practice 2013-12-17 #------------------- myhostname = www.yes.right mydomain = yes.right myorigin = $myhostname inet_interfaces = all inet_protocols = all mydestination = $myhostname, localhost.$mydomain, localhost, linux.$mydomain, ftp.$mydomain, major.$mydomain # 這裡仿照鳥哥來練習接上行 # 空白表示接續上一行,但是上一行結尾也得是逗號才行 # DNS 情況請按照自己的實際狀況唷! 我是有設定過 DNS 了才寫這些主機 mynetworks = 127.0.0.0/8, 192.168.15.0/24, hash:/etc/postfix/access relay_domains = $mydestination alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases
9. 設定後執行
- postmap hash:/etc/postfix/access
- postalias hash:/etc/aliases
- 因為有引用兩個外部檔案
10. 檢查問題跟錯誤
- /etc/init.d/postfix check
11. 啟動完畢,觀察
[root@localhost ~]# postmap hash:/etc/postfix/access [root@localhost ~]# postalias hash:/etc/aliases [root@localhost ~]# /etc/init.d/postfix check [root@localhost ~]# [ 確定 ] [root@localhost ~]# /etc/init.d/postfix restart 正在關閉 postfix: [ 確定 ] 正在啟動 postfix: [ 確定 ] [root@localhost ~]# netstat -tlunp | grep ':25' tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2587/master tcp 0 0 :::25 :::* LISTEN 2587/master
12. 簡單設定是否幫某來源進行 Relay
- 設定 /etc/postfix/access
- 格式為: 位址/IP OK/REJECT
- 設定後,執行 postmap hash:/etc/postfix/access 更新(會產生access.db該檔案建立好,規則就生效)
13. 佇列檢查
- postqueue, mailq
- postcat 查看特定 Queue ID 的信件,資料夾應該在 /var/spool/postfix/maildrop
- postfix flush ,立刻處理佇列
14. MRA
- 軟體 dovecot
- # rpm -qa | grep ‘dovecot’
dovecot-mysql-2.0.9-7.el6.x86_64
dovecot-2.0.9-7.el6.x86_64
15. 練習普通 POP3/IMAP
- 設定 /etc/dovecot/dovecot.conf ( protocols = imap pop3 )
- 設定 /etc/dovecot/conf.d/10-ssl.conf
- 啟動 /etc/init.d/dovecot start
- 觀察 netstat -tlnp | grep ‘dovecot’
16. 練習加密 POP3s/IMAPs
- 使用 OPENSSL,如不要預設憑證,可以重新產生 pem 檔
- 生產並複製 pem 檔到 /etc/pki/dovecot/ ,生產過程需要填寫一些資訊
- 執行 restorecon -Rv /etc/pki/dovecot/
- 設定 /etc/dovecot/conf.d/10-auth.conf
- 設定 /etc/dovecot/conf.d/10-ssl.conf
- 設定 /etc/dovecot/conf.d/10-master.conf
- 設定 /etc/dovecot/conf.d/10-mail.conf
- 重新啟動並觀察
詳情請參考鳥哥 22.3.2 加密的 POP3s/IMAPs 設定設定,我這篇畢竟只是練習過程的註記,教學還是請參考鳥哥吧!^^
16. postgrey 運作
- 第一次先抵擋,一定時間之後的第二次才收下,預設五分鐘。
- 有需要跳過 postfrey 判斷的,則編輯 /etc/postfix/postgrey_whitelist_clients。
- main.cf 的 smtpd_recipient_restrictions,加入check_policy_service unix:/var/spool/postfix/postgrey/socket
17. 拒絕 Open Relay 的黑名單
- main.cf 的 smtpd_recipient_restrictions,加入 reject_rbl_client cbl.abuseat.org …等等
- 注意 這個 cbl.abuseat.org ,並不是說他是問題主機,它只是黑名單的提供者,還有記得要先用 dig 看過機器還在才套用
18. 關鍵字過濾(以正規表示式)
- /etc/postfix/ 下的 header_checks 以及 body_checks 兩個檔案
- 需在 main.cf 內設定啟動,才會生效
- 抵擋的規則以正規表示法來撰寫
- 格式為: /正規表示的規則/ 執行動作 日誌訊息
- 例如: /^Subject:.*賺錢好機會.*/ DISCARD Killed
- REJECT :信件退回
- WARN :收下來,且會記錄基本資料
- DISCARD:丟棄,也不回應
- 修改後檢查正規語法 postmap -q – regexp:/etc/postfix/body_checks < /etc/postfix/body_checks
19. SMTP 的密碼驗證 – Cyrus SASL
- 如果沒安裝,可先安裝。
- 檢查帳密支援系統,以 saslauthd -v 查詢,可以看到支援 pam 驗證 (即系統的帳密)
- 設定 /etc/sysconfig/saslauthd ,支援 pam
- 啟動/etc/init.d/saslauthd start
- 設定 /etc/sasl2/smtpd.conf
- 設定 /etc/postfix/main.cf ,增加 saslauthd 驗證相關的設定、smtpd_recipient_restrictions 參數加入允許 pam 的部分
- 重新啟動,測試,在 telnet 進去時,要看到 250-AUTH LOGIN PLAIN 這類字樣,才算成功
詳細步驟請參考鳥哥的文章 22.5.4 非信任來源的 Relay:開放 SMTP 身份認證,這裡畢竟只是註記!:P
20. Relayhost
- 等於是委託上層 ISP 的 MAIL Server 對外作業,但這樣的話就會有一些限制。一來上層 ISP 要開放幫你 relay,此外 DNS 不能自己玩,必須要網際網路可用、合法。
- 設定 /etc/postfix/main.cf ,加入 relayhost = [郵件主機] 即可
- 在 maillog 內可以查看轉寄流程
21. 修改單封信件大小限制
- message_size_limit = 10000000 (預設,10MB)
22. 設定檔的建議權限
- /etc/aliases 通常權限 644
- /etc/mail/ 或 /etc/postfix/ 下的 *.db 通常權限 640
- /var/spool/mqueue 或 /var/spool/postfix 通常權限 700
- ~/.forward
詳細解釋還請參考鳥哥 錯誤檢查 吧^^
Leave a Reply