问题:我试图通过同一服务器通过域 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
操作是重新启动主实例和辅助实例。