Nginx邮件代理隐藏客户端的IP

Nginx邮件代理隐藏客户端的IP

我成功设置了带有 auth_http 的 nginx imap/pop3 邮件代理,几个月来一直运行良好。最近出现了一个要求,要求在 imap 登录时在 mail.log 中显示客户端的 IP。

由于 Nginx 与 Dovecot 通信,日志中的 IP 地址属于 Nginx 服务器(在本例中为 127.0.0.1 - 因为它们在同一台服务器上)。

到目前为止,我找不到解决方案或解决方法。显然,nginx 邮件块中甚至无法进行日志记录。

最接近的是 Dovecot 中的 HAProxy 支持(https://wiki2.dovecot.org/HAProxy) 但不确定是否有类似于Nginx的。

任何帮助都将受到赞赏。

谢谢

答案1

解决方法

没有找到合适的解决方案,我宁愿在代理脚本中创建一个新的日志文件,为请求提供可接受的解决方案。

以下是摘录:

$fp = fopen('/var/log/mail_logins.log', 'a');
$now = "[" . (new \DateTime())->format('Y-m-d H:i:s') . "]";
fwrite($fp, $now . " HTTP_AUTH_PROTOCOL: " . $_SERVER["HTTP_AUTH_PROTOCOL"] . ", HTTP_AUTH_USER: " . $_SERVER["HTTP_AUTH_USER"] . ", HTTP_CLIENT_IP: " . $_SERVER["HTTP_CLIENT_IP"]. "\n");
fclose($fp);

它可能会对某些人有帮助。

答案2

自 1.19.8 版(2021 年 3 月 9 日发布)以来,nginx 支持所有 POP3/IMAP/SMTP 代理连接的 HAproxy 代理协议 - 您可以通过proxy_protocol on;相关servermail阻止设置来启用它。链接至 nginx 文档

请注意,必须在接收端(在 dovecot 中)明确启用代理协议,因为它无法自动检测(在邮件协议中,服务器在建立连接后发送问候消息,如果客户端在服务器之前说话 - 这是协议违规;而在 HAproxy 的代理协议中,客户端(即连接到最终服务器的代理)首先发送有关远程连接的消息)。

还请注意,这个问题是在添加此选项前约 4 年提出的,但对于将来寻找此问题的任何人来说,这些信息可能有用。

相关内容