长亭雷池 WAF 初体验

雷池,是今年长亭开源的一个 WAF 产品,GitHub 地址:https://github.com/chaitin/safeline 。基于业界领先的语义引擎检测技术,作为反向代理接入,保护网站不受黑客攻击。

首先我们要进行基本的安装,目前最新版是 2.5.0,这里采用源码的方式进行安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 安装 docker 环境
$ curl -Ls https://get.docker.com/ | VERSION=v24.0.5 sh
$ curl -Ls https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

# 下载源码
$ cd
$ curl -Ls https://github.com/chaitin/safeline/archive/refs/tags/v2.5.0.tar.gz -o safeline.tar.gz
$ mkdir ~/safeline
$ tar xzf safeline.tar.gz -C ~/safeline --strip-components=1
$ rm -rf safeline.tar.gz
$ cd ~/safeline

# 配置环境变量
$ echo "SAFELINE_DIR=$(pwd)" >> .env
$ echo "IMAGE_TAG=2.5.0" >> .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

# 启动
$ docker compose up -d
[+] Running 7/7
✔ Network safeline-ce Created 0.1s
✔ Container safeline-tengine Started 2.7s
✔ Container safeline-mgt-api Started 3.7s
✔ Container safeline-detector Started 3.3s
✔ Container safeline-mario Started 3.5s
✔ Container safeline-redis Started 3.3s
✔ Container safeline-postgres Started 3.3s

好了,现在访问 https://IP:9443

这里绑定动态口令,需要先安装 Google Authenticator,然后扫码绑定。

小提示:如果你需要多账户,那可以把上面的图片保留下来,然后各自去用 Google Authenticator 扫码绑定。

现在我们进入到管理后台页面了。

进入到通用配置页面,使用右侧的批量配置为 高强度防护。

回到服务器,我们需要启动一个测试服务。

~/web/docker-compose.yaml

1
2
3
4
5
6
7
8
9
version: '3.8'

services:
hongfs:
image: ghcr.io/hongfs/env:web-1
ports:
- "65080:80"
deploy:
replicas: 10
1
2
$ docker swarm init
$ docker stack deploy --compose-file ~/web/docker-compose.yaml web

启动完成了,我们回到管理后台,切换到防护站点,点击添加站点。

好了,我们可以尝试下访问。

试一下恶意访问。

切换到控制台的攻击事件,可以看见有这条记录。

因为 docker swarm 不是完全的轮训模式,所以这里我们要测试不同容器能不能接受到,需要进行压测。

1
$ wrk -c10 -t2 -d10m https://waf.hongfs.cn/hostname

然后我们循环请求输出看看。

1
2
3
4
5
6
7
8
9
10
$ for i in $(seq 1 100); do curl "https://waf.hongfs.cn/hostname"; done
d3c86856a79e
d3c86856a79e
81df78e0663a
a61580336565
d3c86856a79e
d3c86856a79e
d3c86856a79e
a61580336565
2260176be746

既然我们在压测,干脆开启新版的限流功能看看。这个在频率限制里面。

好了,现在我们可以正常使用了。

往上