一、WAF 获取客户端真实 IP 说明
注意:说明:
下文将对常见的应用服务器 X-Forwarded-For 配置方案进行介绍:
·IIS 配置方案
·Apache 配置方案
·Nginx 配置方案
二、IIS 配置方案
不同版本的 IIS(如 IIS 7、IIS 8.5、IIS 10)对应的配置方法略有不同,因此在开始配置前,请先确认你的 IIS 版本,以便选择正确的配置方案。
三、获取 IIS 版本信息
1. 打开 IIS 管理器。
2. 在左侧的连接窗口中,选择服务器节点。
3. 在右侧的功能视图中,找到并双击服务器信息或关于 IIS(具体名称可能因 IIS 版本而异),这里会显示 IIS 的版本信息。
注意:说明:
注意:你也可以通过 Windows 的控制面板 > 程序 > 启用或关闭 Windows 功能,查看已安装的 IIS 相关组件,间接判断 IIS 版本。
四、IIS 7 配置方案
1. 下载与安装插件 F5XForwardedFor 模块,根据自己的服务器操作系统版本将x86\\Release或者x64\\Release目录下的F5XFFHttpModule.dll和F5XFFHttpModule.ini拷贝到某个目录,这里假设为C:\\F5XForwardedFor,确保 IIS 进程对该目录有读取权限。
2. 选择 IIS 服务器,双击模块功能。
注意:说明:
注意:如果当前服务器中没有安装 IIS 服务器,可以参考在 Windows Server 2008 或 Windows Server 2008 R2 上安装 IIS 7 。
3. 单击配置本机模块。
4. 在弹出框中单击注册。
5. 添加下载的 DLL 文件:
6. 添加完成后,选择符合自身系统版本的 F5XForwardedFor 模块,勾选并单击确定。
注意:说明:
注意:下图为添加示意图,实际添加时按照对应操作系统版本及安装的 IIS 即可,如果不清楚当前是什么系统版本,可以同时添加。
7. 在 IIS 服务器的 “ISAPI 和 CGI 限制”中,添加如上两个 DLL ,并将限制设置为允许。
8. 重启 IIS 服务器,等待配置生效。
五、IIS 8.5 及以上(含 IIS 10.0)配置方案
在 IIS 8.5 及以上(含 IIS 10.0)版本中,由于引入了增强日志功能,因此,管理员可以选择从请求或响应标头或服务器变量记录其他自定义字段。
1. 打开 IIS 管理器。
2. 在连接窗口中选择站点或服务器,并双击日志。
注意:增强日志记录仅适用于站点级日志记录,如果在“连接”窗格中选择服务器,则会禁用 W3C 日志记录字段对话框的“自定义字段”部分。
3. 在日志文件的格式字段中,选择 W3C,单击选择字段。
4. 在 W3C 日志记录字段对话框中,单击添加字段…。
注意:增强日志记录仅适用于站点级日志记录 – 如果在“连接”窗格中选择了服务器,则“添加字段…”处于禁用状态。
5. 在添加自定义字段对话框中,输入字段名称以标识日志文件中的自定义字段。在源类型处选择请求标头,源输入 X-FORWARDED-FOR。
6. 单击确认,重启 IIS 服务器,等待配置生效。
六、Apache 配置方案
1. 如未安装 apache2-dev,需要先安装 apache2-dev,执行如下命令:
apt-get install apache2-dev
2. 检查 mod_rpaf 模块是否已安装:执行命令 apachectl -M | grep rpaf 查看 Apache 模块加载情况:
apachectl -M | grep rpaf
·若输出包含 rpaf_module,则说明模块已正常加载,可直接跳转至第4步;
·若输出未包含该模块,则表明未加载,需跳转至第3步进行手动安装。
3. 安装 Apache 第三方模块 mod_rpaf,需执行如下命令:
wget https://github.com/gnif/mod_rpaf/archive/refs/tags/v0.8.4.tar.gztar zxvf mod_rpaf-0.8.4.tar.gzcd mod_rpaf-0.8.4/usr/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
4. 修改 Apache 配置/etc/httpd/conf/httpd.conf,需在最末尾添加:
LoadModule rpaf_module modules/mod_rpaf-2.0.soRPAFenable OnRPAFsethostname OnRPAFproxy_ips IP地址 //IP 地址为 WAF 防护域名的回源 IP 地址,可以在 Web应用防火墙控制台,防护配置域名列表中的回源 IP 地址中查看,也可以在服务器后台的日志中查看,只需要将所有需要查看的 IP 都填写上即可。RPAFheader X-Forwarded-For
5. 完成配置添加后,执行 apachectl -t 命令校验 Apache 配置文件的语法:
apachectl -t
·若输出显示 Syntax OK,说明配置无语法错误,可跳转至第6步安全重启 Apache;
·若存在错误,请根据提示修正配置文件问题,修正后重复执行此步骤(第5步)验证修正结果。
6. 重启 Apache。
/usr/sbin/apachectl restart
七、Nginx 配置方案
1. 若 Nginx 需获取客户端真实 IP,需确保已编译 http_realip_module 模块。执行 nginx -V 查看编译参数,检查输出中是否存在 –with-http_realip_module:
nginx -V
·若存在则模块已集成,可直接执行第3步;
·若不存在则需执行第2步手动重新编译 Nginx。
2. 重新编译 Nginx,在 configure 增加 –with-http_realip_module 选项,确保 http_realip_module 模块编译进 Nginx 中。编译代码如下:
wget http://nginx.org/download/nginx-1.24.0.tar.gz tar zxvf nginx-1.24.0.tar.gz apt-get install libpcre3 libpcre3-dev -yapt-get -y install openssl libssl-devcd nginx-1.24.0./configure –user=www –group=www –with-http_stub_status_module –without-http-cache –with-http_ssl_module –with-http_realip_modulemakemake install
3. 修改 nginx.conf。
注意:说明:
注意:下述路径为演示路径,请根据真实安装路径进行配置。
vi /usr/local/nginx/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;
4. 使用 nginx -t 校验 Nginx 配置文件语法,避免重启失败:
nginx -t
·若输出显示 "syntax is ok" 和 "test is successful",则可执行第5步安全重启;
·若报错,根据提示修正配置后重复执行此步骤(第4步)验证。
5. 重启 Nginx。
service nginx restart