如何使用 Postfix 为任何来信添加单个标题?

如何使用 Postfix 为任何来信添加单个标题?

我已运行 Postfix,并在 master.cf 中配置了许多 smtpd 进程,如下所示:

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
  -o ...   # internet-only overrides

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
  -o ...   # internal-only overrides

现在,我想添加一个具有静态名称和值的标题,以传入邮件取决于它是在哪个 smtpd 上接收的。

例子:

X-Gert-Postfix-Received-From: the evil internet

我考虑的选择:

  1. 添加header_checks选项并使用PREPEND文件中的操作。

    快到了,但是:

    • 它需要匹配现有的标题,然后在后续匹配中再添加一个。
    • 我并不总是已经拥有某个特定的标题,例如,甚至可能From缺少一个。
    • 如果您已经存在,我认为header_checks没有简单的方法来堆叠两个文件。header_check
  2. 构建一个使用Milter 协议并将其与 Postfix 连接起来smtpd_milters

    当然,这可行。我可以在自己的应用程序中检查邮件,然后在那里注入邮件头。对于添加邮件头这样的简单任务来说,这似乎过于复杂了。此外,它需要额外的维护,需要运行另一个守护程序应用程序、相当多的样板代码等。

  3. 根据评论中的建议,使用check_recipient_access相关问答)。

    header_checks(见1)有相同的缺点。

我感觉我忽略了一些简单的事情。有人有更好的主意吗?

答案1

如果您有现有的 header_checks,我认为没有简单的方法来堆叠两个 header_check 文件。

实际上有一种方法可以让每个守护进程拥有多个独立的 header_checks 文件。

每个-omaster.cf 中的选项会覆盖 main.cf 中的默认值或任何 postfix 配置参数。要为每个守护进程设置不同的 header_checks(例如/etc/postfix/header_checks1/etc/postfix/header_checks2),你必须覆盖每一个header_checks范围:

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
-o header_checks = regexp:/etc/postfix/header_checks1

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
-o header_checks = regexp:/etc/postfix/header_checks2

这样你将拥有完全独立的header_checks每个 smtpd 守护进程的文件数。从那里,您可以添加规则,将您谈论的标签添加到前面。

答案2

要解决的限制smtpd_*_restrictions

一条消息(即使是发件人为“空”的消息)也只有一个信封发件人。因此请使用check_sender_access而不是check_recipient_access。使用的查找类型可以是 ,static:因为我们不关心返回路径的细节。在任何检查生成结果之前,将其添加到 smtpd_sender_restrictions 列表中ACCEPT(postfix 不会查询超出范围的其他查找)。

# in main.cf
common_sender_restrictions =
  reject_non_fqdn_sender
  reject_unknown_sender_domain
  ..
internet_sender_restrictions =
  $common_sender_restrictions
  check_sender_access static:{PREPEND X-Gert-Postfix-Received-From: the evil internet}

# in master.cf
192.0.2.0:25        inet  n       -       y       -       -       smtpd
 -o smtpd_sender_restrictions=$internet_sender_restrictions
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
 -o smtpd_sender_restrictions=$common_sender_restrictions

相关内容