Postfix 多实例 - 测试从外部电子邮件 xlient 连接到辅助实例以发送电子邮件

Postfix 多实例 - 测试从外部电子邮件 xlient 连接到辅助实例以发送电子邮件

问题:我试图通过同一服务器通过域 email.domain1.us 和 email.domain2.net 与经过身份验证的用户发送和接收电子邮件,并且能够接收电子邮件。

我有 domain1.us 和 domain2.net,它们都托管在同一台服务器上,具有独立的公共 IP 100.100.100.1 和 200.200.200.2,IP 100.100.100.1 解析 domain1.us,IP 200.200.200.2 通过 A DNS 记录解析 domain2.net。对于电子邮件子域,除了之前所述的内容外,现在 IP 100.100.100.1 还通过 A DNS 记录解析 email.domain1.us,IP 200.200.200.2 email.domain2.net,并且还具有 MX DNS 记录。

我正在运行 Ubuntu 16.04.5 LTS,我安装了 postfix 并成功设置了 email.domain1.us,以根据我的虚拟哈希文件接收和分发电子邮件,并仅通过标准端口 465 上的 SSL 的安全连接发送来自经过身份验证的用户的电子邮件。SPF、DMARC、DKIM 设置并记录所有良好和通过的身份验证(根据 GOOGLE 当我向我的 GMAIL 帐户发送测试时)

我正在运行 Ubuntu 16.04.5 LTS

netstat -ltn节目

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:587           0.0.0.0:*               LISTEN
tcp        0      0 100.100.100.1:587       0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:465           0.0.0.0:*               LISTEN
tcp        0      0 100.100.100.1:465       0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0      0 100.100.100.1:25        0.0.0.0:*               LISTEN

然后我使用 postmulti 设置了一个辅助后缀实例,非常简单:

postmulti -e init
postmulti -I postfix-2 -e create

更改或确保以下内容位于我的主要 postfix main.cf 文件上

nano /etc/postfix/main.cf

inet_interfaces = localhost, 100.100.100.1                       # This was changed from inet_interfaces = all
myhostname = mail.domain1.us                                     # just making sure to have different names on each
multi_instance_wrapper = ${command_directory}/postmulti -p --    # These were added
multi_instance_enable = yes                                      # by the postmulti command init
multi_instance_directories = /etc/postfix-2                      # This one was added by postmulti enable command

然后我备份了辅助后缀实例的 main.cf 和 master.cf,并复制了主后缀实例的 main.cf 和 master.cf:

cp /etc/postfix/main.cf etc/postfix-2/main.cf cp /etc/postfix/master.cf etc/postfix-2/master.cf

并编辑参数使其独立,并且存在多实例所需的行。

nano etc/postfix-2/main.cf

inet_interfaces = localhost, 200.200.200.2                       # This was changed from inet_interfaces = all
myhostname = mail.domain2.net                                    # Just making sure to have different names on each
virtual_alias_maps = hash:/etc/postfix-2/virtual                 # Want to have different users/inboxes
inet_protocols = ipv4                                            # Some of these were added 
master_service_disable = inet                                    # by the enable and/or init commad
authorized_submit_users =                                        # others were added by me after 
queue_directory = /var/spool/postfix-2                           # reading how to do it better
data_directory = /var/lib/postfix-2
multi_instance_name = postfix-2
multi_instance_enable = yes

然后在辅助 Postfix 实例的 master.cf 上进行以下更改,以分离端口

nano /etc/postfix-2/master.cf

# smtp  inet  n  -  y  -   -  smtpd -o smtpd_sasl_auth_enable=yes    # Commented this line out
10025   inet  n  -  n  -   -  smtpd -o smtpd_sasl_auth_enable=yes    # Added this line
.
.
.
#smtps  inet  n  -  y  -   -  smtpd                                  # Commented this line out
10465   inet  n  -  y  -   -  smtpd                                  # Added this line

最后为使用 postmap 的辅助 Postfix 实例创建虚拟哈希文件并启用该实例

postmulti -i postfix-2 -e enable

重新启动 postfix

service postfix restart

并检查实例的状态

postmulti -i postfix-2 -p status
postfix-2/postfix-script: the Postfix mail system is running: PID: 28004

我自己查阅了论坛和问题才走到这一步,但我遇到了瓶颈,我已经广泛研究了如何测试辅助实例,但我找不到如何操作,当我尝试时,我没有看到端口 10025 和 10465netstat -ltn当然,当我尝试在某个地方测试 mail.domain2.net 的 SMTP 时,smtper.net/我收到以下错误:

SMTP send error
Failure sending mail.
No connection could be made because the target machine actively refused it. [::ffff:104.168.34.235]:25

即使经过所有这些更改和辅助 Postfix 图像设置后,一切对于 email.domain1.us 仍然运行正常,但对于 email.domain2.net 却无法正常运行。

答案1

我在设置多个 Postfix 实例时遇到了同样的问题。辅助实例默认禁用 TCP。要启用它,请编辑/etc/postfix-2/main.cf

master_service_disable = 
inet_interfaces = loopback-only

明确设置master_service_disable为空以启用 TCP。设置inet_interfaces为您希望监听的 IP(或者loopback-only如果您愿意)。

答案2

由于某种原因,systemctl restart postfix我没有重新启动我的机器上的辅助实例(Proxmox 6.4 上的 LXC 容器中的 Ubuntu 20.04),因此它没有获取任何配置更改,包括在master.cf

重新启动可解决此问题,后续systemctl restart postfix操作是重新启动主实例和辅助实例。

相关内容