文档中心 > Web 应用防火墙 > 最佳实践 > 如何获取客户端真实 IP

如何获取客户端真实 IP

最近更新时间:2020-03-19 09:31:42

WAF 获取客户端真实 IP 说明

WAF 通过反向代理的方式实现网站安全防护,用户访问 WAF 防护的域名时,会在 HTTP 头部字段中添加一条 X-Forwarded-For 记录,用于记录用户真实 IP,其记录格式为 X-Forwarded-For:用户 IP。如果用户访问域名存在多级代理,WAF 将记录靠近 WAF 上一条的代理服务器 IP。例如:
场景一:用户>WAF>源站,X-Forwarded-For 记录为:X-Forwarded-For:用户真实 IP
场景二:用户>CDN > WAF>源站,X-Forwarded-For 记录为: X-Forwarded-For:用户真实 IP,X-Forwarded-For:CDN 回源地址

说明:

负载均衡型 WAF 接入,请参见负载均衡中 如何获取客户端真实 IP

下文将对常见的应用服务器 X-Forwarded-For 配置方案进行介绍:

IIS 7 配置方案

  1. 下载与安装插件 F5XForwardedFor 模块,根据自己的服务器操作系统版本将x86\Release或者x64\Release目录下的F5XFFHttpModule.dllF5XFFHttpModule.ini拷贝到某个目录,这里假设为C:\F5XForwardedFor,确保 IIS 进程对该目录有读取权限。
  2. 选择【IIS 服务器】,双击【模块】功能。
  3. 单击【配置本机模块】。
  4. 在弹出框中单击【注册】。
  5. 添加下载的 DLL 文件,如下图所示:
  6. 添加完成后,勾选并单击【确定】。
  7. 在 IIS 服务器的 “ISAPI 和 CGI 限制”中,添加如上两个 DLL ,并将限制设置为允许。
  8. 重启 IIS 服务器,等待配置生效。

Apache 配置方案

  1. 安装 Apache 第三方模块“mod_rpaf”,需执行如下命令:
    wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
    tar zxvf mod_rpaf-0.6.tar.gz
    cd mod_rpaf-0.6
    /usr/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
  2. 修改 Apache 配置/etc/httpd/conf/httpd.conf,需在最末尾添加:
    LoadModule rpaf_module modules/mod_rpaf-2.0.so
    RPAFenable On
    RPAFsethostname On
    
    RPAFproxy_ips IP地址   //IP 地址为 WAF 防护域名的回源 IP 地址,可以在 Web应用防火墙控制台,防护配置域名列表中的回源 IP 地址中查看,也可以在服务器后台的日志中查看,只需要将所有需要查看的 IP 都填写上即可。
    RPAFheader X-Forwarded-For
    
    
  3. 添加完成后,重启 Apache。
    /usr/sbin/apachectl restart

Nginx 配置方案

  1. 当 Nginx 作为服务器时,获取客户端真实 IP,需使用 http_realip_module 模块,默认安装的 Nginx 是没有安装 http_realip_module 模块的,需要重新编译 Nginx 增加 --with-http_realip_module。

    wget  http://nginx.org/download/nginx-1.14.0.tar.gz 
    tar  zxvf nginx-1.14.0.tar.gz 
    cd nginx-1.14.0
    ./configure --user=www --group=www --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module
    make
    make install
  2. 修改 nginx.conf。

    vi /etc/nginx/nginx.conf

    修改如下红色部分:

      
    fastcgi connect_timeout 300;
    fastcgi send_timeout 300;
    fastcgi read_timeout 300;
    fastcgi buffer_size 64k;
    fastcgi buffers 4 64k;
    fastcgi busy_buffers_size 128k;
    fastcgi temp_file_write_size 128k;
    
    set_real_ip_from IP地址;   //IP 地址为 WAF 防护域名的回源 IP 地址,可以在 Web应用防火墙控制台,防护配置域名列表中的回源 IP 地址中查看。
    real_ip_header X-Forwarded-For;
    
    
  3. 重启 Nginx。

    service nginx restart
    
目录