Postfix:启用 sender_dependent_default_transport_maps 时如何限制传出消息(smtp)?

Postfix:启用 sender_dependent_default_transport_maps 时如何限制传出消息(smtp)?

如果有人能针对我过去 7 天遇到的以下问题给我一些建议,我将不胜感激。

当前的状况:

1 个工作邮件服务器(共置),托管 5 个域名(不,我们不是托管公司,但它是域名的子公司),有 3 个 IP 地址。

  • 操作系统:Centos 7
  • MTA:带有虚拟邮箱/用户的 Postfix 版本 2.10.1 的单个实例

当前的邮件服务器运行良好,具有前面提到的 5 个域的虚拟用户/邮箱,并且 Postfix 速率限制运行良好,使我们不会被 gsuite 帐户或 yahoo 商业电子邮件或 Microsoft 365 用户标记为垃圾邮件。

但还有这些令人兴奋的新要求:)

管理层的新要求:

  • 4 个域名需要发送当前主 IP 地址,例如:1.2.3.4.5.11
  • 发送消息时,1 域名需要应用于另一个附加 IP 地址,例如:1.2.3.4.5.22。
  • 还必须应用速率限制,例如:

gmail.com polite: yahoo.com polite: hotmail.com turtle: live.fr turtle: orange.fr turtle:

到目前为止我成功完成的事情:

  • 使用以下方式应用速率限制运输地图在 main.cf 文件中
  • 通过启用以下选项切换 IP 地址:1.2.3.4.5.22,以便使用不同的 IP 地址 (1.2.3.4.5.22) 发送 1 个目标域的 IP 地址sender_dependent_default_transport_maps在 main.cf 文件中。此探测结果为预期结果:使用该 1 个域发送时,IP 按照预期更改为附加 IP,其他域照常使用默认 IP。所有域都具有有效的 SPF 和 DKIM 验证(通过将电子邮件发送到我自己的免费 G​​mail 帐户进行测试)。

我通过征求您的建议试图解决的问题:

我不能同时做这两件事,因为当我使用sender_dependent_default_transport_maps随着运输地图,看来 Postfix 忽略了运输地图,因此速率限制不起作用。

我的问题是:

  • 有可能得到sender_dependent_default_transport_maps和...一起工作运输地图在 main.cf 中?

  • 如果可能的话,那么如何让它发挥作用?

请不要误会我之前没有做过或搜索过任何东西。事实上,我一直在网上搜索和尝试这个和那个,但仍然没有成功让两者一起工作,所以我在这里寻求帮助(希望如此!)。

非常感谢!

我的 main.cf 基本上没有中继主机,没有中继域,我想问的是在这行:

transport_maps = hash:/etc/postfix/transport

sender_dependent_default_transport_maps = hash:/etc/postfix/sender_dependent_transport_maps

我无法让它们一起工作,但当其中一个被注释时,我可以让它们单独工作。我不知道也不确定这是否是后缀行为,因为通常使用后缀一切皆有可能 :)...总有办法(我对后缀很有信心)

答案1

根据一位名叫@Ward 的好心人的建议,下面是我解决上述问题的方法。

对于我之前的问题,我的简短回答是:

不幸的是,当 sender_dependent_default_transport_maps 启用时,我们无法使用 transport_maps 限制传出消息(smtp)。(嘘...,是的,我知道)。它必须是其中一个处于活动状态的项目,即使您进行了 postfix 检查并且没有发现错误,但它不会那样工作。

另外,如果你觉得没有时间阅读这个长答案,并且想知道我是如何得出这个答案的,那么请阅读以下答案...我知道,它有点长,但值得一读。我主要记录了我在试用过程中遇到的错误,当找到方法时,我将其发布在这里,以激励自己继续前进,不要放弃这个 Postfix 设置事情 :P。

[2018 年 10 月 27 日更新] 仍在寻求该问题的帮助,但当然取得了进展:

因此,我一直按照@PeterZhabin 的建议设置另一个 postfix 实例,并且我确实成功设置了第二个 postfix 运行实例。

在继续之前,我想让你知道,我决定不使用sender_dependent_default_transport_maps。我认为在多个 Postfix 实例运行的环境中再次使用它没有任何意义,因为每个 Postfix 实例都可以有自己的 main.cf 和 master.cf。因此,我放弃了使用sender_dependent_default_transport_maps并使用运输地图对于两个后缀实例。

是的,安装成功,我希望只会出现一些小故障...这些故障是因为我也在使用 Amavisd,所以,我仍然需要你们的建议,关于如何让它运行。

感谢您继续阅读本文并继续帮助我,我想让您知道我真的很感激。

那么,让我们继续这个过程...

后缀的多个实例

以下是我更改的与此主题相关的配置:

这是 /etc/postfix/main.cf 中的 main.cf(第一个 postfix 实例):

inet_interfaces = 1.2.3.4.5.11
myhostname = mail.thecompany.com
multi_instance_wrapper = ${command_directory}/postmulti -p --
multi_instance_enable = yes
multi_instance_directories = /etc/postfix-second

这是我的 /etc/postfix-second/main.cf 中的 main.cf (第二个 postfix 实例):

inet_interfaces = localhost, 1.2.3.4.5.22
myhostname = mail2.thecompany.com
syslog_name = postfix-second
#master_service_disable = inet
#authorized_submit_users =
multi_instance_group = postfix
multi_instance_name = postfix-second
multi_instance_enable = yes
smtp_bind_address = 1.2.3.4.5.22

在 /etc/postfix-second/master.cf 中:

更改了该行,以便它不会与该行中的第一个后缀实例发生冲突:

