Tomcat 经过多层安全代理转发或加速代理转发情况下源站服务器获取发起请求的真实客户端IP
Posted 运维devops实践之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat 经过多层安全代理转发或加速代理转发情况下源站服务器获取发起请求的真实客户端IP相关的知识,希望对你有一定的参考价值。
背景:
在大多数业务场景中,网站访问请求不是简单地从客户的(访问者)的浏览器直接到达网站的源站服务器,而是在客户端和服务器之前经过了根据业务需要部署的Web应用防火墙、DDoS高防、CDN等代理服务器。这种情况下,访问请求到达源站服务器之前可能经过了多层安全代理转发或加速代理转发,源站服务器如何获取发起请求的真实客户端ip呢?
透明的代理服务器在将客户端的访问请求转发到下一环节的服务器时,会在http的请求头添加一条 X-Forwarded-For记录, 用于记录客户端的IP,格式为X-Forwarded-For:客户端IP
。如果客户端和服务器之前有多个代理服务器,则X-Forwarded-For记录使用以下格式记录客户端IP和依次经过的代理服务器IP:X-Forwarded-For:客户端IP, 代理服务器1的IP, 代理服务器2的IP, 代理服务器3的IP, ……
。
因此,常见的Web应用服务器可以通过解析X-Forwarded-For记录获取客户端真实IP 。
Tomcat配置
打开
tomcat/conf/server.xml
配置文件。将AccessLogValve日志记录功能部分修改为以下内容:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i %T" resolveHosts="false"/>
以上是关于Tomcat 经过多层安全代理转发或加速代理转发情况下源站服务器获取发起请求的真实客户端IP的主要内容,如果未能解决你的问题,请参考以下文章
红蓝对抗之隧道技术第一篇(内网穿透端口映射&端口转发Netsh端口转发CS正反向连接多层内网Burp设置上游代理访问内网MSF protfwd端口转发/重定向)