我们在安装了Linux服务器并使用了宝塔面板后发现,宝塔的WAF需要升级版本才能使用。尽管市面上有很多免费的开源WAF解决方案,但我们对它们的学习成本感到有些高,而且对于我们这个刚开始建站的小型项目来说,也不想花费一千多块钱来购买商业WAF每年的许可费。

因此,我在网上进行了一番搜索,希望能找到一款简单上手的开源WAF。最终,我发现了长亭公司开发的雷池WAF,它非常适合我们使用。下面一起来学习一下,内容很干,点赞收藏加关注:

一、检查配置条件

不过有以下配置需求,一般主机也达到要求了。
操作系统:Linux
指令架构:x86_64
软件依赖:Docker 20.10.14 版本以上
软件依赖:Docker Compose 2.0.0 版本以上
最小化环境:1 核 CPU / 1 GB 内存 / 5 GB 磁盘
可以逐行执行以下命令来确认服务器配置

uname -m                 # 查看指令架构
docker version           # 查看 Docker 版本
docker compose version   # 查看 Docker Compose 版本
docker-compose version   # 同上(兼容老版本 Docker Compose)
cat /proc/cpuinfo        # 查看 CPU 信息
cat /proc/meminfo        # 查看内存信息
df -h                    # 查看磁盘信息

lscpu | grep ssse3       # 确认 CPU 是否支持 ssse3 指令集

二、安装

官方介绍有三种安装方法,分别是在线安装、离线安装、和牧云助手安装

1、在线安装

龙哥就喜欢这种方法,用下面一行命令搞定
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"

不过这个方法也有弊端,有些主机网络不好或者就干脆是连不了外网。那就要用到下面两种了

2、离线安装

如果你的服务器无法连接互联网环境或连接Docker Hub网络不稳定,可以通过镜像包的安装方式进行安装。以下是安装步骤:

  1. 首先,下载"雷池"社区版镜像包并将其传输到需要安装"雷池"的服务器上。
  2. 执行以下命令加载镜像:
cat image.tar.gz | gzip -d | docker load
  1. 创建并进入"雷池"安装目录:
mkdir -p safeline   # 创建safeline目录
cd safeline         # 进入safeline目录
  1. 下载编排脚本并将其传输到safeline目录中。
  2. 执行以下命令生成"雷池"运行所需的相关环境变量:
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
  1. 执行以下命令启动"雷池":
docker compose up -d

在这里插入图片描述
到此就按照成功了,可以

请注意,以上是忽略了Docker安装过程的步骤,对Docker感兴趣的朋友下次有时间咱们单独来记录学习一下。
另外龙哥在测试的时候想到大家可能也跟我一样比较懒,龙哥这里也找了一份一键安装脚本,感兴趣的自行研究一下。

#!/bin/bash
echo 加载镜像
cat image.tar.gz | gzip -d | docker load

echo 创建安装目录
DIR=/data/docker/safeline/
mkdir -p $DIR

echo 复制编排文件
cp -f compose.yaml $DIR

cd ..
rm -rf waf/

echo 添加配置
cat >> ${DIR}.env << EOF
SAFELINE_DIR=${DIR}
IMAGE_TAG=latest
MGT_PORT=9443
POSTGRES_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)
REDIS_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)
SUBNET_PREFIX=169.254.0
EOF

cat ${DIR}.env

echo 启动镜像
docker-compose -f ${DIR}compose.yaml up -d

echo 安装成功
echo 访问:http://ip:9443,登录雷池控制台

注意要将镜像包、编排文件、安装脚本,上传到服务器:/data/docke/waf 目录下,没有就创建一下
执行以下命名一键离线包安装

chmod +x install.sh && ./install.sh

3、使用牧云助手安装

在这里插入图片描述
有兴趣的自己去了解一下吧,这也不过多介绍

四、具体使用和DIV

浏览器输入:ip:9443
注意记得要在宝塔安全组和服务器安全组添加上该端口号
在这里插入图片描述
成功进入后台,对了进入后台是要下载身份验证器绑定的。龙哥这里就不写了,傻瓜式操作。
这里就要说明一下waf的工作原理了
原来我们服务器是:
用户——apache——服务器
现在我们需要把雷池waf放在用户访问下面
用户——雷池waf——apache——服务器

所以我们的网站需要改一下端口,就改成81 然后waf设置为http的 80
在这里插入图片描述
https的443端口也要设置一下
在这里插入图片描述
http自动跳转到https

修改雷池waf的nginx配置,将80请求重定向到443,雷池预留了自定义配置参数

安装路径下,safeline/resources/nginx/custom_params
在这里插入图片描述

添加以下配置

return 307 https://www.waf.com$request_uri;

重启雷池waf的nginx

docker exec safeline-tengine nginx -t

还有很多好用的功能,小伙伴们就自行研究了。

类似:站点维护,黑白名单,人机验证。这都是很实用的功能。完全免费。长亭科技大大滴良心。