127.0.0.1:10025 inet n - - - - smtpd

进入

1.2.3.4.5.22:10025 inet n - - - - smtpd

所以现在,本节的所有内容/etc/postfix-second/master.cf如下所示:

#127.0.0.1:10025 inet n - - - - smtpd
1.2.3.4.5.22:10025 inet n - - - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8,1.2.3.4.5.22
        -o strict_rfc821_envelopes=yes
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

然后我将我的第二个 IP 添加到我的 /etc/amavisd/amavisd.conf,这样我就不会收到 Blocked-MTA 错误:

@inet_acl = qw( 127.0.0.1 [::1] 1.2.3.4.5.22);

更新 DNS 并创建与 mail2.thecompany.com 匹配的反向 DNS

接下来,我重新启动了 Amavisd 和 Postfix,进入我的 DNS 面板,并在 thecompany.com DNS 上创建了一个新的 A 记录:

mail2.thecompany.com A 1.2.3.4.5.22

然后,我创建了一个反向 DNS 以将 IP 与 mail2.thecompany.com 匹配。

按预期向 DOMAIN5.COM 添加新的 MX 记录

然后,转到 DOMAIN5.COM DNS 面板并添加另一个 MX 记录:

MX      10       mail.thecompany.com   
MX      15       mail2.thecompany.com

DNS 解析后,我通过启动 Postfix 进行了测试,并且邮件日志中没有显示任何错误。

然后在我的电子邮件客户端(Thunderbird)中,我设置了一个邮件[电子邮件保护]使用 SMTP 和 IMAP 设置:

信息访问协议

host: mail2.thecompany.com
username: [email protected]
pass: mypass

邮件传输协议

host: mail2.thecompany.com
username: [email protected]
pass: mypass

最后,我向我的 Gmail 帐户发送了一封测试电子邮件,并在日志中看到它来自postfix-second/smtp,然后我以为没问题,直到我发现下一行是发送自后缀/smtp到 Gmail:(... 进入我的 Gmail,查看邮件标题,发现邮件是使用默认 IP 发送的,即1.2.3.4.5.11并不是1.2.3.4.5.22

哦,好消息是,他们设置为 mail.thecompany.com 的其他 4 个域名 IMAP 和 SMTP 设置运行正常,所有邮件都正常收发:)。

我现在的问题是:如何设置domain5.com使用 IP 发送1.2.3.4.5.22而不是来自 IP1.2.3.4.5.11

[2018 年 10 月 28 日更新] 终于可以正常工作了!

我想确认在 2018 年 10 月 27 日的第二个 postfix 实例中禁用 content_filtering 后,上述配置是否正常工作,如下所示:

在 /etc/postfix-second/main.cf 中我评论了以下行:

#content_filter = smtp-amavis[1.2.3.4.5.22]:10024

并注释掉 /etc/postfix-second/master.cf 中的 content_filter

smtp      inet  n       -       n       -       -       smtpd
#       -o content_filter=smtp-amavis:1.2.3.4.5.22:10024

为了真正测试第二个实例是否正常工作,我停止了所有 postfix 实例,然后仅使用以下命令启动第二个 postfix 实例:

postmulti -i postfix-second -p start

是的,邮件已发送并且可以接收:)。

现在,回答我自己的问题:如何设置 **domain5.com使用 IP 发送1.2.3.4.5.22而不是来自 IP1.2.3.4.5.11?**

我只需在邮件客户端 (Thunderbird) 中将 SMTP / OUTGOING SERVER 设置为 mail2.thecompany.com。就这样,它开始使用目标 IP 发送邮件,当我想返回时,我将 Thunderbird 上的 SMTP 服务器设置为 mail.thecompany.com,并且仍然能够发送电子邮件。

这种方法的优点是,当 mail2.thecompany.com 发生某些事情(例如被列入黑名单)时,用户自己也可以更改 SMTP 设置以返回 mail.thecompany.com,并且邮件将再次有效。

对于那些认为这已经足够的人来说,你可以在这里停下来。

但对我来说,我仍然想知道如何让第二个 postfix 实例与启用 content_filter 一起工作。但这将是另一个问题。

祝你好运。

[2018 年 10 月 29 日更新] 结论和最终更新:

这是我对此任务的总结。管理层的所有要求都已满足,因此任务已完成。现在,当 Amavis 内容过滤器被 BYPASS 到内部网络时,domain5.com 可以从同一服务器上的其他 IP 发送。

然而,我觉得这种方法不太好,因为 Amavis 需要做它应该做的事情来保护在同一台机器上运行的 Postfix 的两个实例。

将 Amavis 的内容过滤设置为 ON 后,Amavis 会在扫描完成后将 smtp 转发到 postfix 的第一个实例。

虽然 amavisd 可以配置为监听多个 TCP 端口,但不幸的是它只支持单个 $notify_method 和 $forward_method,实际上会将所有从第二个 postfix 实例发送的邮件转发回第一个 postfix 实例。因此,当电子邮件从第二个实例发送时,IP 会变回 1.2.3.4.11(第一个 IP)。

唯一能阻止 Postfix 1 从 IP 1 发送、Postfix 2 从 IP 2 发送的方法是绕过 Amavis 进行内容过滤,将其发送到内部网络。但是,这也意味着,当恶意软件注入我们的服务器时,我们将没有安全措施来阻止它们向其他服务器发送电子邮件,而这不太可能(至少对我来说是这样)。

最后,我采用了服务器虚拟化方法,而不是将 Postfix 创建到另一个实例中。

希望这能帮助那些遇到与我同样问题的人。

再见!

相关内容