httpd 访问日志,记录的 ip 是反向代理,如何找到实际的代理

httpd 访问日志,记录的 ip 是反向代理,如何找到实际的代理

检查访问日志,发现用户登录的IP来自反向代理服务器。

设置如下

www.abc.com -> reversed proxy to my server 123.123.123.123 

有没有办法配置 http 访问日志来跟踪反向代理服务器后面的实际传入 IP?

答案1

您正在寻找X-Forwarded-For标头。任何称职的代理都会将此标头添加到其转发的 HTTP 请求中。

如果您的整个网站都采用此代理,那么您需要找到LogFormat与其相关的内容,通常如下所示:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

并将标题添加到它(或换出%h只会是你的反向代理)像这样:

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

如果您不想重新定义combined日志格式,那么请创建自己的格式:

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined_proxy
CustomLog /path/to/logfile.log combined_proxy

%{<header>}i是一种将任何其他请求标头放入日志文件的方法。

笔记:该标头不一定总是单个 IP 地址。如果请求来自多个代理,那么您将获得一个逗号分隔的列表,格式为:client, proxy1, proxy2;您可能需要更新脚本或日志抓取工具以适应这种情况。

答案2

就在这里。

对于当前版本的 Apache:mod_rpaf
对于 2.3 分支之后的任何版本:mod_remoteip

这两个命令都会用来自任何受信任的反向代理REMOTE_ADDR的传入标头中的最后一个 IP 替换正在运行的 Apache 进程中的变量X-Forwarded-For。此 IP 地址也将记录在您的标准 Apache 日志中,而无需对其进行任何更改。

这个变量也可用于您的 PHP 代码,因为$_SERVER['REMOTE_ADDR']它是您通常期望远程 IP 地址所在的位置。

这些模块所需的唯一配置是向它们提供可信反向代理列表。

从安全角度来看,这些报头可以被添加、删除、伪造,甚至可能被篡改。无法保证你从此报头获得的任何 IP 地址都是正确的真的访问者的 IP 地址。列表中的最后一个 IP 地址(由您信任的反向代理添加)是您唯一可以确定的 IP 地址。

相关内容