- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- 创建用户组并授权使用WAF
- 购买WAF
- 网站接入WAF
- 查看防护事件
-
配置防护策略
- 防护配置概述
- 配置Web基础防护规则防御常见Web攻击
- 配置智能访问控制规则精准智能防御CC攻击
- 配置CC攻击防护规则防御CC攻击
- 配置精准访问防护规则定制化防护策略
- 配置IP黑白名单规则拦截/放行指定IP
- 配置地理位置访问控制规则拦截/放行特定区域请求
- 配置威胁情报访问控制规则拦截/放行指定IP库的IP
- 配置网页防篡改规则避免静态网页被篡改
- 配置网站反爬虫防护规则防御爬虫攻击
- 配置防敏感信息泄露规则避免敏感信息泄露
- 配置全局白名单规则对误报进行忽略
- 配置隐私屏蔽规则防隐私信息泄露
- 配置扫描防护规则自动阻断高频攻击
- 创建引用表对防护指标进行批量配置
- 配置攻击惩罚标准封禁访问者指定时长
- 条件字段说明
- WAF覆盖的应用类型
- 查看总览
- 网站设置
- 策略管理
- 安全报告
- 对象管理
- 系统管理
- 权限管理
- 监控与审计
- 最佳实践
-
API参考
- 使用前必读
- API概览
- 如何调用API
-
API
- 云模式防护网站管理
- 独享模式防护网站管理
- 防护策略管理
-
策略规则管理
- 修改单条规则的状态
- 查询cc规则列表
- 创建cc规则
- 根据Id查询cc防护规则
- 更新cc防护规则
- 删除cc防护规则
- 查询精准防护规则列表
- 创建精准防护规则
- 根据Id查询精准防护规则
- 更新精准防护规则
- 删除精准防护规则
- 创建全局白名单(原误报屏蔽)规则
- 查询全局白名单(原误报屏蔽)防护规则
- 更新全局白名单(原误报屏蔽)防护规则
- 删除全局白名单(原误报屏蔽)防护规则
- 查询黑白名单规则列表
- 创建黑白名单规则
- 查询黑白名单防护规则
- 更新黑白名单防护规则
- 查询全局白名单(原误报屏蔽)规则列表
- 删除黑白名单防护规则
- 查询JS脚本反爬虫规则列表
- 更新JS脚本反爬虫规则防护模式
- 创建JS脚本反爬虫规则
- 查询JS脚本反爬虫防护规则
- 更新JS脚本反爬虫防护规则
- 删除JS脚本反爬虫防护规则
- 查询隐私屏蔽防护规则列表
- 创建隐私屏蔽防护规则
- 查询隐私屏蔽防护规则
- 更新隐私屏蔽防护规则
- 删除隐私屏蔽防护规则
- 查询攻击惩罚规则列表
- 创建攻击惩罚规则
- 根据Id查询攻击惩罚防护规则
- 更新攻击惩罚规则
- 删除攻击惩罚规则
- 查询地理位置访问控制规则列表
- 创建地理位置控制规则
- 查询地理位置控制防护规则
- 更新地理位置控制防护规则
- 删除地理位置控制防护规则
- 查询防篡改规则列表
- 创建防篡改规则
- 查询防篡改防护规则
- 删除防篡改防护规则
- 网页防篡改规则更新缓存
- 查询防敏感信息泄露规则列表
- 创建防敏感信息泄露规则
- 查询防敏感信息泄露防护规则
- 更新防敏感信息泄露防护规则
- 删除防敏感信息泄露防护规则
- 查询引用表列表
- 创建引用表
- 查询引用表
- 修改引用表
- 删除引用表
- 地址组管理
- 证书管理
- 防护事件管理
- 安全总览
- 局点支持特性查询
- 独享实例管理
- 日志配置管理
- 租户订购管理
- 租户域名查询
- 租户防护域名管理
- 系统管理
- 告警管理
- 附录
- SDK参考
-
常见问题
-
产品咨询
- WAF基础知识
- Web应用防火墙是否能防护IP?
- Web应用防火墙支持对哪些对象进行防护?
- Web应用防火墙支持自定义POST拦截吗?
- Web应用防火墙是否支持IPv4和IPv6共存?
- WAF和HSS的网页防篡改有什么区别?
- Web应用防火墙支持哪些Web服务框架/协议?
- WAF可以防护使用HSTS策略/NTLM代理认证访问的网站吗?
- WAF转发和Nginx转发有什么区别?
- Web应用防火墙和云防火墙有什么区别?
- Web应用防火墙可以配置会话Cookie吗?
- WAF对SQL注入、XSS跨站脚本和PHP注入攻击的检测原理?
- WAF是否可以防护Apache Struts2远程代码执行漏洞(CVE-2021-31805)?
- 接入WAF后为什么漏洞扫描工具扫描出未开通的非标准端口?
- 多Project下使用Web应用防火墙的限制条件?
- 本地文件包含和远程文件包含是指什么?
- QPS和请求次数有什么区别?
- Web应用防火墙支持自定义授权策略吗?
- 为什么Cookie中有HWWAFSESID或HWWAFSESTIME字段?
- 云模式、独享模式可以互相切换吗?
- 同一防护域名/IP可以添加到不同的账号进行防护吗?
- 什么是区域和可用区?
- Web应用防火墙可以跨区域使用吗?
- Web应用防火墙支持防护哪些区域?
- WAF可以跨企业项目使用吗?
- 购买或升级WAF时选择了企业项目,其他企业项目可以使用该企业项目的WAF吗?
- 购买和变更规格
-
网站接入
- 如何在添加域名中配置防护域名?
- 添加域名时,防护网站端口需要和源站端口配置一样吗?
- 如何放行云模式WAF的回源IP段?
- 删除防护域名后CNAME记录会保留多久?
- 后端服务器配置多个源站地址时的注意事项?
- Web应用防火墙支持配置泛域名吗?
- Web应用防火墙支持防护中文域名吗?
- 泛域名和单域名都接入WAF,WAF如何转发访问请求?
- 添加域名时提示“非法的源站地址”,如何处理?
- 添加防护域名时,提示“其他人已经添加了该域名,请确认该域名是否属于你”,如何处理?
- 添加域名时,为什么不能选择对外协议?
- 云模式服务器的源站地址可以配置成CNAME吗?
- 如何在华为云的云解析服务上进行DNS验证?
- 未配置子域名和TXT记录的影响?
- 如何查询域名提供商?
- 新旧CNAME的区别?
- 域名接入Web应用防火墙后,能通过IP访问网站吗?
- 如何设置使流量不经过WAF,直接访问源站?
- 域名接入WAF后,为什么无法开启防护模式?
-
防护规则
- Web基础防护支持设置哪几种防护等级?
- CC攻击的防护峰值是多少?
- 在什么情况下使用Cookie区分用户?
- CC规则里“限速频率”和“放行频率”的区别?
- 配置“人机验证”CC防护规则后,验证码不能刷新,验证一直不通过,如何处理?
- 如何不拦截带有.js的文件?
- Web应用防火墙可以批量配置黑白名单吗?
- Web应用防火墙可以导入/导出黑白名单吗?
- 开启JS脚本反爬虫后,为什么客户端请求获取页面失败?
- 开启网站反爬虫中的“其他爬虫”会影响网页的浏览速度吗?
- JS脚本反爬虫的检测机制是怎么样的?
- 哪些情况会造成WAF配置的防护规则不生效?
- 如果只允许指定地区的IP可以访问,如何设置防护策略?
- 拦截所有来源IP或仅允许指定IP访问防护网站,WAF如何配置?
- 系统自动生成策略包括哪些防护规则?
- 开启网页防篡改后,为什么刷新页面失败?
- 黑白名单规则和精准访问防护规则的拦截指定IP访问请求,有什么差异?
- 如何处理Appscan等扫描器检测结果为Cookie缺失Secure/HttpOnly?
- 如何拦截4层链接对应的IP?
- IPv6防护
- 证书管理
- 防护日志
-
产品咨询
- 故障排除
- 视频帮助
-
更多文档
-
用户指南(阿布扎比区域)
- 产品介绍
- WAF操作指引
- 开通WAF
- 安全总览
- 防护事件
- 防护策略
- 管理策略
- 网站设置
- 对象管理
- 系统管理
- 权限管理
- 监控与审计
-
常见问题
- 产品咨询
- 业务请求/规格
-
网站接入配置
-
域名/端口类
- 域名/IP如何接入Web应用防火墙?
- Web应用防火墙支持哪些非标准端口?
- 独享模式如何防护不支持的非标准端口?
- 如何在添加域名中配置防护域名?
- 添加域名时,防护网站端口需要和源站端口配置一样吗?
- 添加防护域名时如何配置非标准端口?
- 多个端口的服务器,如果某个端口不需要WAF防护,如何处理?
- 域名/IP接入WAF前需要准备哪些数据?
- 删除防护域名时应该注意哪些事项?
- 域名添加到WAF后,域名是否可以修改?
- 后端服务器配置多个源站地址时的注意事项?
- Web应用防火墙支持配置泛域名吗?
- 如何使网站流量切入云模式Web应用防火墙?
- 一个独享WAF实例可以接入多个ELB吗?
- 添加防护域名时,提示“其他人已经添加了该域名,请确认该域名是否属于你”,如何处理?
- 证书管理
- 服务器配置类
- 接入后处理
-
域名/端口类
-
业务中断排查
- 如何排查404/502/504错误?
- 域名/IP接入状态显示“未接入”,如何处理?
- WAF误拦截了正常访问请求,如何处理?
- WAF误拦截了“非法请求”访问请求,如何处理?
- 如何放行云模式WAF的回源IP段?
- 连接超时时长是多少,是否可以手动设置该时长?
- 如何解决重定向次数过多?
- 如何解决HTTPS请求在部分手机访问异常?
- 如何解决证书链不完整?
- 如何解决证书与密钥不匹配问题?
- 如何处理418错误码问题?
- 如何处理523错误码问题?
- 如何处理域名接入WAF后,登录首页不停地刷新?
- 如何解决HTTP配置转发策略后程序访问页面卡顿?
- 使用WAF后如何处理网站的文件不能上传?
- 如何处理接入WAF后报错414 Request-URI Too Large?
- 如何处理“协议不受支持,客户端和服务器不支持一般 SSL 协议版本或加密套件”?
- 访问独享引擎页面时提示“IAM未授权”?
- 如何解决“网站被检测到:SSL/TLS 存在Bar Mitzvah Attack漏洞”?
- 防护规则配置
- 防护日志
- 修订记录
-
用户指南(巴黎)
- 产品简介
- 监控指标
- WAF支持的端口范围
- 云模式 WAF
- 独享模式 WAF
-
最佳实践
- Web漏洞防护最佳实践
- 通过配置TLS最低版本和加密套件提升客户端访问域名的通道安全
- CC攻击防御最佳实践
- 通过配置反爬虫防护策略阻止爬虫攻击
- 通过配置ECS/ELB访问控制策略保护源站安全
- Web基础防护功能最佳实践
- 通过误报处理提升Web基础防护效果
- 使用Postman工具模拟业务验证全局白名单(原误报屏蔽)规则
- WAF云模式接入配置
- 独享引擎实例升级配置
- 获取客户端真实IP
- 通过LTS快速查询分析WAF访问日志
- 通过LTS实时分析Spring core RCE漏洞的拦截情况
- 通过LTS配置WAF规则的拦截告警
- “独享WAF+7层ELB”联动,实现防护任意非标端口
- “WAF+HSS”联动,提升网页防篡改能力
- IAM权限管理
-
常见问题
- 产品咨询
- 业务请求/规格
- 计费相关
- 网站接入配置
-
业务中断排查
- 如何排查500/502/504错误?
- 域名/IP接入状态显示“未接入”,如何处理?
- WAF误拦截了正常访问请求,如何处理?
- 如何解决HTTPS请求在部分手机访问异常?
- 如何解决证书链不完整?
- 如何解决证书与密钥不匹配问题?
- 如何处理418错误码问题?
- 使用WAF后如何处理网站的文件不能上传?
- WAF误拦截了“非法请求”访问请求,如何处理?
- 如何放行云模式WAF的回源IP段?
- 连接超时时长是多少,是否可以手动设置该时长?
- 如何解决重定向次数过多?
- 如何处理523错误码问题?
- 如何处理域名接入WAF后,登录首页不停地刷新?
- 如何解决HTTP配置转发策略后程序访问页面卡顿?
- 如何处理接入WAF后报错414 Request-URI Too Large?
- 如何处理“协议不受支持,客户端和服务器不支持一般 SSL 协议版本或加密套件”?
- 访问独享引擎页面时提示“IAM未授权”?
- 如何解决“网站被检测到:SSL/TLS 存在Bar Mitzvah Attack漏洞”?
- 防护规则配置
- 修订记录
-
用户指南(吉隆坡区域)
- 产品介绍
- WAF操作指引
- 开通WAF
- 安全总览
- 防护事件
- 防护策略
- 管理策略
- 网站设置
- 对象管理
- 系统管理
- 权限管理
- 监控与审计
-
常见问题
- 产品咨询
- 业务请求/规格
-
网站接入配置
-
域名/端口类
- 域名/IP如何接入Web应用防火墙?
- Web应用防火墙支持哪些非标准端口?
- 独享模式如何防护不支持的非标准端口?
- 如何在添加域名中配置防护域名?
- 添加域名时,防护网站端口需要和源站端口配置一样吗?
- 添加防护域名时如何配置非标准端口?
- 多个端口的服务器,如果某个端口不需要WAF防护,如何处理?
- 域名/IP接入WAF前需要准备哪些数据?
- 删除防护域名时应该注意哪些事项?
- 域名添加到WAF后,域名是否可以修改?
- 后端服务器配置多个源站地址时的注意事项?
- Web应用防火墙支持配置泛域名吗?
- 如何使网站流量切入云模式Web应用防火墙?
- 一个独享WAF实例可以接入多个ELB吗?
- 添加防护域名时,提示“其他人已经添加了该域名,请确认该域名是否属于你”,如何处理?
- 证书管理
- 服务器配置类
- 接入后处理
-
域名/端口类
-
业务中断排查
- 如何排查404/502/504错误?
- 域名/IP接入状态显示“未接入”,如何处理?
- WAF误拦截了正常访问请求,如何处理?
- WAF误拦截了“非法请求”访问请求,如何处理?
- 如何放行云模式WAF的回源IP段?
- 连接超时时长是多少,是否可以手动设置该时长?
- 如何解决重定向次数过多?
- 如何解决HTTPS请求在部分手机访问异常?
- 如何解决证书链不完整?
- 如何解决证书与密钥不匹配问题?
- 如何处理418错误码问题?
- 如何处理523错误码问题?
- 如何处理域名接入WAF后,登录首页不停地刷新?
- 如何解决HTTP配置转发策略后程序访问页面卡顿?
- 使用WAF后如何处理网站的文件不能上传?
- 如何处理接入WAF后报错414 Request-URI Too Large?
- 如何处理“协议不受支持,客户端和服务器不支持一般 SSL 协议版本或加密套件”?
- 访问独享引擎页面时提示“IAM未授权”?
- 如何解决“网站被检测到:SSL/TLS 存在Bar Mitzvah Attack漏洞”?
- 防护规则配置
- 防护日志
- 修订记录
-
用户指南(安卡拉区域)
- 产品介绍
- WAF使用概览
- 申请WAF独享引擎
- 接入WAF
- 管理防护域名
- 管理证书
- 管理黑白名单IP地址组
- 配置防护规则
- 安全总览
- 管理防护事件
- 开启告警通知
- 策略管理
- 管理独享引擎
- 查看产品信息
- 权限管理
-
常见问题
-
产品咨询
-
功能说明类
- Web应用防火墙是否能防护IP?
- Web应用防火墙支持对哪些对象进行防护?
- Web应用防火墙支持哪些操作系统?
- Web应用防火墙提供的是几层防护?
- Web应用防火墙是否支持文件缓存?
- Web应用防火墙攻击防护类问题
- Web应用防火墙是否支持SSL双向认证?
- Web应用防火墙支持基于应用层协议和内容的访问控制吗?
- Web应用防火墙是否可以对用户添加的Post的body进行检查?
- Web应用防火墙可以限制域名访问速度吗?
- Web应用防火墙可以拦截multipart/form-data格式的数据包吗?
- Web应用防护墙可以部署在VPC内网吗?
- Web应用防火墙支持拦截包含特殊字符的URL请求吗?
- Web应用防火墙可以防止垃圾注册和恶意注册吗?
- Web应用防火墙可以拦截Web页面调用其他接口的请求数据吗?
- Web应用防火墙可以配置会话Cookie吗?
- Web应用防火墙支持自定义POST拦截吗?
- Web应用防火墙可以设置域名限制访问吗?
- Web应用防火墙有IPS入侵防御系统模块吗?
- Web应用防火墙支持哪些Web服务框架/协议?
- WAF可以防护使用HSTS策略/NTLM代理认证访问的网站吗?
- WAF转发和Nginx转发有什么区别?
- WAF会缓存网站数据吗?
- Web应用防火墙是硬防火墙还是软防火墙?
- HTTP 2.0业务接入WAF防护是否会对源站有影响?
- WAF对SQL注入、XSS跨站脚本攻击的检测原理?
- WAF是否可以防护Apache Struts2远程代码执行漏洞(CVE-2021-31805)?
- 独享版WAF是否支持跨VPC防护?
-
使用说明类
- 接入WAF后为什么漏洞扫描工具扫描出未开通的非标准端口?
- 使用Web应用防火墙对邮件收发和邮件端口有影响吗?
- 如何获取访问者真实IP?
- Web应用防火墙如何拦截请求内容?
- 本地文件包含和远程文件包含是指什么?
- QPS和请求次数有什么区别?
- 什么是并发数?
- 如果证书挂载在ELB上,WAF可以根据请求内容进行拦截吗?
- 接入WAF对现有业务和服务器运行有影响吗?
- 仅放行通过WAF的访问请求,如何配置?
- 为什么Cookie中有HWWAFSESID或HWWAFSESTIME字段?
- 网站部署了反向代理服务器,如何配置WAF?
- 泛域名和单域名都接入WAF,WAF如何转发访问请求?
- 使用WAF是否影响内网向外发送数据?
- 源站IP地址服务器更换安全组后,在WAF中需要做更改吗?
-
功能说明类
- 网站接入配置
-
业务中断排查
- 如何排查404/502/504错误?
- 域名/IP接入状态显示“未接入”,如何处理?
- WAF误拦截了正常访问请求,如何处理?
- WAF误拦截了“非法请求”访问请求,如何处理?
- 连接超时时长是多少,是否可以手动设置该时长?
- 如何解决重定向次数过多?
- 如何解决HTTPS请求在部分手机访问异常?
- 如何解决证书链不完整?
- 如何解决证书与密钥不匹配问题?
- 如何处理418错误码问题?
- 如何处理523错误码问题?
- 如何处理域名接入WAF后,登录首页不停地刷新?
- 如何解决HTTP配置转发策略后程序访问页面卡顿?
- 使用WAF后如何处理网站的文件不能上传?
- 如何解决“网站被检测到:SSL/TLS 存在Bar Mitzvah Attack漏洞”?
- 防护规则配置
-
产品咨询
- 修订记录
- API参考 (巴黎)
- API参考(吉隆坡区域)
- API参考(阿布扎比区域)
- API参考(安卡拉区域)
-
用户指南(阿布扎比区域)
- 通用参考
链接复制成功!
获取客户端真实IP
客户端IP指的是访问者(用户设备)的IP地址。在Web应用开发中,通常需要获取客户端真实的IP地址。例如,投票系统为了防止刷票,需要通过获取客户端真实IP地址,限制每个客户端IP地址只能投票一次。
当您的网站已接入Web应用防火墙(Web Application Firewall,简称WAF)进行安全防护后,WAF作为一个反向代理存在于客户端和服务器之间,服务器的真实IP被隐藏起来,Web访问者只能看到WAF的IP地址。此时,您可直接通过WAF获取客户端的真实IP,也可以通过配置网站服务器获取客户端的真实IP。
本章节介绍了通过WAF直接获取真实IP的方法,以及不同类型的Web应用服务器(包括Tomcat、Apache、Nginx、IIS 6和IIS 7)如何进行相关设置,以获取客户端的真实IP。
背景信息
通常情况下,网站访问并不是简单地从用户的浏览器直达服务器,中间可能部署有CDN、WAF、高防等代理服务器(架构为“用户 > CDN/WAF/高防等代理服务 > 源站服务器”)。以WAF为例,部署示意图如图1所示。
- 当网站没有接入到WAF前,DNS直接解析到源站的IP,用户直接访问服务器。
- 当网站接入WAF后,需要把DNS解析到WAF的CNAME,这样流量才会先经过WAF,WAF再将流量转到源站,实现网站流量检测和攻击拦截。
在这种情况下,访问请求到达源站服务器之前可能经过了多层安全代理转发或加速代理转发,服务器如何获取发起请求的真实客户端IP呢?
一个透明的代理服务器在把用户的HTTP请求转到下一环节的服务器时,会在HTTP的头部中加入一条“X-Forwarded-For”记录,用来记录用户的真实IP,其形式为“X-Forwarded-For:客户端的真实IP,代理服务器1-IP, 代理服务器2-IP,代理服务器3-IP,……”。
因此,您可以通过获取“X-Forwarded-For”对应的第一个IP来得到客户端的真实IP。
约束条件
- 添加域名时“是否已使用代理”配置错误将导致无法成功获取Web访问者请求的真实IP地址。
为了保证WAF的安全策略能够针对真实源IP生效,成功获取Web访问者请求的真实IP地址,如果WAF前使用了CDN、云加速等七层代理的产品,“是否已使用代理”务必选择“是”,其他情况,“是否已使用代理”选择“否”。
- 常规情况下,X-Forwarded-For字段中,第一个IP就是客户端真实IP,当IPV6地址长度超过X-Forwarded-For字段长度限制时,将读取不到IP地址;另外,nat64下,ELB是IPv4的监听器,也读不到ipv6地址。
通过WAF直接获取客户端真实IP
网站接入WAF后,WAF作为一个反向代理部署于客户端和服务器之间,实现网站安全防护。
下面为您介绍如何通过X-Forwarded-For和X-Real-IP变量获取客户端真实IP地址的方法:
- WAF使用X-Forwarded-For的方式获取客户端的真实IP地址。
WAF将“真实的客户端IP”放在HTTP头部的“X-Forwarded-For”字段,格式如下:
1
X-Forwarded-For: 用户真实IP, 代理服务器1-IP, 代理服务器2-IP,...
说明:
当使用此方式获取客户端真实IP时,获取的第一个地址就是客户端真实IP。
各种语言通过调用SDK接口获取X-Forwarded-For字段的方式:- ASP:
Request.ServerVariables("HTTP_X_FORWARDED_FOR")
- ASP.NET(C#):
Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
- PHP:
$_SERVER["HTTP_X_FORWARDED_FOR"]
- JSP:
request.getHeader("HTTP_X_FORWARDED_FOR")
- ASP:
- WAF服务还支持使用X-Real-IP变量,获取客户的来源IP(使用过程中考虑了后面经过的多层反向代理对该变量的修改)。
Tomcat如何在访问日志中获取客户端真实IP
如果您的源站部署了Tomcat服务器,可通过启用Tomcat的X-Forwarded-For功能,获取客户端的真实IP地址。
- 打开“server.xml”文件(“tomcat/conf/server.xml”),AccessLogValue日志记录功能部分内容如下:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.values.AccessLogValue" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
- 在pattern中增加“%{X-Forwarded-For}i”,修改后的server.xml为:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValue" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%{X-Forwarded-For}i %h %l %u %t "%r" %s %b" /> </Host>
- 查看“localhost_access_log”日志文件,可获取X-Forwarded-For对应的访问者真实IP。
Apache如何在访问日志中获取客户端真实IP
如果源站部署的Apache服务器为2.4及以上版本,您可以使用Apache安装包中自带“remoteip_module”模块文件“mod_remoteip.so”,获取客户端IP地址。
- CentOS 7.6
- 编辑“httpd.conf”配置文件,在文件中添加以下内容:
LoadModule remoteip_module modules/mod_remoteip.so ##加载mod_remoteip.so模块 RemoteIPHeader X-Forwarded-For ##设置RemoteIPHeader头部 RemoteIPInternalProxy WAF的回源IP段 ##设置WAF回源IP段
说明:
- “mod_remoteip.so”模块已默认加载在以下文件:“/etc/httpd/conf.modules.d/00-base.conf:46”
- 多个回源IP段请使用空格分隔。
- 修改配置文件日志格式,即将日志格式文件中的“%h”修改为“%a”。
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%a %l %u %t \"%r\" %>s %b" common
- 重启Apache服务,使配置生效。
- 编辑“httpd.conf”配置文件,在文件中添加以下内容:
- Ubuntu 20.04.2
- 编辑“apache2.conf”配置文件,在文件中添加以下内容:
ln -s ../mods-available/remoteip.load /etc/apache2/mods-enabled/remoteip.load ##加载mod_remoteip.so模块 RemoteIPHeader X-Forwarded-For ##设置RemoteIPHeader头部 RemoteIPInternalProxy WAF的回源IP段 ##设置WAF回源IP段
- 修改配置文件日志格式,即将日志格式文件中的“%h”修改为“%a”。
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%a %l %u %t \"%r\" %>s %b" common
- 重启Apache服务,使配置生效。
- 编辑“apache2.conf”配置文件,在文件中添加以下内容:
如果源站部署的Apache服务器为2.2及以下版本,您可通过运行命令安装Apache的第三方模块mod_rpaf,并修改“http.conf”文件获取客户IP地址。
- 执行以下命令安装Apache的一个第三方模块mod_rpaf。
wget https://github.com/gnif/mod_rpaf/archive/v0.6.0.tar.gz tar xvfz mod_rpaf-0.6.tar.gz cd mod_rpaf-0.6 /usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
- 打开“httpd.conf”配置文件,并将文件内容修改为如下内容:
LoadModule rpaf_module modules/mod_rpaf-2.0.so ##加载mod_rpaf模块 <IfModule mod_rpaf.c> RPAFenable On RPAFsethostname On RPAFproxy_ips 127.0.0.1 <反向代理IPs> RPAFheader X-Forwarded-For </IfModule>
- 定义日志格式。
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" common
- 启用自定义格式日志。
CustomLog "/[apache目录]/logs/$access.log" common
- 重启Apache,使配置生效。
/[apached目录]/httpd/bin/apachectl restart
- 查看“access.log”日志文件,可获取X-Forwarded-For对应的客户端真实IP。
Nginx如何在访问日志中获取客户端真实IP
如果您的源站部署了Nginx反向代理,可通过在Nginx反向代理配置Location信息,后端Web服务器即可通过类似函数获取客户的真实IP地址。
- 根据源站Nginx反向代理的配置,在Nginx反向代理的相应location位置配置如下内容,获取客户IP的信息。
1 2 3 4
Location ^ /<uri> { proxy_pass ....; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
- 后端Web服务器通过定义Nginx日志参数$http_x_forwarded_for来获取客户的真实IP。
示例:
log_format main ' "<$http_Cdn_Src_IP>" "{$http_x_real_ip}" "[$http_x_forwarded_for]" "$remote_addr" ' '$http_user_agent - $remote_user [$time_local] "$request" ' ' $status $body_bytes_sent "$http_referer" ';
IIS 6如何在访问日志中获取客户端真实IP
如果您的源站部署了IIS 6服务器,您可以通过安装“F5XForwardedFor.dll”插件,从IIS 6服务器记录的访问日志中获取客户端真实的IP地址。
- 下载F5XForwardedFor模块。
- 根据您服务器的操作系统版本将“x86\Release”或者“x64\Release”目录中的“F5XForwardedFor.dll”文件拷贝至指定目录(例如,“C:\ISAPIFilters”),同时确保IIS进程对该目录有读取权限。
- 打开IIS管理器,找到当前开启的网站,在该网站上右键选择“属性”,打开“属性”页面。
- 在“属性”页面,切换至“ISAPI筛选器”,单击“添加”,在弹出的窗口中,配置如下信息:
- “筛选器名称”:“F5XForwardedFor”;
- “可执行文件”:“F5XForwardedFor.dll”的完整路径,例如:“C:\ISAPIFilters\F5XForwardedFor.dll”。
- 单击“确定”,重启IIS 6服务器。
- 查看IIS 6服务器记录的访问日志(默认的日志路径为:“C:\WINDOWS\system32\LogFiles\ ”,IIS日志的文件名称以“.log”为后缀),可获取X-Forwarded-For对应的客户端真实IP。
IIS 7如何在访问日志中获取客户端真实IP
如果您的源站部署了IIS 7服务器,您可以通过安装“F5XForwardedFor”模块,从IIS 7服务器记录的访问日志中获取客户端真实的IP地址。
- 下载F5XForwardedFor模块。
- 根据服务器的操作系统版本将“x86\Release”或者“x64\Release”目录中的“F5XFFHttpModule.dll”和“F5XFFHttpModule.ini”文件拷贝到指定目录(例如,“C:\x_forwarded_for\x86”或“C:\x_forwarded_for\x64”),并确保IIS进程对该目录有读取权限。
- 在IIS服务器的选择项中,双击“模块”,进入“模块”界面。
- 单击“配置本机模块”,在弹出的对话框中,单击“注册”。
图2 注册模块
- 在弹出的对话框中,按操作系统注册已下载的DLL文件后,单击“确定”。
- x86操作系统:注册模块“x_forwarded_for_x86”
- 名称:x_forwarded_for_x86
- 路径:“C:\x_forwarded_for\x86\F5XFFHttpModule.dll”
- x64操作系统:注册模块“x_forwarded_for_x64”
- 名称:x_forwarded_for_x64
- 路径:“C:\x_forwarded_for\x64\F5XFFHttpModule.dll”
- x86操作系统:注册模块“x_forwarded_for_x86”
- 注册完成后,勾选新注册的模块(“x_forwarded_for_x86”或“x_forwarded_for_x64”)并单击“确定”。
- 在“ISAPI和CGI限制”中,按操作系统添加已注册的DLL文件,并将其“限制”改为“允许”。
- x86操作系统:
- ISAPI或CGI路径:“C:\x_forwarded_for\x86\F5XFFHttpModule.dll”
- 描述:x86
- x64操作系统:
- ISAPI或CGI路径:“C:\x_forwarded_for\x64\F5XFFHttpModule.dll”
- 描述:x64
- x86操作系统:
- 重启IIS 7服务器,等待配置生效。
- 查看IIS 7服务器记录的访问日志(默认的日志路径为:“C:\WINDOWS\system32\LogFiles\ ”,IIS日志的文件名称以“.log”为后缀),可获取X-Forwarded-For对应的客户端真实IP。