Postfix 进入 3.0.0 时代,大量热辣新特性出现

2015-02-10
2分钟阅读时长

Postfix 3.0.0 正式版发布了,这次发布也标志着对其 2.8 版本的支持结束。

Postfix 2.x 系列从2003年开始发表,已经维护了十余年了。这次大版本跨越,带来了许多有趣的特性改进,主要如下:

  • 增加了SMTPUTF8 支持,支持使用国际化的域名和本地地址部分,它们由 RFC 6530 及相关文档定义(即支持类似这样的邮件地址: 商务@公司.中国,支持@技术.翻墙)。该实现是基于由 CNNIC 赞助的 Arnt Gulbrandsen 所提供的代码的。SMTPUTF8 的支持还在持续开发中, 预计会在 3.1 中完成。参见 SMTPUTF8_README 。
  • 支持 Postfix 使用动态链接库和数据库插件。参见 INSTALL 查看可用选项的描述。
  • 由于 3.0 和2.x 系列的一些默认值不同,因此 Postfix 提供了一种安全网机制(compatibility_level),可以用来兼容老版本的 2.x 设置。参见 COMPATIBILITY_README 了解更多细节。
  • 支持对多个查询表的复合查询。如 pipemap:{map1,map2…} 支持多个查询表以管道方式连接起来(即前一个查询表的结果作为后一个查询表的查询条件);而 unionmap:{map1,map2,…} 会将同样的查询发送到多个查询表,并将结果联合起来返回。
  • 支持简单的伪查询表。如 inline:{key1=value1,key2=value2,…} 可以用于替代只有几个值的外部文件查询;而 randmap{value1,value2,…} 则可以从几个特定值内随机选择一个。
  • 支持对DNS 查询结果和投递状态代码和信息的查表转换。典型的,可以使用 PCRE 表来修复 DNS 查询的错误或投递错误信息。参见 smtp_dns_reply_filter、 smtp_delivery_status_filter 和 similarly-named 等参数。
  • 配置文件支持三元操作符,如 ${name?{iftrue}:{iffalse}};比较操作符,如 ${{expr1}==${expr2}?{iftrue}:{iffalse}};对每个过滤器/策略服务器指定超时及其它设置; master.cf 参数支持空格,输入和输出的环境变量可以包含空格,静态表查询结果可以包含空格;对 accsess(5)和 header/body_checks(5) 的多表查询支持预期在 3.1 版本完成。
  • 入站邮件会话的命令交互情况按照会话进行记录。例如,一个暴力攻击密码的机器人会记录为: “disconnect from name[addr] ehlo=1 auth=0/1 commands=1/2”,这代表着该客户端发送了一个成功的 EHLO 命令,而 AUTH 命令失败,并且没有 QUIT 即断开会话了。这些信息有助于你从大量日志中梳理出问题脉络。

更多细节信息可以参阅发布公告,及源代码中附带的 README_FILES、INSTALL 等文档。

Postfix 3.0.0 下载地址: ftp://mir1.ovh.net/ftp.postfix.org/postfix-release/index.html (或选择其他的镜像)。