每日一記:郵件服務器:Postfix

郵件服務器:Postfix
mail server與DNS的關係:
1、架設mail server 必須要有合法的主機名
2、DNS的反解也很重要
要架設一部mail server,務必向上層ISP申請IP反解的對應,不要使用預設的反解主機名,否則會是你的郵件服務器發出的信件被視爲垃圾信件
不申請IP的反解,則可利用relayhost或者是smarthost來處理郵件傳遞的問題,也涉及到上層ISP的問題
3、需要DNS的MX及A標準:先傳送給帶MAX標誌的郵件主機,如果沒有再傳給帶A標誌的主機;MAX標誌的優先級是由小到大

郵件傳輸所需要的組件(MTA,MUA,MDA)以及相關協議:
MUA(Mail User Agent): 郵件使用者代理人,主要功能就是收受郵件主機的電子郵件,以及提供用戶瀏覽與編寫郵件的功能;常見的有Mozilla退出的Thunderbird自由軟件,或者是Linux桌面KDE常見的Kmail或windows常見的outlook express、Foxmail等

MTA(Mail Transfer Agent):郵件傳送代理人,主要功能:收受信件,使用簡單郵件傳送協議(SMTP)端口是25 ; 轉遞(Relay)信件 ;一般提到的Mail Server就是MTA;主要軟件包括:sendmail、postfix、qmail等等

MDA(Mail Delivery Agent): 郵件遞送代理人,是掛在MTA下的一個小程序,主要功能:分析由MTA所收到的信件表頭或內容等數據,來決定這封郵件的去向;MTA的信件轉遞功能,其實是由MDA達成的
MDA有分析與過濾郵件的功能:
1、過濾垃圾信件 2、自動回覆
各主要的MTA程序都有自己的MDA功能,例如 procmail 就是一個過濾的好幫手,另外Mailscanner+Spamassassion也是可以使用的一些MDA

Mailbox :電子郵件信箱,就是某個賬號專用的信件收受檔案;Linux系統默認的信箱都是放在/var/spool/mail/使用者賬號 中

使用者收信時服務器端所提供的相關協議:MRA
MRA(Mail Retrieval Agent): 使用者可以透過MRA服務器提供的郵政服務協議(Post Office Protocol,POP端口是110)來收下自己的信件,也可以透過IMAP(Internet Message Access Protocol)協議將自己的信件保留在郵件主機上面,並進一步建立郵件數據匣等進階工作
POP接受郵件後,會刪除服務器MTA上的郵件記錄

IMAP協議可以將mailbox的數據轉存到你主機上的家目錄,以及/home/賬號/ 那個目錄下,且接受後不刪除原本在MTA上的郵件記錄,且支持信件分類管理
使用IMAP時,建議用戶的目錄最好能加以限制,利用quota來管理用戶的硬盤權限等,防止硬盤爆滿

POP3s、IMAPs都是透過SSL加密的,smtps也有,不過沒人用(因爲要所有的與你的MTA溝通的對方MTA都要改變使用smtps,工程太浩大)

Relay與認證機制的重要性:
目前所有的distribution都將MTA預設啓動爲僅監聽內部循環接口(lo),也將Open Relay的功能取消了

設定Relay的方法有這幾種:
規定某一個特定客戶端的IP或網段,例如規定內部LAN的192.168.1.0/24可使用Relay;
若客戶端的IP不固定時(例如拔接取得的非固定IP)可以利用認證機制來處理
將MUA架設在MTA上面,例如 OpenWebMail之類的web接口的MUA功能

認證機制常見的: SMTP郵件認證機制、SMTP after POP

電子郵件的數據內容:標頭(header)以及內容(body)兩部分

MTA服務器:Postfix基礎設定
預設已經安裝了postfix,直接使用即可

postfix的主要配置文件:
/etc/postfix/main.cf :主要的postfix配置文件,設置這個就可以設定好postfix MTA
/etc/postfix/master.cf : 主要規定了postfix每個程序的運作參數;預設就很好了,不需要更改
/etc/postfix/access (利用postmap處理):可以設定開放Relay或拒絕聯機的來源或目標地址等信息的外部配置文件,這個檔案要生效還需要在/etc/postfix/main.cf啓動這個檔案的用途才行,且設定完畢後需要以postmap來處理成爲數據庫檔案
/etc/aliases (利用postalias或newaliases) :做爲郵件別名的用途,也可作爲郵件羣組的設定

