Postfix:每个服务器端口有不同的智能主机

Postfix:每个服务器端口有不同的智能主机

我需要安装 Postfix 并让它监听两个不同的端口:1025 和 1026:

/etc/postfix/master.cf:

1025      inet  n       -       y       -       -       smtpd
1026      inet  n       -       y       -       -       smtpd

我需要两个不同的中继主机来接收来自这两个端口的消息:

  • relay1.domain.com对于到达端口的消息1025
  • relay2.domain.com对于到达端口的消息1026

中继主机使用不同的身份验证(对于此我知道我可以使用该smtp_sasl_password_maps选项)。

我能做的是在不同的端口上启用两种传输,但我不能做的是为不同的传输指定不同的中继主机:我知道我可以使用该transport_maps选项为不同的目的地指定不同的传输(和中继主机),但不能为不同的监听端口指定。

我也知道我可以创建不同的 Postfix 实例(使用不同的master.cf配置文件),但我想保留单个实例,这样我就不必处理不同的systemctl服务。

你有什么主意吗?

答案1

男人 5 大师小心:

逻辑行以非空白文本开头。以空白开头的行继续逻辑行。

通常以空格开头的行会延续表的最后一个字段,并允许为该表中的命令提供参数。

知道您可以通过命令行参数直接设置(覆盖)smtpd属性:master.cf

1025      inet  n       -       y       -       -       smtpd
    -o relayhost=[relay1.example.com]
1026      inet  n       -       y       -       -       smtpd
    -o relayhost=[relay2.example.com]

方括号抑制 MX 查找(例如,这将使用 A 记录,relay1.example.com而不是查找它的 MX 记录,然后查找该名称的 A 记录)。

main.cf这样,您就只需覆盖该守护进程特定实例的设置。

在“-o”的参数中不应有空格master.cf(特别是“=”周围不应有空格),您甚至不能为此使用引号。如果您需要在那里留空格,或者您只是想在中设置它main.cf,您可以在那里声明变量并在中引用它们master.cf

main.cf

relayhost_1025 = [relay1.example.com]
relayhost_1026 = [relay2.example.com]

master.cf

1025      inet  n       -       y       -       -       smtpd
    -o relayhost=$relayhost_1025
1026      inet  n       -       y       -       -       smtpd
    -o relayhost=$relayhost_1026

或者,可以使用花括号来括起空格;这在我链接的手册中描述过,但我自己从未这样做过。

您可能已经猜到了,任何选项都可以像这样覆盖,而且您可以覆盖多个选项。即使您master.cf仔细查看默认值,您也可能会注意到使用该语法的(可能)注释掉的submission服务。通常还会定义其他服务,这些服务跨越多行,就像这样。用它作为示例。

相关内容