Postfix Header_Check 正则表达式“不匹配”问题

Jus*_*Guy 1 postfix regex

我正在尝试将 Postfix 配置为不接受来自除我自己的域之外的地址的出站邮件。

以下正则表达式仅成功拒绝 3 个域:

/etc/postfix/header_checks:
/(^From:.*domain\.com|^From:.*domain\.net|^From:.*domain\.co\.il)/ REJECT SEND FROM THE RIGHT DOMAINS FFS!
Run Code Online (Sandbox Code Playgroud)

我想基本上扭转它并阻止除这三个之外的所有内容。

所以根据手册:

!/pattern/flags result 当pattern 与输入字符串不匹配时,使用相应的结果值。

然而,这只会阻止一切:

/etc/postfix/header_checks:
!/(^From:.*domain\.com|^From:.*domain\.net|^From:.*domain\.co\.il)/ REJECT SEND FROM THE RIGHT DOMAINS FFS!
Run Code Online (Sandbox Code Playgroud)

mas*_*oeh 5

问题是 postfix 对每个标题行使用 header_checks 。所以如果有像这样的标题行

Subject: I love you :p
Run Code Online (Sandbox Code Playgroud)

postfix 会将该正则表达式应用到这一行中。结果就是postfix会拒绝这封邮件。

解决方案是添加if endif您的正则表达式模式

if /^From:/
!/(^From:.*domain\.com|^From:.*domain\.net|^From:.*domain\.co\.il)/ REJECT SEND FROM THE RIGHT DOMAINS FFS!
endif
Run Code Online (Sandbox Code Playgroud)

基本上,您告诉 postfix 仅将模式应用到From标头中。这将阻止 postfix 将正则表达式评估为另一个标题行并导致电子邮件被拒绝。

请参阅postfix 手册 以获取更多信息