关于WAF,大家可能第一时间想到的是各种公有云平台上的产品,阿里云华为云等等,价格一般不菲。今天在这里向大家推荐目前最火的一款开源的WAF产品-长亭雷池,它在github上已经拥有10k+的star了,希望对有需要的小伙伴有所帮助。
它的官网是:https://waf-ce.chaitin.cn/
它的github地址是:https://github.com/chaitin/SafeLine
什么是 WAF?
首先了解下什么是WAF,WAF 是 Web Application Firewall 的缩写,也被称为 Web 应用防火墙。区别于传统防火墙,WAF 工作在应用层,对基于 HTTP/HTTPS 协议的 Web 系统有着更好的防护效果,使其免于受到黑客的攻击。
什么是雷池?
雷池是长亭科技耗时近 10 年倾情打造的 WAF,核心检测能力由智能语义分析算法驱动。
它的Slogan是: 不让黑客越雷池半步。
为什么是雷池?
便捷性
采用容器化部署,一条命令即可完成安装,0 成本上手
安全配置开箱即用,无需人工维护,可实现安全躺平式管理
安全性
首创业内领先的智能语义分析算法,精准检测、低误报、难绕过
语义分析算法无规则,面对未知特征的 0day 攻击不再手足无措
高性能
无规则引擎,线性安全检测算法,平均请求检测延迟在 1 毫秒级别
并发能力强,单核轻松检测 2000+ TPS,只要硬件足够强,可支撑的流量规模无上限
高可用
流量处理引擎基于 Nginx 开发,性能与稳定性均可得到保障
内置完善的健康检查机制,服务可用性高达 99.99%
架构
部署
可以在线部署也可以离线部署,推荐离线部署,速度会快很多
1. 在线部署,一条命令搞定
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"
2. 离线部署
1)下载离线镜像包
wget https://demo.waf-ce.chaitin.cn/image.tar.gz --no-check-certificate2)导入镜像包
2)导入镜像
cat image.tar.gz | gzip -d | docker load
3)创建相关目录
mkdir -p safeline
cd safeline
4)下载docker-compose.yaml
wget https://waf-ce.chaitin.cn/release/latest/compose.yaml --no-check-certif
5)设置环境变量
echo "SAFELINE_DIR=$(pwd)" >> .env
echo "IMAGE_TAG=latest" >> .env
echo "MGT_PORT=9443" >> .env
echo "POSTGRES_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> .env
echo "REDIS_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> .env
echo "SUBNET_PREFIX=172.22.222" >> .env
说明:
echo "SAFELINE_DIR=$(pwd)" >> .env # 设置当前路径为雷池社区版的根路径
echo "IMAGE_TAG=latest" >> .env # 设置镜像的 tag
echo "MGT_PORT=9443" >> .env # 管理容器服务使用的端口
echo "POSTGRES_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> .env # /dev/urandom是一个很长的随机数文本,tr -dc 命令用于删除非字母、非数字的字符,用于生成随机的 postgres 密码
echo "REDIS_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> .env # 同上,用于生成随机的 redis 密码
echo "SUBNET_PREFIX=172.22.222" >> .env # 定义 docker 虚拟网卡的子网前缀
6)启动
docker-compose up -d
7)查看日志
# 查看各容器状态
$ sudo docker ps
# 输出容器 std 日志
$ sudo docker logs -f <comtainer_name>
# 一些服务运行中的持久化也会存储在磁盘上,目录结构如下
$ tree
.
├── detector
│ └── snserver.log #检测容器的输出日志
├── management
│ ├── nginx.log # Tengine 容器中 NGINX 日志输出
│ └── webserver.log # safeline-mgt-api 容器的日志输出
├── mario
│ └── mario.log # 流量日志输出
└── nginx
├── error.log # NGINX 的错误日志
└── tcd.log # tcd 是 Tengine 用于与 safeline-mgt-api 通信的网络代理进程,该文件存储了两者的通信日志
使用
1.浏览器打开后台管理页面 https://<waf-ip>:9443
输入初始的admin密码,完成安装后在shell会自动输出密码
2. 绑定MFA
-
添加防护域名,这里有好几种方式,这里我拿第二种方式测试
比如我要防护http://gitlab.192.168.1.76.nip.io这个域名(实际生产肯定还是要配合SSL加密使用,我这里只做展示所以用http):
上游服务器就是源站了,添加完成如下:
添加完测试下是否可以访问:
访问完成后在控制台就能看到相关的数据了:
-
手动测试防护效果
模拟SQL注入:访问 http://<IP或域名>:<端口>/?id=1%20AND%201=1
模拟XSS攻击:http://<IP或域名>:<端口>/?html=<script>alert(1)</script>
从上图可以看到两次都被拦截了,下面是控制台能看到的一些数据:
-
自动化测试防护效果
1)下载测试工具:
https://waf-ce.chaitin.cn/blazehttp/blazehttp_windows.exe
https://waf-ce.chaitin.cn/blazehttp/blazehttp_mac_m1
https://waf-ce.chaitin.cn/blazehttp/blazehttp_linux_x64
2)下载测试样本:https://waf-ce.chaitin.cn/blazehttp/testcases.zip
3)将测试工具 blazehttp 和测试样本 testcases 放在同一个目录下
4)进入对应的目录,使用以下请求开始测试
./blazehttp -t http://<IP或域名>:<端口> -g './testcases/**/*.http'
好了,我这里只是简单地测试了基本功能,更多好用的功能还需要自己探索,目前最新社区版是6.0.2。如果有需要商业版的小伙伴也可以咨询官方客服,专业版购买地址如下:
https://rivers.chaitin.cn/?share=85db8d21d63711ee91390242c0a8176b