CasWAF
运维

代理后面的客户端IP

IP规则、限流、请求记录,以及CasWAF转发时带上的X-Real-Ip请求头,用的都是客户端地址。CasWAF直接面向互联网时,客户端地址就是连接的来源地址。前面有负载均衡、CDN或其他代理时,连接来自代理,真实地址在X-Forwarded-For里,而这个请求头任何人也都能手工设置。

CasWAF怎么判断

  1. 如果连接不是来自可信代理,客户端就是连接的地址。客户端发来的任何X-Forwarded-For都被忽略,并在转发请求之前删除。
  2. 如果连接来自可信代理,CasWAF从右往左读X-Forwarded-For,跳过可信代理,取第一个不是可信代理的地址。每个代理都会追加它收到连接时的来源地址,所以这个地址是进入你自己的基础设施之前的最后一跳,客户端伪造不了。
  3. 没有X-Forwarded-For时,如果可信代理发了X-Real-IP就用它,否则用连接的地址。

可信代理

默认信任私有地址段和本地地址段:

127.0.0.0/8, ::1/128, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, fc00::/7

这涵盖了你内网里的负载均衡,例如从内网地址转发的云负载均衡。如果CasWAF前面的代理从公网地址连过来,像CDN那样,就把它的地址段,连同你仍然需要的私有地址段,一起写进trustedProxies:

trustedProxies = 127.0.0.0/8, ::1/128, 10.0.0.0/8, 173.245.48.0/20, 103.21.244.0/22

这个值会替换默认列表。也接受不带/的单个地址。和数据库设置一样,它也可以用同名环境变量设置。它只在启动时读取一次。

只信任属于你所用代理的地址段。列表里的每个地址都能声称自己在替任何人转发。

应用看到什么

CasWAF转发请求时带上:

  • X-Real-Ip:上面得出的客户端地址
  • X-Forwarded-Proto:https或http,即客户端连接CasWAF时用的协议
  • X-Forwarded-For:来自可信代理时原样保留,否则删除

CasWAF后面的应用应该读X-Real-Ip,并且只在请求来自CasWAF时才信任它。

在GitHub上编辑

本页内容