Postfix簡介:後端
在IBM的GPL協議下開發的MTA(郵件傳輸代理)軟件,Postfix更快更容易管理,更安全,同時與sendmail保持兼容。緩存
官網地址:http://www.postfix.org/安全
郵件服務器發信原理圖:性能優化
postfix構建組成圖:服務器
要點:網絡
Postfix mail queue(Postfix隊列):架構
1 maildrop queuesocket
maildrop queue 是經過Postfix sendmail 命令發送可是還未被Postfix pickup 服務加到postfix 主隊列的郵件所處的隊列工具
2 hold queuepost
smtpd access 策略或者是cleanup的檢查能夠將部分郵件長時間的放置在hold queue隊列
3 incoming queue
全部進入postfix隊列的郵件都會由cleanup放置到incoming queue裏。
4 active queue
準備發送的郵件隊列
瓶頸:CPU、I/O
5 deferred queue
一些發送失敗的郵件隊列
Postfix收件流程圖:
Postfix基本配置:
Postfix的配置項大概有100個,因此這還真是個問題
一、myorigin 參數指明發件人所處的域
二、mydestination 參數指明Postfix接收郵件中收件人所處的域
三、myhostname 參數指明Postfix運行的主機名
四、mynetworks 參數指定Postfix所在的網絡地址
五、inet_interfaces 參數指定postfix系統監聽的端口
Postfix內容檢查模塊:
一、內置檢查
二、前置隊列檢查
三、後置隊列檢查(簡單設置、高級設置):
簡單Filter:效率低,魯棒性低,命令行調用
高級Filter:效率高,魯棒,SMTP協議調用
Postfix性能調優
在postfix已經可以正常工做以後進行的性能優化工做。
1. 郵件接收
更多關於smtpd server processes的性能問題:
2. 郵件分發
3. 其餘
Postfix瓶頸分析
Postfix系統內置了性能分析工具qshape,經過qshape可以定位致使Postfix性能問題的位置。
該分析的關注點在Postfix queue隊列擁塞問題上,能夠查看各個隊列的統計信息
qshape的使用:
運行在root帳號下的qshape可以提供一個Postfix 隊列信息的表格視圖,在橫軸上它爲當前消息提供了細粒度隊列年齡,爲舊消息提供了粗粒度的隊列年齡薪資,縱軸提供了消息的目的地址,對於域名消息數最多的最早顯示。
好比咱們能夠查看一下前十名的垃圾郵件信息:
命令qshape -s hold | head
用qshape作問題定位:
Postfix SASL認證
配置SASL須要兩部,一是配置SASL認證列表和認證所需的後端,好比密碼文件或其餘數據源,二是配置postfix使其啓用SASL。
目前Postfix 支持Cyrus SASL和Dovecot SASL兩種認證的實現方式。
以Dovecot爲例:
Dovecot配置:
Postfix啓用SASL:
若是Dovecot使用Unix 套接字
/etc/postfix/main.cf:
smtpd_sasl_type = dovecot
若是Dovecot使用TCP套接字(將127.0.0.1改爲遠端IP可進行遠程認證)
/etc/postfix/main.cf:
smtpd_sasl_path = inet:127.0.0.1:12345
啓用SASL認證:
/etc/postfix/main.cf:
smtpd_sasl_auth_enable = yes
配置好以後重啓或reload Postfix便可
驗證:
其餘SMTP server SASL可選的配置參數:
Postfic TLS 支持
(TLS可以提供基於證書的加密和認證會話)
開啓Postfix 的TLS支持,不只意味着得到了加密郵件加密遠程SMTP客戶端認證信息的能力,還意味着打開了成千上萬行代碼(意味着會有性能損失或者產生BUG)
Postfix TSL工做流程:
配置TLS:
smtpd_tls_cert_file = /etc/postfix/server.pem
smtpd_tls_security_level = may
Debug的幾種方法:
移植Postfix到各個系統不免會遇到各類各樣的錯誤,對於調試而言,或許沒有什麼比查看Log更好的辦法了
是吧?那些刪掉log的人,大家感受怎麼樣啊...
好了,言歸正傳
移植Postfix的時候,啓動Postfix使用的是 /usr/sbin/postfix start 命令,若是在一個陌生的系統下單純的拷貝移植可能會遇到缺失庫與配置文件等等的問題,這個時候會在命令行下打印出來。接着就是系統啓動以後的事情了。
Postfix採用的是獨立分佈的架構,整個系統由各個模塊分別獨立運行,經過常駐的master進程進行調度,當遇到問題的時候能夠在syslog 生成的/var/log/mail.log去查看日誌,固然也多是更好用的rsyslog,不過都同樣。可是呢,你也可能遇到比較奇葩的,你的系統沒有syslog!!! [呵呵.gif]
這時候你能夠用系統的nc命令監聽/dev/log這樣一樣可以監聽到日誌消息
還有一種查看內部錯誤的方式就是
sendmail -v root@localhost [addr] 這個時候會將調試的debug記錄發送到系統用戶的mailbox裏邊,so,這也是一種方法
對固然還有一種更通用的strace命令,這個估計對sendmail會好用些,對於Postfix這種分離的架構而言,親測不太好用
總之呢,仍是有log好,沒有就只能走偏門了,是吧!
其餘:
telnet 25 端口加密發件:
openssl s_client -debug -starttls smtp -crlf -connect localhost:25