跳转到主要内容

于 2025年04月22日 摘录自 Postfix PCRE Support

PCRE(Perl 兼容正则表达式)映射支持

可选的"pcre"映射类型允许您使用 Perl 风格的正则表达式语法(如 \s 表示空格、\S 表示非空格)来指定正则表达式。然而,其主要优势在于 pcre 查找通常比 regexp 查找更快。这是因为 pcre 的实现通常比许多系统中使用的 POSIX 正则表达式实现更高效。

有关如何使用 PCRE 表的详细说明(包括示例),请参阅 pcre_table(5) 手册页。有关 PCRE 本身的更多信息,请访问 http://www.pcre.org/

使用支持 PCRE 的 Postfix 包

要在 Debian GNU/Linux 的 Postfix 或 Fedora/RHEL 的 Postfix 中使用 PCRE,只需安装 postfix-pcre 包即可。无需重新编译 Postfix。

从源代码构建支持 PCRE 的 Postfix

这些说明假设您已按照 INSTALL 文档从源代码构建了 Postfix。

要从源代码构建 Postfix 并支持 PCRE,您需要一个 PCRE 库。您可以安装供应商提供的包,或从 https://www.pcre.org/ 下载源代码并自行构建。

Postfix 可以使用 pcre2 库或旧版 pcre 库进行构建。让 Postfix 构建过程自动选择库可能是最简单的做法。以下命令将首先检测 pcre2 库是否已安装,如果未安装,则检测旧版 pcre 库是否已安装。

$ make -f Makefile.init makefiles 
$ make

要显式使用 pcre2 库构建 Postfix(Postfix 3.7 及更高版本):

$ make -f Makefile.init makefiles \
"CCARGS=-DHAS_PCRE=2 `pcre2-config --cflags`" \
"AUXLIBS_PCRE=`pcre2-config --libs8`"
$ make

要显式地使用旧版 PCRE 库构建 Postfix(所有 Postfix 版本):

$ make -f Makefile.init makefiles \
"CCARGS=-DHAS_PCRE=1 `pcre-config --cflags`" \
"AUXLIBS_PCRE=`pcre-config --libs`"
$ make

Postfix 3.0 之前的版本使用 AUXLIBS 而不是 AUXLIBS_PCRE。从 Postfix 3.0 开始,旧的 AUXLIBS 变量仍支持构建静态加载的 PCRE 数据库客户端,但只有新的 AUXLIBS_PCRE 变量支持构建动态加载或静态加载的 PCRE 数据库客户端。

未使用 AUXLIBS_PCRE 变量将导致动态数据库客户端加载失效。每个 Postfix 可执行文件都将依赖 PCRE 库。而这正是动态数据库客户端加载旨在避免的情况。

需知事项

  • 当 Postfix 在 pcre: 或 regexp: 查找表中搜索时,每个模式都会应用于整个输入字符串。根据具体应用场景,该字符串可能是整个客户端主机名、整个客户端 IP 地址或整个邮件地址。因此,不会进行父域或父网络搜索,"user@domain" 格式的邮件地址不会被拆分为用户名和域部分,"user+foo" 也不会被拆分为 user 和 foo。
  • 正则表达式表,如 pcreregexp,不允许在可能涉及安全敏感信息的查找结果中进行 $number 替换:目前,此限制适用于本地 aliases(5) 数据库或 virtual(8) 交付代理表。