本节将主要讨论每个服务在它自己的环境中如何工作。需要注意的是,带数字的名称代表Postfix的命令或服务程序,不带数字的名称代表Postfix的邮件队列。
常驻内存的服务master(8)就像一个督察员,它随时监视Postfix邮件系统的状况。一般情况下当执行“postfix start”命令时该进程就启动,直到系统关闭时才结束。要启动用于接收和投递邮件的Postfix服务器进程,它们必须依赖master(8) (必须先启动master进程),或者接收和投递的服务器进程由于某些原因需要重新启动,它们也必须依赖于master进程。在master.cf配置文件中指定的用于强制限定服务进程个数的选项(参数)也必须依赖master(8)进程。下图简单表示了Postfix启动时后台程序启动的层次关系,图中只列出了邮件处理的后台守护进程。
anvil(8) 服务实现了客户端连接和请求所有的smtpd(8)服务的速率限制,TUNING_README 文档可以指导我们处理SMTP客户端的一些不规范行为(例如并发发送邮件等恶意行为)。anvil(8)服务是在Postfix 2.2 之后的版本中才加入的功能。
bounce(8)、defer(8) 和 trace(8) 服务安照每封邮件一个日志文件的方式分别维护着它们各自的队列目录树,这些信息将用于通知发送者(sender)邮件是否已经被投递出去。
trace(8)服务用于支持(跟踪)Postfix 的 “sendmail -bv”和 “sendmail -v”命令所产生的关于Postfix如何投递邮件的报告信息。该功能是在Postfix 2.1之后的版本中加入的。关于trace(8) 服务的更多信息,请参考:DEBUG_README 。
flush(8) 服务维护每个目的地址日志,并且实现了ETRN(Extended TuRN的缩写,是SMTP协议的一个扩展,允许两台计算机在一个TCP连接中进行双向邮件传输。) 和 "sendmail -qRdestination" 两种功能,关于ENTR请参考:ETRN_README文档。 flush(8) 服务使得被选中的队列文件可以从 deferred queue (延迟队列)返回到 incoming queue (入口队列)以便请求继续投递。flush(8) 服务在Postfix 1.0之后的版本中被加入。
proxymap(8) 服务为Postfix进程提供只读表格的查询服务(以只读方式打开表格), 这一功能可以越过chroot的限制,并且在多进程中通过共享已经打开的一个表格的数据,从而减少了同一表格被打开的数量。
scache(8) 服务为Postfix的smtp(8)客户维护连接缓存。当一个被选中的目标的连接缓存被开启时,smtp(8) 客户不必在一封邮件传输完后立即断开连接,而是将该连接送入连接缓存服务器以便保持客户端与服务器的连接,smtp(8) 客户继续发出其它的邮件投递请求,直到限定的时间到达才被断开连接(同时该连接从连接缓存服务器中清出)。在连接缓存被保存期间内,smtp(8)进程可以随时请求scache(8)服务使用被缓存的连接进行其它的邮件投递工作,而不必从新与服务器建立连接。为安全起见,Postfix限定了连接可以被缓存(重用)的时间。
当我们投递邮件到一个多邮件服务器的目的地址时,连接缓存可以帮助我们避开那些没有响应的服务器,同时也提高了邮件的投递速度。
showq(8)服务列出Postfix的队列状态。该服务为 mailq(1) 和 postqueue(1) 命令工作。
spawn(8)服务在客户执行基于socket或FIFO请求时运行其它非Postfix命令,命令的标准输入、标准输出和错误输出都直接发送到通讯终端。关于spawn(8)服务的使用可以在 SMTPD_POLICY_README 文档中看到一些实例。
tlsmgr(8) 服务在 Postfix smtp(8) 客户或 smtpd(8) 服务开启TLS功能时运行,该进程有两重责任:
维护 随机数(PRNG)作为 Postfix smtp(8) 客户或 smtpd(8) 服务进程的TLS引擎的种子值,PRNG的状态被定期地存入到一个文件,当 tlsmgr(8) 启动时会读取该文件。
维护 Postfix smtp(8) 客户或 smtpd(8) 服务器的TLS会话的密钥缓存。,被保存的会话密钥通过减少TSL会话过程中的运算量提高了系统的性能。
TSL的支持在Postfix 2.2 以后的版本中已经加入,关于Postfix TSL的实现请参考:TLS_README 文档。
verify(8)服务在smtpd(8)服务接受一封邮件前交验它的发送者(sender)和接受收者地址是否存在(可用的)。 verify(8)服务通过从投递代理或者队列管理器往Postfix 队列发送消息来校验用户是否可用。关于该程序的描述,请参:ADDRESS_VERIFICATION_README 文档。该服务在Postfix 2.1 之后的版本中加入。
【编辑推荐】