雷池 WAF 应用防火墙搭建以及常见问题排查

Web Application Firewall 为 Web 应用防火墙,简称 WAF。它通过分析 HTTP/HTTPS 流量,根据预设的安全规则集以及语义分析,识别并拦截针对 Web 应用的恶意攻击,例如 SQL 注入、跨站脚本(XSS)、恶意爬虫、API 滥用、CC 攻击等,可以理解为保护网站的「保安」。

雷池 WAF 是一款免费开源的国产 Web 应用防火墙,​​提供了友好的管理界面,通过内置的语义分析引擎,可以识别未知攻击变种和绕过手段,同时降低误报漏报,保护 Web 应用安全。

本篇文章介绍了如何通过 Docker 环境部署雷池 WAF,以及在配置反向代理过程中常见问题的解决方法。

产品官网:https://waf-ce.chaitin.cn/

雷池 WAF 应用防火墙搭建以及常见问题排查

准备工作

一般情况建议将 WAF 和源站服务器进行网络隔离,将 WAF 独立部署,以保护源站安全。

安装雷池 WAF 前请确保系统环境符合要求,操作系统类型为 Linux,最低资源需求:1 核 CPU / 1 GB 内存 / 5 GB 磁盘。本篇文章测试环境为 CentOS 7.9。

官方文档:https://help.waf-ce.chaitin.cn/

安装 Docker CE 和 Docker Compose

1、从阿里云仓库下载 Docker 软件包,并执行安装。

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2、安装完成后启动 docker 服务。

systemctl start docker
systemctl enable docker

3、查看版本信息,雷池 WAF 要求 Docker 20.10.14 版本以上,Docker Compose 2.0.0 版本以上。

docker --version
docker compose version

安装雷池 WAF

1、执行以下命令完成自动安装。

bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"
雷池 WAF 应用防火墙搭建以及常见问题排查

2、设置安装目录,可以保持默认。

雷池 WAF 应用防火墙搭建以及常见问题排查

3、等待安装完成后,根据命令行提示使用浏览器访问控制台,并输入默认用户名和密码进行登录。雷池控制台的默认端口为 9443,注意在防火墙放行该端口。

雷池 WAF 应用防火墙搭建以及常见问题排查

修改 Nginx 监听端口

如果当前环境使用了宝塔面板或 1Panel 等 Linux 服务器运维面板,并安装了 Nginx 服务,将导致 Nginx 默认的监听端口(80 和 443)与雷池 WAF 等监听端口产生冲突。此时需要修改 Nginx 的监听端口到其他任意端口,保证雷池 WAF 可以正常使用 80 和 443 端口。

