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
相关文章
相关标签/搜索