赞
踩
我们在安装了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 指令集
官方介绍有三种安装方法,分别是在线安装、离线安装、和牧云助手安装
龙哥就喜欢这种方法,用下面一行命令搞定
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"
不过这个方法也有弊端,有些主机网络不好或者就干脆是连不了外网。那就要用到下面两种了
如果你的服务器无法连接互联网环境或连接Docker Hub网络不稳定,可以通过镜像包的安装方式进行安装。以下是安装步骤:
cat image.tar.gz | gzip -d | docker load
mkdir -p safeline # 创建safeline目录
cd safeline # 进入safeline目录
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
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
有兴趣的自己去了解一下吧,这也不过多介绍
浏览器输入: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/
好了,今天就记录到这,有不明白的地方多看几遍
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。