一般在生产环境中,考虑到网络安全隔离,并不建议将雷池 WAF 和 Web 源站共用一台服务器。如果您需要在同一台服务器上安装宝塔面板和雷池 WAF,下面介绍了宝塔面板修改 Nginx 默认端口的方法,1Panel 或其他运维面板请自行查阅官方文档(https://help.waf-ce.chaitin.cn/)或其他相关资料进行操作。

1、登录宝塔面板,停止 Nginx 服务,并删除所有使用了 80 和 443 端口的站点,注意提前保存所有站点配置。

2、左侧选择「文件」功能,分别找到「/www/server/panel/vhost/nginx/0.default.conf」和「/www/server/panel/vhost/nginx/phpfpm_status.conf」两个配置文件并进行编辑,将默认端口修改为其他非占用端口,例如 10080 端口,保存退出。

雷池 WAF 应用防火墙搭建以及常见问题排查
雷池 WAF 应用防火墙搭建以及常见问题排查

3、修改完成后重载 Nginx 服务,并添加相关站点。

雷池 WAF 应用防火墙搭建以及常见问题排查

4、最后通过命令检查 Nginx 服务的端口监听情况,确保没有占用 80 和 443 端口。

ss -lanp | grep LISTEN | grep nginx
雷池 WAF 应用防火墙搭建以及常见问题排查

添加防护应用

雷池 WAF 本质上是一个以反向代理为载体的安全网关,通过部署在客户端和 Web 源站之间,将所有访问流量过滤后,再转发到后端服务器。

1、登录到雷池控制台,选择「防护应用」>「添加应用」。

雷池 WAF 应用防火墙搭建以及常见问题排查

2、输入域名和服务端口,并配置 SSL 安全证书。根据需求选择代理模式,一般情况下选择「代理到已有应用」,并输入上游服务器地址,点击提交。

例如当前 Nginx 服务和雷池 WAF 共用一台服务器,并将 Nginx 的监听端口设置为「10080」,则上游服务器输入「http://127.0.0.1:10080」。

雷池 WAF 应用防火墙搭建以及常见问题排查

3、进入应用,根据业务需求配置防护规则,并开启访问日志。

雷池 WAF 应用防火墙搭建以及常见问题排查

修改源 IP 获取方式

默认情况下,雷池 WAF 会通过 TCP Socket 连接来获取客户端的源 IP 地址,如果雷池 WAF 的上一级设置了 CDN 加速,则需要修改源 IP 获取方式。

1、登录到雷池控制台,选择「防护应用」>「高级配置」。

雷池 WAF 应用防火墙搭建以及常见问题排查

2、将「源 IP 获取方式」设置为「取 X-Forwarded-For 中上一级代理的地址」,如果客户端和雷池 WAF 之间经过了多级代理,则需要调整相应层级。更多相关内容可以前往官方文档(https://help.waf-ce.chaitin.cn/)进行查阅。

雷池 WAF 应用防火墙搭建以及常见问题排查

雷池 WAF 代理 WordPress 站点后,浏览器提示重定向次数过多

由于雷池 WAF 开启了强制 HTTPS,而 WordPress 的站点链接配置为 HTTPS 后,会形成循环重定向,这个问题可以通过修改 WordPress 的配置文件解决。

1、进入 WordPress 站点的根目录,找到「wp-config.php」文件并进行编辑。

2、在文件开头添加以下内容,使 WordPress 能够正确识别通过代理传来的 HTTPS,终止 SSL。

define('FORCE_SSL_ADMIN', true);
$_SERVER['HTTPS'] = 'on';

解决 Nginx 自动重定向造成暴露内部端口的问题

当 Nginx 使用自定义监听端口(例如 10080),当用户访问不带斜杠的目录路径时(如 http://www.domain.com/common/styles)会导致 Nginx 自动重定向到带斜杠的路径,但是重定向的 URL 暴露了内部端口,并且由于客户端无法访问内部端口,导致连接失败。

此时需要使用 proxy_redirect 指令,重写从代理服务器返回的响应中的 Location 头。

1、登录到雷池控制台,选择「防护应用」,进入需要配置的应用界面,选择「高级配置」。

雷池 WAF 应用防火墙搭建以及常见问题排查

2、滑动到最底部,找到「自定义 NGINX 配置」,点击「编辑」。

雷池 WAF 应用防火墙搭建以及常见问题排查

3、在 location 中添加以下内容,并将端口替换为 Nginx 的监听端口,点击保存。

# 处理 HTTP 重定向,删除端口,只保留路径部分
proxy_redirect http://$http_host:10080/ /;

# 处理 HTTPS 重定向,删除端口,只保留路径部分
proxy_redirect https://$http_host:10080/ /;

# 使用正则匹配重写路径
proxy_redirect ~^http(?:s)?://([^:]+):10080(.*) $scheme://$1$2;
雷池 WAF 应用防火墙搭建以及常见问题排查

卸载雷池 WAF

1、通过命令行进入雷池的安装目录,输入以下命令停止雷池 WAF 服务。

# 雷池默认安装目录,根据实际情况调整
cd /data/safeline/

docker compose down
雷池 WAF 应用防火墙搭建以及常见问题排查

2、删除雷池 WAF 相关文件。

rm -rf /data/safeline/
雷池 WAF 应用防火墙搭建以及常见问题排查

本文为原创文章,著作权归作者所有:来自「KOBIN 技术随笔」作者的原创作品,转载请标明出处。
雷池 WAF 应用防火墙搭建以及常见问题排查
https://blog.kobin.cn/blog/system/s2/3303.html
(0)

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

CAPTCHAis initialing...