我使用 LXD 在 Debian 10 容器中设置了一个 exim 服务器,然后创建了一个代理设备来将 SMTP 端口从主机映射到容器:
lxc config device add mycontainer myport25 proxy listen=tcp:x.x.x.x:25 connect=tcp:127.0.0.1:25
其中 xxxx 是主机的公共 IP。
端口转发工作正常,但正如我所料,exim 日志显示的是本地 IP,而不是远程服务器的 IP。例如:
2020-10-07 13:45:40 1kQ7t6-0008P1-3M <= [email protected] H=localhost (server.remote.domain.com) [127.0.0.1] P=esmtps X=TLS1.0:RSA_AES_256_CBC_SHA1:256 CV=no S=14259 [email protected]
2020-10-07 13:45:40 1kQ7t6-0008P1-3M => |/usr/local/bin/script.php[电子邮件保护]R=myrouter T=myrouter_pipe 2020-10-07 13:45:40 1kQ7t6-0008P1-3M 已完成
是否可以让 exim 在日志中显示转发的 IP 而不是 127.0.0.1?
我读https://www.exim.org/exim-html-current/doc/html/spec_html/ch-proxies.html但是如果我使用 hosts_proxy 选项,我的服务器会拒绝传入的电子邮件并出现此错误:“503 命令被拒绝,所需代理协商失败”。
我知道我可以使用主机中的普通 iptables 和容器的私有 IP 转发端口,但我想知道是否可以使用 LXD 的代理功能来做到这一点。
问候,
答案1
好的,我很抱歉。我忘记在创建代理的命令中添加 proxy_protocol=true 了:
lxc config device add mycontainer myport25 proxy listen=tcp:x.x.x.x:25 proxy_protocol=true connect=tcp:127.0.0.1:25
现在 exim 日志显示发送方服务器 IP:
2020-10-07 16:45:21 1kQAgz-0000Hk-4g <= [email protected] H=host.remote.domain.com [public_ip_here] P=esmtps X=TLS1.0:RSA_AES_256_CBC_SHA1:256 CV=no S=14249 [email protected]
2020-10-07 16:45:21 1kQAgz-0000Hk-4g => |/usr/local/bin/mailgate.php[电子邮件保护]R=myrouter T=mytransport_pipe 2020-10-07 16:45:21 1kQAgz-0000Hk-4g 已完成