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

詳細解釋還請參考鳥哥 錯誤檢查 吧^^

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料