postfix常見的執行檔(就是指令):
/usr/sbin/postconf (查閱postfix的設定數據): 這個指令可列出目前postfix的詳細設定數據,包括系統默認值也會被列出來;使用 postconf -n 指令列出非默認值的設定數據
/usr/sbin/postfix (主要的daemon指令):postfix的主要執行檔,使用其來啓動或重新讀取配置文件
例如: postfix check 檢查postfix相關的檔案、權限等是否正確
postfix start 開始postfix的執行
postfix stop 關閉postfix
postfix flush 強制將目前正在郵件隊列的郵件寄出
postfix reload 重新讀入配置文件,也就是 /etc/postfix/main.cf
更多 postfix 指令用法,使用man postfix 查詢

/usr/sbin/postalias :設定別名數據庫的指令,這個指令主要在轉換/etc/aliases成爲/etc/aliases.db
例如: postalias hash:/etc/aliases ; hash爲一種數據庫格式

/usr/sbin/postcat :主要用在檢查放在queue(隊列)當中的信件內容
例如:利用postcat查看/var/spool/postfix內文件名爲/deferred/abcfile檔案的內容
postcat /var/spool/postfix/deferred/abcfile

/usr/sbin/postmap : 這個指令的用法與postalias類似,不過其主要在轉換access這個檔案的數據庫
例如:postmap hash:/etc/postfix/access

/usr/sbin/postqueue : 類似mailq的輸出結果,例如輸入 postqueue -p

/etc/postfix/main.cf配置文件設定注意項目:

所有設定值以類似[變量]的設定方法來處理,例如 myhostname = www.centos.pshao,等號的兩邊要有空格符,且第一個字符不可以是空白,亦即[my..]要由行首寫起;
可以使用 [$]來延伸使用變量設定,例如: myorigin = $myhostname ,會等於 myorigin = www.centos.pshao ;
如果該變量支持兩個以上的數據,則使用空格符來分隔,不過建議使用逗號加空格符[,]來處理;例如: mydestination = $myhostname, $mydomain,linux.centos.vbird,意指mydestination支持三個數據內容之意
可使用多行來表示同一個設定值,只要在第一行最後有逗號,且第二行開頭爲空格符,即可將數據延伸到第二行繼續書寫
若重複設定某一項目,則以較晚出現的設定值爲準

要時postfix可收發信件,必須啓動的設定數據如下:
myhostname :設定主機名,需使用FQDN
myorigin :發信時所顯示的[發信源主機]項目,例如:myorigin = $myhostname
inet_interfaces :設定postfix的監聽接口,例如: inet_interfaces = all
inet_protocols :設定postfix的監聽IP協議(IPv4和IPv6),例如: inet_protocols = ipv4
mydestination :設定[能夠收信的主機名]
mynetworks_style :設定[信任網域]的一項指標;建議僅設定host即可
mynetworks :規定信任的客戶端;例如:mynetworks = 127.0.0.0/8,192.168.100.0/24
relay_domains :規範可以幫忙relay的下一部MTA主機地址,保留默認值即可
alias_maps :設定郵件別名;保留默認值即可

設定郵件主機權限與過濾機制: /etc/postfix/access
利用access這個檔案來額外管理我們的信件過濾,基本的access語法爲:
規範的範圍或規則 Postfix的動作 (範例如下)
IP/部分 IP/主機名/Email等 OK/REJECT
例如:讓120.114.141.60還有.edu.tw 可以使用這部MTA來轉遞信件,且不許av.com以及192.168.2.0/24這個網域的使用時
vim /etc/postfxi/access
120.114.141.60 OK
.edu.tw OK
av.com REJECT
192.168.2. REJECT
#OK表示可接受,而REJECT則表示拒絕
postmap hash:/etc/postfix/access

郵件別名配置文件: /etc/aliases, 只有root可以修改這個檔案
例如: vim /etc/aliases
dermintsai: dmtsai
#左邊是額外所設定的(別名),右邊則是實際接收這封信的賬號(實際存在的賬號)
postalias hash:/etc/aliases

實際應用一:讓一般賬號(dmatsai)可接收root的信件
vim /etc/aliases
root: root,dmtsai <===建議採用這種方式
#信件會傳給root與dmtsai這兩個賬號
postalias hash:/etc/aliases <==表示加載/etc/aliases文件爲數據庫文件

