Postfix的使用與分析

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. 郵件接收

  • 可使用性能調優工具ashape,來查看maildrop queue,incoming queue,和activequeue的狀態,根據狀況調節
  • DNS查找性能:能夠運行一個本地DNS server 用來提升DNS查找所須要的時間
  • 消除沒必要要的LDAP查詢
  • 當Postfix對客戶端的響應過慢時:
  • 經過debug的方式查找日誌排查問題,postfix收發郵件失敗或成功都會記錄日誌
  • 關閉header_checks和body——checks模式
  • 關閉chroot_operation
  • 若是日誌中記錄client unkown則多是由於DNS出錯
  • smtpd的進程數達到了master.cf中的限制

      更多關於smtpd server processes的性能問題:

  •   postfix2.0或更新的版本在想smtp client 報告一個錯誤的時候會暫停,這會形成延遲,能夠經過關閉錯誤郵件回覆的延時設定來規避這個問題。
  • 經過以上設定,postfix或者更新的版本在一樣數目的SMTP server 進程數的基礎上可以更多的處理SMTP客戶端的連接。
  • 其餘

2.  郵件分發

  • 可使用性能調優工具ashape,來查看maildrop queue,incoming queue,和activequeue的狀態,根據狀況調節
  • 經過qshape檢查
  • 每一個消息提交多個收件人。而不是分條多個提交
  • 使用SMTP協議提交郵件,而不是使用「sendmail」命令,調整smtpd_recipient_limit設置
  • 經過優化提交mail的並行參數或者打開postfix 的in_flow_delay設置,使得郵件的提交速度不要超過硬盤的I/O
  • 新建一個本地的DNS server
  • 減小smtp_connect_timeout and smtp_helo_timeout 的值,以減小發送郵件到沒有回覆SMTP server 所消耗的時間
  • 爲有問題的郵件設置專用的郵件傳輸策略
  • 對第一次投遞失敗的右鍵使用fallback_relay
  • 加大緩存
  • 使用固態硬盤
  • 調整遞延郵件傳遞嘗試的頻率
  • 調整同時投遞的數量
  • 調整每次投遞的收件人數量

3.      其餘

  • 調整Postfix 的進程數
  • 調整系統上的進程數
  • 調整打開的文件數和sockets數(節約資源)

Postfix瓶頸分析

       Postfix系統內置了性能分析工具qshape,經過qshape可以定位致使Postfix性能問題的位置。

該分析的關注點在Postfix queue隊列擁塞問題上,能夠查看各個隊列的統計信息

qshape的使用:

        運行在root帳號下的qshape可以提供一個Postfix 隊列信息的表格視圖,在橫軸上它爲當前消息提供了細粒度隊列年齡,爲舊消息提供了粗粒度的隊列年齡薪資,縱軸提供了消息的目的地址,對於域名消息數最多的最早顯示。

        好比咱們能夠查看一下前十名的垃圾郵件信息:

        命令qshape -s hold | head

        

        用qshape作問題定位:

  • qshape incoming
  • qshape active
  • qshape deferred | head
  • etc..

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可選的配置參數:

  • 單點登陸
  • 默認驗證域
  • 可指定網段免認證
  • 在郵件頭添加SALS認證用戶名
  • 客戶端SASL認證配置:略..

Postfic TLS 支持

     (TLS可以提供基於證書的加密和認證會話)

       開啓Postfix 的TLS支持,不只意味着得到了加密郵件加密遠程SMTP客戶端認證信息的能力,還意味着打開了成千上萬行代碼(意味着會有性能損失或者產生BUG)

Postfix TSL工做流程:

               

  • smtpd8實現了基於TLS的SMTP服務端
  • smtp8實現了基於TLS的SMTP 客戶端
  • tlsmgr8負責生成僞隨機數,保持會話

配置TLS:

  • 生成證書文件
  • 指定證書文件
  • /etc/postfix/main.cf:

          smtpd_tls_cert_file = /etc/postfix/server.pem

  • smtpd_tls_key_file = $smtpd_tls_cert_file
  • 啓用TLS
  • /etc/postfix/main.cf:

          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
相關文章
相關標籤/搜索