老師補充
postfix
把功能獨立寫成一個個執行檔(例如:smtpd 收信、smtp 送信)
平時這些功能不會啟動,唯有真的要運作時,postfix(稱為 master) 才會把該功能叫起來執行後結束
可以加入 or 移除 third party 的模組(例如:防毒、防垃圾郵件)
郵件遞送流程
Kevin 寫了一封信給 David,使用 SMTP 協定把信送給自己公司的 mail server Mail_K
Mail_K 會暫時把 mail 放到系統的佇列中(/var/spool/postfix/*)
透過
postqueue -p
可以搜尋目前佇列中待處理的 mailKevin 的 mail 會被從佇列取出,並透過 SMTP 協定送給 David 公司的 mail server Mail_D,並存於 /var/spool/postfix/* 中
Mail_D 收完信後,會呼叫程式 local,把信件搬移到 /var/spool/mail 目錄中,並存成檔名 david
David 可以使用 mail client,透過 POP3(tcp 110) or IMAP(tcp 43) 協定,把信件取回
其他
POP3 會把 mail server 收回來,mail 就不會存在 mail sever 上了
IMAP 只用來讀取標題,可以指定讀取特定的信中的內容,從 mail server 複製回來
設定 mail server
架構
serverX 收信
desktopX 收信 & 寄信
foundation 使用 mail function
- 模組設定檔:**/etc/postfix/master.cf**
設定 desktopX (mail sender) (smtp0.example.com)
1 | # 如果有多個 ip,表示只會在這兩個 ip 上開啟 tcp port 25(全開寫 all) |
設定 serverX (mail sender & receiver) (imap0.example.com)
1 | $ sudo postconf -e 'inet_interface = all' |
foundation 發信
發信流程:user
-> sendmail
-> Queue
-> postfix
-> 送出去
1 | # 將信交給 smtp0.example.com 寄送 |
如何在 postfix 上設定 POP3
設定 POP3 server
1 | [root@server0 ~]# yum -y install dovecot |
驗證 POP3
1 | [root@server0 ~]# telnet server0 110 |
6.1 Configuring a Send-only Email Configuration
6.1.1 Email architecture and null clients
RHEL7 Postfix 提供了 /usr/sbin/sendmail
作為內部發送通知訊息之用。
null client
的工作僅將所有 email 轉送到其他的 mail relay,本章重點在於如何把機器設定為 Postfix null client,藉此透過 sendmail
& SMTP
協定將訊息送到外面的 mail server
6.2.2 Transmission of an email message
mail client 透過
SMTP
傳送郵件內部的寄信需求可能不需要認證就可以被接受(relay 的部分則大多會有一些規則上 & 防火牆上的限制)
外部的 relay server 會根據目的地 domain 的
MX
紀錄,將信轉過去收信者的 mail server 可能會支援
POP3
orIMAP
等協定來將信件取回,也可能提供 web interface 供使用
6.2.3 Postfix
Postfix 是 RHEL7 預設的 mail server,模組化設計,主要設定檔位於 /etc/postfix/main.cf
中 (設定檔都集中在 /etc/postfix
目錄下)
以下是比較重要的 Postfix 設定:
Setting | Purpose |
---|---|
inet_interfaces |
設定監聽流入 & 流出訊息的網路介面。loopback-only : 監聽 127.0.0.1 & ::1all : 監聽所有網路介面Default: inet_interfaces = localhost 【註】若有多個 hostname or ip 需要監聽,則用空白隔開 |
myorigin |
將本地端發出去的 mail domain 改為此台主機 Default: myorigin = $myhostname |
relayhost |
將訊息轉到指定的外部 mail relay Default: relayhost = |
mydestination |
設定 mail 的終點,到指定的地方後就會直接進入 local mailbox Default: mydestination = $myhostname, localhost.$mydomain, localhost |
local_transport |
定義到 mydestination 的 mail 要怎麼處理local:$myhostname :使用 local mail agent 把 mail 存放到 /var/spool/mail 中 |
mynetworks |
允許從這台 mail server 進行 relay 的來源清單(用空白隔開) Default: mynetworks = 127.0.0.0/8 [::1]/128 |
要變更 Postfix 的行為,使用者可以透過手動修改 /etc/postfix/main.cf
或是透過 postconf
指令:
1 | # 顯示所有設定 |
建議直接編輯
/etc/postfix/main.cf
,因為參數選項太多不容易記憶,詳細參數說明可參考postconf(5)
6.2.4 Postfix null client configuration
要把 Postfix 設定成一個標準的 null client,要達到下面幾個要求:
sendmail 是用來將所有 email 轉送到外部的 mail relay 之用
local Postfix 不接受處理本地端傳送任何郵件訊息,只會負責 relay 出去
使用者可以透過 null client 收發信件
統整之後,一共需要以下設定:
Directive | Null Client(serverX.example.com) |
---|---|
inet_interfaces |
inet_interfaces=loopback-only |
myorigin |
myorigin=desktopX.example.com |
relayhost |
relayhost=[smtpX.example.com] |
mydestination |
mydestination= |
local_transport |
local_transport=error: local delivery disabled |
mynetworks |
mynetworks=127.0.0.0/8, [::1]/128 |
因此我們可以透過以下指令設定 null client:
1 | # 設定要 relay mail 的主機資訊 |
Practice: Configuring Send-only Email Service
目標
將 serverX 設定成 null client
將所有的 mail relay 到
smtpX.example.com
desktopX & serverX 都已經執行 lab 相關指令
實作過程
1、設定 serverX
1 | $ sudo postconf -e "relayhost=[smtp0.example.com]" |