Postfix软件使用分析

Postfix简介:

在IBM的GPL协议下开发的MTA(邮件传输代理)软件,Postfix更快更容易管理,更安全,同时与sendmail保持兼容。
官网地址:http://www.postfix.org/

邮件服务器发信原理图:

postfix构建组成图:

要点:

Postfix mail queue(Postfix队列):
1 maildrop queue
maildrop queue 是通过Postfix sendmail 命令发送但是还未被Postfix pickup 服务加到postfix 主队列的邮件所处的队列
2 hold queue
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个,所以这还真是个问题
1、myorigin 参数指明发件人所处的域
2、mydestination 参数指明Postfix接收邮件中收件人所处的域
3、myhostname 参数指明Postfix运行的主机名
4、mynetworks 参数指定Postfix所在的网络地址
5、inet_interfaces 参数指定postfix系统监听的端口

Postfix内容检查模块:

1、内置检查
2、前置队列检查
3、后置队列检查(简单设置、高级设置):
简单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 incomingqshape activeqshape deferred | headetc..

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

其他:
telnet 25 端口加密发件

标签:Postfix 发布于:2019-10-21 23:16:08