WAF获取真实IP是从报文中哪个字段获取到的?
根据WAF不同的接入模式判断从报文中的哪个字段来获取客户端的真实IP。
云模式-CNAME接入、独享模式接入
WAF引擎会根据防护规则确定是否代理转发请求去后端,如果WAF配置了基于IP的规则(比如黑白名单、地理位置、基于IP的精准访问防护规则),那么WAF引擎就会获取真实IP后才能放行或者拦截代理请求。获取真实IP的方法基于以下原则:
- 在WAF中开启了代理,即添加域名时,“是否使用七层代理”选择了“是”,按以下顺序获取源IP:
- 优先取“upstream”中配置的源IP头列表,即在域名的基本信息页面配置的“IP标记”,具体的操作请参见配置攻击惩罚的流量标识。如果未取到,执行2。
如果想以TCP连接IP作为客户端IP,“IP标记”应配置为“remote_addr”。
- 取config中配置的源IP头列表“cdn-src-ip”字段对应的值,未取到,执行3。
- 取“x-real-ip”字段的值,未取到,执行4。
- 取“x-forwarded-for”字段左边开始第一个公网IP,未取到,执行5。
- 取WAF看到的TCP连接IP,“remote_addr”字段对应的值。
- 优先取“upstream”中配置的源IP头列表,即在域名的基本信息页面配置的“IP标记”,具体的操作请参见配置攻击惩罚的流量标识。如果未取到,执行2。
- 在WAF中未开启代理,即添加域名时,“是否使用七层代理”选择了“否”,直接取“remote_ip”字段的值为真实IP。
获取客户端的真实IP的具体方法,详见获取客户端真实IP。
云模式-ELB接入
- 优先取“upstream”中配置的源IP头列表,即在域名的基本信息页面配置的“IP标记”,具体的操作请参见配置攻击惩罚的流量标识。如果未取到,执行2。
如果想以TCP连接IP作为客户端IP,“IP标记”应配置为“remote_addr”。
- 取config中配置的源IP头列表“cdn-src-ip”字段对应的值,未取到,执行3。
- 取“x-real-ip”字段的值,未取到,执行4。
- 取“x-forwarded-for”字段左边开始第一个公网IP,未取到,执行5。
- 取ELB看到的TCP连接IP,“remote_addr”字段对应的值。