前言

在网上看了许多关于WAF+FRP+Nginx的方式来保护内网穿透的Web服务,但是在网上搜寻的结果都是将WAF部署在了源站上面,由于我的Web服务都是部署在NAS上面,然后使用Frp来穿透访问的,我认为WAF应该部署在服务器上面比较合适,在服务器上面进行拦截异常访问和攻击,这样能大大降低源站的压力。

本次教程主要讲解雷池WAF的安装部署过程以及配合FRPNginx来实现安全可靠的内网穿透,FRPNginx的部署教程我在前面的笔记中已经有记录。

我的网站大致的路由拓扑图如下:

简介

雷池WAF(Web Application Firewall)是一款由长亭科技开发的Web应用防火墙,其核心检测能力由智能语义分析算法驱动,旨在为企业级用户提供专业的网络信息安全解决方案。雷池WAF的主要特点包括:

  1. 防护Web攻击:能够防御SQL注入、XSS、代码注入、命令注入、CRLF注入、LDAP注入、XPath注入、RCE、XXE、SSRF、路径遍历等攻击类型。

  2. 防爬虫、防扫描:通过人机验证功能,可以识别并放行真人用户的流量,而阻断由自动化程序如爬虫、漏洞扫描器等发起的恶意流量。

  3. 前端代码动态加密:即使在用户浏览到的网页内容不变的情况下,也能对HTML和JavaScript代码进行动态加密,确保每次访问时代码都以随机且独特的形态呈现。

  4. 基于源IP的访问速率限制:可以限制用户的访问速率,从而保护Web服务免遭CC攻击、暴力破解、流量激增等攻击。

  5. HTTP访问控制:提供基于源IP的访问控制,增强网站的安全性。

雷池WAF的安装和配置相对简单,支持一键安装和容器化管理,适配多种运行环境。它还提供简洁的操作界面,专为社区设计,使得用户能够轻松上手并实现躺平式管理。

此外,雷池WAF还提供了一些高级防护能力,如身份认证功能,可以解决未授权访问的问题;动态防护功能,可以实时分析并拦截恶意流量,并对网页代码进行动态加密保护。

对于希望保护Web应用免受黑客攻击的用户来说,雷池WAF是一个不错的选择。它不仅提供了强大的安全防护功能,还通过智能化的方式简化了安全管理,使得用户可以更加专注于业务本身。

部署

安装FRP

安装FRP的教程请参考【Docker】搭建实用的内网穿透工具 - FRP

需要注意的是frpc.txt​中的远程端口(remotePort)需要更换成其他非80​和443​端口。因为80和443端口需要由雷池WAF来进行监听并且做反向代理。

​frpc.txt​中的本地端口(localPort)直接填写你内网Nginx的监听端口,例如80​和443​。

安装Nginx

安装Nginx的教程请参考【Docker】搭建强大的Nginx可视化配置工具 - nginxWebUI

内网安装Nginx主要用来监听内网的80和443端口来进行反向代理到不同端口下的Web服务。

环境依赖

安装雷池前请确保你的系统环境符合以下要求

  • 操作系统:Linux

  • CPU 指令架构:x86_64

  • CPU 指令架构:支持 ssse3 指令集

  • 软件依赖:Docker 20.10.14 版本以上

  • 软件依赖:Docker Compose 2.0.0 版本以上

  • 最低资源需求:1 核 CPU / 1 GB 内存 / 5 GB 磁盘

可以根据以下命令来查看相关信息

uname -m                                    # 查看指令架构
cat /proc/cpuinfo| grep "processor"         # 查看 CPU 信息
lscpu | grep ssse3                          # 确认 CPU 是否支持 ssse3 指令集
docker version                              # 查看 Docker 版本
docker compose version                      # 查看 Docker Compose 版本
docker-compose version                      # 查看老版本 docker-compose 版本
free -h                                     # 查看内存信息
df -h                                       # 查看磁盘信息

安装雷池

自动安装

  1. 使用你熟悉的ssh工具连接到服务器上,使用 root 权限执行以下命令

    bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"

  2. 雷池安装目录我直接使用默认的/data/safeline​,所以直接回车就行。

  3. 直接输入y​,然后回车继续执行。

手动安装

请参考官方文档 安装雷池 | 雷池 SafeLine (chaitin.cn)

使用雷池

  1. 在浏览器中输入服务器IP:9443​来访问WAF控制台。

    注意对9443​的端口打开访问!

  2. 登录的用户名默认是admin​,默认的随机密码在终端的控制台中有显示。

  3. 在“防护站点”中找到“证书管理”,点击“添加证书”。

  4. 目前雷池暂时不支持泛域名的证书申请,如果需要使用泛域名证书,需要通过其他方式申请并在雷池中上传已有证书。

    如果需要申请泛域名证书并且实现自动续期SSL证书,请参考【折腾笔记】雷池WAF社区版自动SSL续签

  5. 在“防护站点”中找到“站点管理”,点击“添加站点”。

  6. 填写站点信息:①我需要所有站点都经过WAF再进入内网,所以我这里直接用通配符来匹配所有二级域名,请根据自己的情况进行修改。②端口使用默认的80​和443​即可。③证书选择我们刚刚上传的证书即可。④选择“代理到已有网站”。⑤上游服务器直接填写回环地址https://127.0.0.1:60443​,此处的端口可以根据自己使用穿透的远程端口进行修改,如果上游服务器访问正常,旁边会出现一个绿色的✅图标。⑥点击“提交”即可。

  7. 在“防护配置”中找到“频率限制”,开启“高频访问限制”和“高频攻击限制”,其中的参数需要根据你自己的站点访问情况进行修改。如果参数设置的过于严格,容易被误报或者拦截,所以根据自己站点访问情况进行调整一个适中的频率。

  8. 如果你的在正常访问的网站出现一些异常,大概率是被拦截了,这个时候可以通过在“防护配置”中的“自定义规则”点击“添加”来增加白名单进行过滤。

  9. 例如你的站点开启了人机验证,网站调用你部署的其他服务API,并且该API也需要经过WAF的话可能会无法正常调用,所以需要增加白名单来过滤。

  10. 建议在“防护配置”中的“通用配置”内找到“拦截页面”填写“附加说明”,当正常用户访问你的站点时,被误判时,用户能够通过附加说明中留下的联系方式与你取得联系。

  11. 当你完成以上配置以后,在“数据统计”中能够看到请求数和QPS等数据,表明你的配置基本没有什么大问题。

验证雷池的防护效果

尝试手动模拟攻击

https://blog.uptoz.cn​ 为例,然后尝试访问来模拟黑客攻击。

用你的网站地址替换下方的 https://blog.uptoz.cn​

不出意外的话,这些攻击都将被雷池拦截,如下图所示。

若攻击没有被拦截,说明你的雷池配置有误。

升级雷池

  1. 执行以下命令进行升级,升级不会清除历史数据。

    bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/upgrade.sh)"

    如果需要使用华为云加速,可使用

    CDN=1 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/upgrade.sh)"

  2. [可选] 执行以下命令删除旧版本 Docker 镜像,释放磁盘空间。

    docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}')

    较老版本的雷池安装路径在 /data/safeline-ce​,安装之后可能会发现需要重新绑定 OTP、配置丢失等情况,可以修改 .env 的 SAFELINE_DIR​ 变量,指向 /data/safeline-ce​