實際應用二:發送羣組寄信功能
vim /etc/aliases
student2011: std001,std002,std003,std004...
將發往不存在的郵件賬號的信分發給存在的各個賬號裏頭去,實現信件的羣發功能
如果在別名檔案裏填寫外部主機的email,則可以實現轉發到外部郵件主機去
postalias hash:/etc/aliases

個人化的郵件傳遞: ~/.forward 該檔案在一般使用者的家目錄下
例如: dmtsai賬號所接收到的信件除了自己要保留一份之外,還要傳給本機上的pshaobr/>以及[email protected]
vim .forward <==建立這個檔案,切換到一般用戶的家目錄下
dmtsai 一行一個賬號(或email)
br/>pshao
[email protected]
chmod 644 .forward <==修改這個檔案的權限,很重要
查看信件隊列信息: postqueue , mailq
檢查隊列內容可以使用 mailq ,也可以使用postqueue -p :
例如: postquequ -p

使用postcat讀出原始信件的內容: postcat Queue ID
MTA未發出的原始信件在 /var/spool/postfix/maildrop 文件夾內
例如: postcat 5CFBB21DB <==5CFBB21DB就是隊列的編號Queue ID

讓postfix立刻嘗試將這些在隊列當中的信件寄出去: postfix flush 指令或重啓postfix

防火牆設置:修改iptables放行port 25即可

MRA服務器:dovecot 設定
收信需要用到的協議 pop3以及 imap ,就是所謂的MRA服務器
安裝 dovecot 軟件: yum install dovecot
配置文件是: /etc/dovecot/dovecot.conf
設定啓動pop3、imap : vim /etc/dovecot/dovecot.conf
#大約在第25行左右,複製新增一行內容如下:
#protocols = imap pop3 lmtp
protocols = imap pop3
vim /etc/dovecot/conf.d/10-ssl.conf
ssl = no <==將第8行改成這樣
之後,可以啓動dovecot了,使用明碼傳輸

