设为首页 收藏本站
查看: 1063|回复: 0

[经验分享] tomcat记录X-Forwarded-For字段中的远程IP

[复制链接]

尚未签到

发表于 2015-8-6 12:20:08 | 显示全部楼层 |阅读模式
F5转包时将请求IP记录到X-Forwarded-For字段
  最近在做某个系统的安全加固的时候,发现tomcat记录的日志全部来自于F5转发的IP地址,不能获取到请求的真实IP。
  经过抓包分析,F5在转发请求包的时候会将来源IP记录在HTTP包header中的X-Forwarded-For字段,如下图是用wireshark(www.wireshark.org/download.html)截取的包。
DSC0000.png
  
  而Tomcat是在tomcat/conf/server.xml中配置日志选项的:
  
Tomcat如何记录日志
  禁用,则对应logs目录下不会生成localhost_access_log.txt
DSC0001.jpg
  Logs下没有localhost_access_log.txt见:
DSC0002.jpg
  
  当开启,则会有localhost_access_log.txt日志记录请求来源
DSC0003.jpg
  当配置中的pattern=common时,对应的日志是如下,无论正常请求和非法请求都会记录。
DSC0004.jpg
  
记录远程IP的两个方法
方案1
  修改pattern为pattern='%{X-Forwarded-For}i %h %l %u %t "%r" %s %b',则会记录headers头中的X-Forwarded-For信息
DSC0005.jpg
  
  如果没有则记录为空,如下
DSC0006.jpg
  验证:用fiddle构造有X-Forwarded-For的请求包
  原始请求
DSC0007.jpg
  构造X-Forwarded-For字段
DSC0008.jpg
  服务器localhost_access_log.txt
DSC0009.jpg
  
方案2
  不修改pattern,增加RemoteIpValue配置
DSC00010.jpg
  前两个是记录X-Forworded-For,后面是没有X-Forwarded-For,说明是有效的
DSC00011.jpg
  以上的这些都参考了相关文档,下面这些才是实验。
  
方案比较
比较1:如果有X-Forwarded-For头,但是内容为空。
  方案1显示空和转发IP
  方案2显示直接来源IP
  
比较2:多个X-Forwarded-For字段
  例如一个包里面有两个X-Forwarded-For字段
  X-Forwarded-For:59.66.156.24
  X-Forwarded-For:59.66.156.111
  
  方案1日志为(记录第一个):59.66.156.24 192.168.1.58 - - [12/Dec/2012:22:56:54 +0800] "GET /docs/ HTTP/1.1" 304 -
  方案2日志为(记录第一个):59.66.156.24 - - [12/Dec/2012:22:50:16 +0800] "GET /docs/ HTTP/1.1" 304 –
  
比较3:X-Forwarded-For有多个IP
  例如:X-Forwarded-For:59.66.156.24,59.66.156.111
  
  方案1日志为显示完整X-Forwarded-For字段信息:
  59.66.156.24,59.66.156.111 192.168.1.58 - - [12/Dec/2012:22:58:01 +0800] "GET /docs/ HTTP/1.1" 304 -
  方案2日志记录为(记录最后一个IP):
  59.66.156.111 - - [12/Dec/2012:22:53:51 +0800] "GET /docs/ HTTP/1.1" 304 -
  
结论
  方案1真实反映X-Forwarded-For字段(无论有无IP,有多少个IP),并且以header头按顺序读取,显示读取到第一个X-Forwarded-For。
  方案2试图将IP进行来源替换,如果有X-Forwarded-For字段,则显示最后一个IP,否则显示直接IP
  
  因此从日志记录来看,方案1的信息量更为大。
  
遗留问题
  如果有人伪造了多个X-Forwarded-For字段,而F5转包时,到底会将请求IP加到那个X-Forwarded-For字段呢?我只能寄希望于他会在第一个X-Forwarded-For中添加这个信息,否则tomcat就无法记录了。
  
参考资料
  http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html
  http://www.techstacks.com/howto/configure-access-logging-in-tomcat.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-94810-1-1.html 上篇帖子: Tomcat 下篇帖子: Asp.net控制Tomcat启动关闭
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表