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