ps:自定义页面

很多小伙伴想自定义,403页面、维护页面,但是雷池waf默认是不允许修改的,每分钟会定时覆盖掉。

这里给你们提供一个自定义的思路,因为这些页面是通过nginx容器来代理跳转的,nginx里面修改配置就行了,然后重启,所以你懂的吧。

但还是提醒下免费版默认不允许商用的,这些自定义页面属于个人行为,小伙伴们研究研究自己玩玩就好。

补充:
我使用的是宝塔面板 lamp 用的apache 搭建网站。
这里需要把443 和80端口给到waf
所以咱们网站这边需要修改一下默认的443端口和80端口
具体修改方法:
nano /www/server/apache/conf/httpd.conf
#Listen 443
#Listen 80
注释掉修改为
Listen 8443 https
Listen 8080 http
nano /www/server/apache/conf/extra/httpd-ssl.conf
443 修改8443
网站重新保存一下 ssl
完美解决同一服务器装waf的端口冲突!

五、更新

可以直接在线升级,执行以下命令即可进行升级。

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

升级成功后,记得执行以下命令删除旧版本 Docke 镜像,以释放磁盘空间。

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

有部分环境的默认 SafeLine 安装路径是在 /data/safeline-ce,安装之后可能会发现需要重新绑定 OTP、配置丢失等情况,可以修改 .env 的 SAFELINE_DIR 变量,指向 /data/safeline-ce

离线镜像
适用于 docker hub 拉取镜像失败的场景,手动更新镜像(具体目录自行修改)。

# cd /path/to/safeline

mv compose.yaml compose.yaml.old
wget "https://waf-ce.chaitin.cn/release/latest/compose.yaml" --no-check-certificate -O compose.yaml

wget "https://waf-ce.chaitin.cn/release/latest/seccomp.json" --no-check-certificate -O seccomp.json

sed -i "s/IMAGE_TAG=.*/IMAGE_TAG=latest/g" ".env"

grep "SAFELINE_DIR" ".env" > /dev/null || echo "SAFELINE_DIR=$(pwd)" >> ".env"
grep "IMAGE_TAG" ".env" > /dev/null || echo "IMAGE_TAG=latest" >> ".env"
grep "MGT_PORT" ".env" > /dev/null || echo "MGT_PORT=9443" >> ".env"
grep "POSTGRES_PASSWORD" ".env" > /dev/null || echo "POSTGRES_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> ".env"
grep "REDIS_PASSWORD" ".env" > /dev/null || echo "REDIS_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> ".env"
grep "SUBNET_PREFIX" ".env" > /dev/null || echo "SUBNET_PREFIX=172.22.222" >> ".env"


#下载 雷池社区版镜像包 并传输到需要安装雷池的服务器上,执行以下命令加载镜像


docker load -i image.tar.gz

# 执行以下命令替换 Docker 容器

docker compose down
docker compose up -d

OK,升级完成,下面继续上一键更新代码

#!/bin/bash
#雷池waf安装目录
DIR=/data/docker/safeline/

echo 备份yaml
mv ${DIR}compose.yaml ${DIR}compose.yaml.old

cp -f compose.yaml ${DIR}

echo 加载镜像
docker load -i image.tar.gz

cd $DIR

echo 添加配置

sed -i "s/IMAGE_TAG=.*/IMAGE_TAG=latest/g" ".env"

grep "SAFELINE_DIR" ".env" > /dev/null || echo "SAFELINE_DIR=$(pwd)" >> ".env"
grep "IMAGE_TAG" ".env" > /dev/null || echo "IMAGE_TAG=latest" >> ".env"
grep "MGT_PORT" ".env" > /dev/null || echo "MGT_PORT=9443" >> ".env"
grep "POSTGRES_PASSWORD" ".env" > /dev/null || echo "POSTGRES_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> ".env"
grep "REDIS_PASSWORD" ".env" > /dev/null || echo "REDIS_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> ".env"
grep "SUBNET_PREFIX" ".env" > /dev/null || echo "SUBNET_PREFIX=172.22.222" >> ".env"

echo 删除旧容器
docker-compose down
echo 启动新容器
docker-compose up -d

echo 更新成功

保存为update.sh 将镜像包、编排脚本、更新脚本,上传到服务器 /data/docker/update 目录下执行
chmod +x update.sh && ./update.sh

六、常见问题

安装遇到的常见问题
目录已存在 如果出现提示目录已存在,则请先删除默认目录

删除雷池默认安装目录

rm -rf /data/safeline

网络错误

查看网络

docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
9184fc154499   bridge        bridge    local
b0f8e15ec2ba   host          host      local
ac895c25e0d8   none          null      local
c6e1fa9cfecc   safeline-ce   bridge    local

删除无效网络

docker network rm c6e1fa9cfecc
官方网站:https://waf-ce.chaitin.cn/docs/

好了,今天就记录到这,有不明白的地方多看几遍

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