容器化 Postfix 将外部电子邮件视为内部电子邮件

容器化 Postfix 将外部电子邮件视为内部电子邮件

我有一个在 LXD 容器中运行的 iRedMail 邮件服务器。
不幸的是,所有电子邮件目前都被视为内部电子邮件,这实际上使其成为开放中继。

容器主机
VPS,有自己的公网IP地址
操作系统:Debian 10
容器:LXD
完整域名:xxx.yyy
网络配置:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 155.xx.xx.xx  netmask 255.255.255.255  broadcast 155.xx.xx.xx
lxdbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.33.196.1  netmask 255.255.255.0  broadcast 0.0.0.0


在容器内运行的邮件服务器
操作系统:Debian 10
邮件服务器:iRedMail 1.1 LDAP
Postfix 版本:3.4.10
FDQN:mail.xxx.yyy
网络配置:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.33.196.133  netmask 255.255.255.0  broadcast 10.33.196.255     
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0


当外部方尝试在没有凭据的情况下通过端口 25 发送电子邮件时,会发生这种情况:
/var/log/mail.log: (出于隐私原因已编辑)

May 14 17:18:35 mail postfix/postscreen[18271]: WHITELISTED [127.0.0.1]:57298
May 14 17:18:37 mail postfix/smtpd[18273]: connect from mail.xxx.yyy[127.0.0.1]
May 14 17:18:37 mail postfix/smtpd[18273]: Anonymous TLS connection established from mail.xxx.yyy[127.0.0.1]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
May 14 17:18:39 mail postfix/smtpd[18273]: 49NJCz4yZqzBl7wn: client=mail.xxx.yyy[127.0.0.1]
May 14 17:18:39 mail postfix/cleanup[18294]: 49NJCz4yZqzBl7wn: message-id=<[email protected]>
May 14 17:18:39 mail postfix/qmgr[1287]: 49NJCz4yZqzBl7wn: from=<[email protected]>, size=562, nrcpt=1 (queue active)
May 14 17:18:39 mail postfix/smtpd[18273]: disconnect from mail.xxx.yyy[127.0.0.1] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
May 14 17:18:40 mail postfix/10025/smtpd[18297]: connect from mail.xxx.yyy[127.0.0.1]
May 14 17:18:40 mail postfix/10025/smtpd[18297]: 49NJD00vNpzBl7wv: client=mail.xxx.yyy[127.0.0.1]
May 14 17:18:40 mail postfix/cleanup[18294]: 49NJD00vNpzBl7wv: message-id=<[email protected]>
May 14 17:18:40 mail postfix/10025/smtpd[18297]: disconnect from mail.xxx.yyy[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
May 14 17:18:40 mail postfix/qmgr[1287]: 49NJD00vNpzBl7wv: from=<[email protected]>, size=1009, nrcpt=1 (queue active)
May 14 17:18:40 mail amavis[689]: (00689-01) Passed CLEAN {RelayedInternal}, MYNETS LOCAL [127.0.0.1]:57298 ESMTP/ESMTP <[email protected]> -> <[email protected]>, (), Queue-ID: 49NJCz4yZqzBl7wn,$
May 14 17:18:40 mail postfix/amavis/smtp[18295]: 49NJCz4yZqzBl7wn: to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10024, delay=1.1, delays=0.76/0.02/0.05/0.27, dsn=2.0.0, status=sent (250 2.0.0 fr$
May 14 17:18:40 mail postfix/qmgr[1287]: 49NJCz4yZqzBl7wn: removed<br>
May 14 17:18:41 mail postfix/smtp[18298]: Trusted TLS connection established to mx.zzz.com[153.x.x.x]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
May 14 17:18:42 mail postfix/smtp[18298]: 49NJD00vNpzBl7wv: to=<[email protected]>, relay=mx.zoho.com[136.x.x.x]:25, delay=2.6, delays=0.01/0.05/1.6/0.96, dsn=2.0.0, status=sent (250 Message rec$
May 14 17:18:42 mail postfix/qmgr[1287]: 49NJD00vNpzBl7wv: removed

这样消息就发送成功了。
在我看来,这是因为所有连接都由容器主机转发到容器环回 if,但我无法成功地将其更改为替代工作配置。
目前端口是使用LXC转发到容器的,如下:

root@xxx:~# lxc config device show mailserver
port25:
   connect: tcp:127.0.0.1:25
   listen: tcp:0.0.0.0:25
   type: proxy
port110:
   connect: tcp:127.0.0.1:110
   listen: tcp:0.0.0.0:110
   type: proxy
...

我尝试将其更改为:

port25:
   connect: tcp:10.33.196.133:25
   listen: tcp:0.0.0.0:25
   type: proxy

但这产生了单独的问题,外部电子邮件仍然被视为内部电子邮件。我搜索了容器化后缀配置以及在 LXD 中运行邮件服务器的其他情况,但无法找到解决方案。

如果有人能够为我指出正确的方向,那就太好了。谢谢你的帮助。
另外,如果需要任何其他信息,请告诉我。

答案1

感谢一些帮助,这就是解决方案:添加参数

proxy_protocol=true

到 LXD 代理设备,并添加行

postscreen_upstream_proxy_protocol = haproxy

/etc/postfix/main.cf
重新启动 postfix 后,原始 IP 地址将保留,并且连接现在被识别为外部连接。

相关内容