加密的POP3s/IMAPs設定: 都是透過openssl這個軟件提供的SSL加密機制來進行數據的加密傳輸
1、建立憑證: 到系統提供的/etc/pki/tls/certs/目錄下建立所需要的pem憑證檔
cd /etc/pki/tls/certs/
make vbirddovecot.pem 然後按提示一步一步輸入信息即可
2、爲防止SELinux問題,建議將pem檔案放置到系統默認的目錄去最好
mv vbirddovecot.pem ../../dovecot/
restorecon -Rv ../../dovecot/
3、開始處理dovecot.conf,只要pop3s,imaps不要明碼傳輸的
vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes <==第10行改成這樣,取消批註即可
vim /etc/dovecot/conf.d/10-ssl.conf
ssl = required <===第8行改成這樣
ssl_cert = </etc/pki/dovecot/vbirddovecot.pem <==第14,15行變這樣
ssl_key = </etc/pki/dovecot/vbirddovecot.pem
vim /etc/dovecot/conf.d/10-master.conf
inet_listener imap {
port = 0 <第19行改成這樣
}
inet_listener pop3 {
port = 0 <==40行改成這樣
4、處理額外的mail_location 設定值!很重要,否則網絡收信會失敗:
vim /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u <==第25行該這樣
5、重新啓動dovecot 並且觀察port的變化:
systemctl restart dovecot
netstat -tlnp | grep dovecot
最終看到的993是imaps而995則是pop3s,收信的時候,輸入的賬號密碼就不怕被竊聽了
防火牆設置開放端口即可

MUA軟件:客戶端的收發信軟件
mail指令是有mailx這個軟件提供的(默認已經安裝),即使port 25沒有啓動,還是可以使用mail,只是該郵件就只會被放到隊列,而無法寄出去

mail的用法: mail [email address]
例如:mail [email protected]
Subject: Just test <==這裏填寫信件標題
This is a test email. <==底下爲信件的內容
bye bye !
. <==小數點,代表結束輸入的意思

利用已經處理完畢的[純文本檔]寄出信件:利用標準輸入
例如:將家目錄的 .bashrc 寄給別人,可這樣做:
mail -s 'My bashrc' dmtsai < ~/.bashrc

查閱接收的信件: 還是mail 指令,直接輸入mail,可輸入?查看可使用的指令
讀信:直接按Enter或輸入數字後enter

符號代表目前mail所在郵件的位置,輸入Enter即可看到該信件的內容
& 後的光標位置輸入號碼,可看到該號碼信件的內容
如果持續按Enter,則會自 > 符號所在的郵件逐次向後讀取每封信件內容
顯示標題: 直接輸入h或輸入 h數字
例如:要看90封左右的信件標題,就輸入 h90 即可
回覆郵件: 直接輸入 R
刪除郵件: 輸入 d數字 ,例如: d1 刪除第一封郵件; d10-50 刪除第10-50封郵件
如果有刪除郵件,離開mail box時,要使用 q 才行
儲存郵件到檔案: 輸入 s 數字 文件名 ;
例如: s 10 text.txt 將第10封郵件內容存成text.txt這個檔案
離開mail : 輸入q 或 x ;輸入 x 或exit可以在不更動mail box的情況下離開mail程序;
輸入q代表保存更改離開mail box
更多參數在mail指令下,輸入help或?即可
讀取儲存到檔案的信件的內容: mail -f 存儲成的文件名 ;例如: mail -f ~/text.txt
以[附件夾帶]的方式寄信:
利用 uuencode 指令,這個指令屬於sharutils軟件,使用yum 安裝即可
指令: [利用 uuencode 編碼] | [利用 mail 寄出去]
uuencode [實際檔案] [信件中的檔名] | mail -s '標題' email
例如: 將/etc/hosts以附件夾帶的方式寄給dmtsai
uuencode /etc/hosts myhosts | mail -s 'test encode' dmtsai
收下夾帶附件的信件,透過編譯器來解碼,先將檔案存下來:
s 11 test_encode <===存下帶附件的信件,在mail裏輸入這個指令
uudecode test_encode -o decode
加密檔 輸出檔
ll code

Linux mutt: 除了可仿真mail指令,還能夠透過pop3/imap之類的協議去讀取外部的信件
使用yum安裝mutt : yum install mutt
mutt的基本語法:
mutt [-a 附加檔] [-i 內文檔] [-b 祕密副本] [-c 一般副本] [-s 信件標題] email地址
選項與參數:
-a 附加檔:後面就是想要傳送給朋友的檔案,是附加檔案,不是信件內容
-i 內文檔:就是信件的內文部分,先編寫成爲檔案而已;
-b 祕密副本:原收件者不知道這封信還會寄給後面的那個祕密副本收件者;
-c 一般副本:原收件者會看到這封信還有傳給哪位收件者;
-s 信件標題:就是這封信的表頭
emai地址:就是原收件者的email
例如: mutt -s '一封測試信' [email protected]
第一次會提示是否建立 /root/Mail,輸入y
輸入兩次Enter後進入vim界面編輯信件內容
編輯信件內容完畢後,保存退出vim,按下y鍵寄出信件;q鍵中斷;t:To c:CC s:Subj a:附加檔案 d:敘述 ?:求助 <====按下y寄出
mutt會呼叫vim去編輯信件內容
使用mutt來附加檔案時的注意事項:
-a filename : 這個選項必須在指令的最後面,否則會失敗
在文件名與email地址之間需要加上兩個連續減號 -- 才行

以mutt來讀不同通訊協議的信箱:
語法: mutt [-f 信箱位置]
選項與參數:
-f 信箱位置 :如果是imaps的信箱,可以這樣: -f imaps://服務器的IP
例如:直接用dmtsai的身份讀取本機的信箱內容
輸入 mutt 即可查看信件,按指令內的指示查看

用root身份去收dmtsai的imaps信件(以文本模式收取網絡郵件信箱):
chmod a+x ~ <==修改權限,讓mail這個羣組能夠使用dmtsai的家目錄
mutt -f imaps://www.centos.pshao <== www.centos.pshao是郵件服務器名
進入後會顯示相關信息,按最底下的提示輸入參數,r或o或a 即進入要接受的賬號,輸入密碼即可看到相關賬號的信箱內容
注意:如果用戶家目錄不在正規目錄,就會出現SELinux錯誤,此時需要重新修訂SELinu安全本文類型(更改爲和默認家目錄一樣的安全本文即可)

imaps協議會同步服務器信箱,pop3接收後就刪除服務器的信件
Thunderbird : 免費的自由軟件,接收郵件的軟件

postfix設定黑名單檢驗:見書籤 《postfix設置黑名單檢驗》

非信任來源的Relay :開放SMTP身份認證
適用於IP不固定的網絡
SMTP認證就是在使用MTA的port25 時,得要輸入賬號密碼才能夠使用的意思
CentOS已經提供內建的認證模塊Cyrus SASL讓SMTP支持身份認證
在SMTP方面,Cyrus主要提供了saslauthd這個服務來進行賬號密碼的對比動作
Centos默認已經安裝了這些軟件:cyrus-sasl,cyrus-sasl-plain,cyrus-sasl-md5,saslauthd

查看saslauthd支持哪些密碼管理機制: saslauthd -v
saslauthd的配置文件: /etc/sysconfig/saslauthd
1、告知Cyrus使用來提供SMTP服務的程序爲saslauthd才行
vim /etc/sasl2/smtpd.conf
log_level :3 <==登錄文件信息等級的設定,設定3即可
其他設定值保持默認即可
saslauthd是個簡單的賬號密碼管理服務,幾乎不需要進行其他額外的設定,直接啓動即可

2、更改main.cf的設定項目:讓postfix支持SMTP身份驗證
vim /etc/postfix/main.cf
#在最後面增加與SASL有關的設定資料
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
#然後找到跟relay有關的設定項目,增肌一段允許SMTP認證的字樣:
smtpd_recipient_restrictions =
permit_sasl_authenticated, <==重點在這裏,注意順序,放在第二行
重啓postfix服務即可

非固定IP郵件服務器: relayhost
例如:環境是臺灣地區的hinet所提供的用戶,hinet提供的郵件主機爲ms1.hinet.net,則這樣設定:
在postfix配置文件加入一段數據即可:
vim /etc/postfix/main.cf
relayhost = [ms1.hinet.net] <==加入這行數據,注意中括號
重啓postfix服務

postfix提供的其他設定:
1、單個郵件信箱的大小限制:
修改配置文件: message_size_limit = 單封信件的最大容量 <==值是以bytes爲單位
2、限制某個郵件賬戶的大小:
修改配置文件: mailbox_size_limit = 單個賬戶的最大容量 <==值是以bytes爲單位
修改完後需要重啓postfix服務或 postfix reload
3、寄件備份:SMTP自動轉寄一份到備份匣
修改配置文件: always_bcc = [email protected] <=== [email protected]代表信箱名br/>這樣設定後任何人寄出的信件都會複製一份到[email protected]信箱(涉及隱私侵犯,注意)
收件備份可以使用/etc/aliases來處理

配置文件的權限問題:
/etc/aliases這個檔案的權限,通常其權限爲644 ;
Mail server讀取的數據庫,通常權限爲640 ;
系統的隊列目錄(/var/spool/mqueue或/var/spool/postfix)權限通常爲700 ;
~/.forward 檔案的權限不能設定爲任何人均可查閱的權限,否則e-mail數據可能會被竊取;
一般用戶能夠不用 ~/.forward 與 aliases的功能,就不要使用

資料備份: 對單純的Mail Server來說,需要備份的數據如下:
/etc/passwd,/etc/shadow,/etc/group 等與賬號有關的資料;
/etc/mail,/etc/postfix/底下的所有檔案數據;
/etc/aliases 等等MTA相關檔案;
/home 底下的所有用戶數據;
/var/spool/mail底下的檔案與/var/spool/postfix郵件隊列檔案;
其他如廣告軟件、病毒掃描軟件等等的設定與定義檔;

錯誤檢查:查出不能啓動postfix的問題流程
1、關於硬件設備;關於網絡參數的問題;關於服務的問題,確認與mail server 有關的端口已經啓動,例如: port 25,110,143,993,995等,使用netstat指令即可查詢到
2、關於防火牆的問題:使用iptables來檢查是否放行mail server相關的端口
3、關於配置文件的問題:查看登錄檔即可
4、其他檔案的設定問題
5、查看/var/log/maillog或/var/log/mail

MX recode 可以讓mail server 經由MX以及A(address)這個記錄來進行mail gateway與mail route的功能,能夠達到的作用相當的多
Mailing list 就是將使用者寄給一個賬號郵件時,該賬號會主動的將該郵件傳送到所有的用戶去
利用postconf -n 即可察看[目前main.cf裏面設定的參數],如果看所有的參數,則直接使用postconf 即可
imap :允許用戶在主機的家目錄建立郵件數據文件夾

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章