玩转系统|长亭雷池WAF详细使用教程——深入了解

目录

配置防护站点

界面操作​

如何配置域名、端口、上游服务器​

工作原理​

在单独设备上部署雷池(推荐)​

直接在网站服务器上部署雷池​

和其他反代设备一起部署的情况​

配置后网站无法访问,如何排查​

测试防护效果

确认网站可以正常访问​

尝试手动模拟攻击​

自动化测试防护效果​

下载测试工具​

准备测试样本​

开始测试​

测试效果展示​

升级雷池

在线升级​

离线镜像​


上节我们降了WAF的注册和登录,现在我们继续深入了解。

配置防护站点

界面操作​

config_site.gif

添加后,在客户端执行 curl -H "Host: <域名>" http://<雷池 IP>:<雷池监听端口> ,若能获取到业务网站的响应,并且站点上 “今日访问量” 增加,则代表配置成功。

如何配置域名、端口、上游服务器​

工作原理​

雷池社区版主要以 反向代理 的方式工作,类似于一台 nginx 服务。部署时,需要让网站流量先抵达雷池,经过雷池检测和过滤后,再转给原来的网站业务。

如果你不了解反向代理的工作原理,可以通过以下几种雷池常见的工作场景,来了解如何配置站点。

假设你的网站域名为 example.com,如图:

Alt text

在单独设备上部署雷池(推荐)​

如果你可以提供一台独立设备部署雷池,那么你需要:

  1. 将网站流量指向雷池。例如将域名解析到雷池
  2. 禁止网站服务器上,所有除了雷池之外的访问。例如配置防火墙,或者直接把网站服务器放到内网

效果大致如下:

Alt text

雷池上相应的站点配置为:

  • 域名:公网域名 example.com
  • 端口:80 或 443/ssl
  • 上游服务器:网站服务器的地址 http://192.168.10.10

直接在网站服务器上部署雷池​

提示:不建议这样部署,因为这样单机的负载更高、设备宕机的概率更大。非纯净的环境还会提高安装失败的概率,故障排查也会比较困难。

如果能接受这些风险,雷池也可以直接部署在网站服务器上。你需要:

  1. 将原本监听 80 或 443/ssl 端口的网站服务改到其他端口,让雷池监听设备的 80 或 443/ssl 端口
  2. 使网站服务仅允许本机访问。例如配置系统防火墙、Iptables

效果大致如图:

Alt text

此时雷池上的站点配置为:

  • 域名:公网域名 example.com
  • 端口:80 或 443/ssl
  • 上游服务器:http://127.0.0.1:<网站服务改后的端口>

和其他反代设备一起部署的情况​

雷池作为反代设备,可以在任意位置接入主链路。只要将接入位置的流量指向雷池,并在雷池的 “上游服务器” 处填写请求的下一跳服务器地址即可。例如:

Alt text

配置后网站无法访问,如何排查​

如果按照上文指引部署雷池、配置了站点,但网站仍无法访问,建议按照以下步骤排查:

  1. 明确 “网站无法访问” 的具体表现:

    • 如果 502 Bad Gateway tengine

      Alt text

      大概率是是雷池的上游服务器配置不正确,或者雷池无法访问到上游服务器。请继续按下面步骤排查,重点排查步骤 6、7

    • 如果请求能够返回但是十分缓慢

      • 首先确认服务器负载是否正常
      • 在客户端执行命令,检查雷池服务器与上游服务器的网络:curl -H "Host: <SafeLine-IP>" -vv -o /dev/null -s -w 'time_namelookup: %{time_namelookup}\ntime_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n' http://<上游服务器地址>
        • 如果 time_namelookup 时间过大,请检查 dns server 配置
        • 如果 time_connect 时间过大,请检查雷池与上游服务器之间的网络状态
        • 如果 time_starttransfer 时间过大,请检查上游服务器状态,是否出现资源过载情况
    • 如果不是以上情况,继续下一步

  2. 在客户端执行 curl -H "Host: <域名>" http://<雷池 IP>:<雷池监听端口> 。正常情况下,应能获取到业务网站的响应,并且站点的 “今日访问量” +1

    • 如果浏览器无法访问,但这一步正常获取到响应,大概率是因为:
      • 测试过程中,网站域名还没有切到雷池,浏览器测试时访问的是 http(s)://<雷池 IP>,恰好业务服务上有 Host 验证,所以拒绝了该请求。这种情况需要修改本机 host,把域名解析到雷池 IP,再访问 http(s)://<域名>,才能准确测试
      • 网站业务做了其他一些特殊处理。例如访问后 301 跳转到了其他地址,需要具体排查网站业务的响应内容
    • 如果不能获取到响应,继续下一步
  3. 在雷池设备上执行 curl -H "Host: <域名>" http://<雷池 IP>:<雷池监听端口>。正常情况下,应能获取到业务网站的响应,并且站点上 “今日访问量” +1

    • 如果步骤 2 失败而这里成功,说明客户端到雷池之间的网络存在问题。请排查网络,保证客户端可访问到雷池
    • 如果不能获取到响应,继续下一步
  4. 在雷池设备上执行 curl -H "Host: <域名>" http://127.0.0.1:<雷池监听端口>。正常情况下,应能获取到业务网站的响应,并且站点的 “今日访问量” +1

    • 如果步骤 3 失败而这里成功,且 telnet <雷池 IP> <雷池监听端口> 返回 Unable to connect to remote host: Connection refused,大概率是被雷池设备上的防火墙拦截了。可能是操作系统本身的防火墙,还有可能是云服务商的防火墙。请根据实际情况逐项排查,开放雷池监听端口的访问
    • 如果不能获取到响应,继续下一步
  5. 在雷池设备上执行 netstat -anp | grep <雷池监听端口> 确认端口监听情况。正常情况下,应该有一个 nginx 进程监听在 0.0.0.0:<雷池监听端口>。没有的话请通过社群或者 Github issue 提交反馈,附上排查过程。有的话继续下一步

  6. 在雷池设备上 curl -H "Host: <域名>" <上游服务器地址>。正常情况下,应能获取到业务网站的响应

    • 如果步骤 4 失败而这里成功,请通过社群或者 Github issue 提交反馈,附上排查过程
    • 如果这步失败,说明雷池和上游服务器之间的网络存在问题。请排查网络,确保雷池可以访问到上游服务器

测试防护效果

确认网站可以正常访问​

根据雷池 WAF 配置的网站参数访问你的网站。

打开浏览器访问 http://<IP或域名>:<端口>/

网站协议默认是 http,勾选 ssl 则为 https
主机名可以是雷池的 IP,也可以是网站的域名(确保域名已经解析到雷池)
端口是你在雷池页面中配置的网站端口

若网站访问不正常,请参考 网站无法访问。

尝试手动模拟攻击​

打开浏览器,访问以下地址即可模拟出对应的攻击:

  • 模拟 SQL 注入,请访问 http://<IP或域名>:<端口>/?id=1%20AND%201=1
  • 模拟 XSS,请访问 http://<IP或域名>:<端口>/?html=<script>alert(1)</script>

通过浏览器,你将会看到雷池已经发现并阻断了攻击请求。

若请求没有被阻断,请参考 防护不生效

自动化测试防护效果​

两条请求当然无法完整的测试雷池的防护效果,可以使用 blazehttp 自动化工具进行批量测试

下载测试工具​
  • Windows 版本
  • Mac 版本(x64)
  • Mac 版本(M1)
  • Linux 版本(x64)
  • Linux 版本(ARM)
  • 源码仓库
准备测试样本​
  • 测试样本

下载请求样本后解压到 testcases 目录

开始测试​
  1. 将测试工具 blazehttp 和测试样本 testcases 放在同一个目录下
  2. 进入对应的目录
  3. 使用以下请求开始测试
./blazehttp -t http://<IP或域名>:<端口>

测试效果展示​
# 测试请求
.//blazehttp -t http://127.0.0.1:8008
sending 100% |█████████████████████████████████████████████████████████| (33669/33669, 940 it/s) [35s:0s]
总样本数量: 33669    成功: 33669    错误: 0
检出率: 71.65% (恶意样本总数: 575 , 正确拦截: 412 , 漏报放行: 163)
误报率: 0.07% (正常样本总数: 33094 , 正确放行: 33071 , 误报拦截: 23)
准确率: 99.45% (正确拦截 + 正确放行)/样本总数
平均耗时: 1.00毫秒

升级雷池

注意: 升级雷池时服务会重启,流量会中断一小段时间,根据业务情况选择合适的时间来执行升级操作。

在线升级​

执行以下命令即可进行升级。

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,你已经完成了升级

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/172870.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5-4计算一串字符的空格数字字符其他

#include<stdio.h> int main(){char c;int space0;//空格int letters0;//英文字母int numbers0;//数字int others0;//其他字符printf("请输入一行字符&#xff1a;");while((cgetchar())!\n)//获取字符的内容&#xff0c;到\n停止{if(c>a&&c<z|…

BGP笔记

自治系统----AS AS划分的原因&#xff1a;如果网络太大&#xff0c;路由数量进一步增加&#xff0c;路由表规模变得太大&#xff0c;会导致路由收敛速度变慢&#xff0c;设备性能消耗加大&#xff0c;且全网设备对于路由信息的认知不同&#xff0c;造成流量通讯障碍 AS号&…

智能时代的智能工具(gpt)国产化助手

目前gpt对代码以及其他领域都是可以支持&#xff0c;在国内有很多&#xff0c;常用的百度的 文心一言 &#xff0c;阿里的 通义千问 &#xff0c;还有&#xff08;“豆包”&#xff0c;“”讯飞星火“”&#xff09;等&#xff0c;除了写代码可以外&#xff0c;也可以很好的支持…

java.lang.UnsupportedOperationException 关于Arrays.asList问题解决

解析String 字符串为List集合ArrayList<String> itemsList Arrays.asList(items.split("\\|")List<String> itemsList Arrays.asList(items.split("\\|")final Iterator<String> iterator itemsList.iterator();while (iterator.hasNex…

torch.cat是什么,以及怎么用?

文章目录 一、torch.cat 是什么&#xff1f;二、使用步骤总结 一、torch.cat 是什么&#xff1f; torch.cat 是 PyTorch 中的一个函数&#xff0c;用于沿着某个维度连接张量。 torch.cat 接受一个张量列表&#xff0c;并沿着某个维度连接它们。这个函数会返回一个新的张量&am…

STC单片机选择外部晶振烧录程序无法切换回内部晶振导致单片机不能使用

STC单片机选择外部晶振烧录程序无法切换回内部晶振导致单片机不能使用 1.概述 在学习51单片机过程中&#xff0c;选择了STC的12C2052AD型号单片机作为入门芯片。前几个课题实验使用默认的内部晶振烧录程序&#xff0c;运行都没有问题。 选择一个LED亮度渐变的课题做实验&…

哪个才是最适合你的 Web UI 自动化测试框架

最近&#xff0c;项目上出于系统性稳定性、减少测试工作量考虑&#xff0c;打算在 Web 前端引入 BDD。由于上一个项目写了一定的 Cucumber 代码&#xff08;BDD 测试框架之一&#xff09;&#xff0c;这个框架选型的责任便落到了我的肩膀上了。 在我们进行框架选型的时候&#…

5.2 Windows驱动开发:内核取KERNEL模块基址

模块是程序加载时被动态装载的&#xff0c;模块在装载后其存在于内存中同样存在一个内存基址&#xff0c;当我们需要操作这个模块时&#xff0c;通常第一步就是要得到该模块的内存基址&#xff0c;模块分为用户模块和内核模块&#xff0c;这里的用户模块指的是应用层进程运行后…

UE4基础篇十七:分析性能

一、性能瓶颈定位 原文地址:小能猫吃牙膏:UE4 性能 - (一)瓶颈定位 P.S. 对于某个具体问题,我个人偏向于遵循 WHY → WHAT → HOW 的思考方法(重要性逐级递减) 加以理解。因为如果找不到做某件事情的意义(WHY)所在,或是对这件事情本身的定义(WHAT)都模棱两可,那么即便经…

一文读懂 Linux 网络 IO 模型

文章目录 1.从一个问题说起2.多进程模型3.多线程模型4.I/O 多路复用5.select、poll、epoll 的区别&#xff1f;5.1 select5.2 poll5.3 epoll5.4 两种事件触发模式 参考文献 1.从一个问题说起 互联网发展历史上&#xff0c;曾经有一个著名的问题&#xff1a;C10K 问题。 C 是 …

el-form动态表单动态验证(先验证不为空,再验证长度在20以内,最后向后台发送请求验证账号是否重复)

data(){var checkSno (rule, value, callback) > {if (!value) {callback(new Error("请输入账号"));} else if (value.length > 20) {callback(new Error("长度为1-20"));} else {if (this.form.id) {// 修改时检查账号是否重复selectLoginId({ sn…

Python Opencv实践 - 二维码和条形码识别

使用pyzbar模块来识别二维码和条形码。ZBar是一个开源软件&#xff0c;用来从图像中读取条形码&#xff0c;支持多种编码,比如EAN-13/UPC-A、UPC-E、EAN-8、代码128、代码39、交错2/5以及二维码。 pyzbar是python封装ZBar的模块&#xff0c;我们用它来做条形码和二维码的识别。…

2021年03月 Scratch(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 小猫在沙漠中旅行好不容易找到了一杯水,初始位置如下图所示,下面哪个程序可以帮助它成功喝到水? A: B: C: D:

观光奶牛 (01分数规划、负环)

01分数规划问题&#xff1a;类似于观光奶牛这个题中的&#xff0c;求的路径上的点权值和与边权值和的商最大最小。 当前问题的推到如下&#xff1a; 该问题其实可以用二分图来解决&#xff0c; 在不断的二分答案中获取符合条件的最大值。然后问题就转化为如何是否存在和为mid的…

linux之chmod命令

在linux系统中经常遇到需要对文件修改读写执行的权限&#xff0c;下面对chomod命令进行梳理总结。 1、文件权限 在linux系统中&#xff0c;每个文件都有归属的所有者和所有组&#xff0c;并且规定了文件的所有者、以及其他人对文件所拥有的可读&#xff08;r&#xff09;、可写…

线程(线程基本概念、java实现多线程、使用多线程、线程的生命周期、线程同步、线程死锁)

&#xff08;一&#xff09;线程基本概念 一、 程序, 进程, 线程的概念 程序: 使用某种语言编写一组指令(代码)的集合,静态的 进程: 运行的程序,表示程序一次完整的执行, 当程序运行完成, 进程也就结束了 个人电脑: CPU 单个, 双核, CPU的时间分片, 抢占式 每个独立执行的程…

整套数字化招采平台安全防御体系

招采平台作为数字化供应链的重要组成部分&#xff0c;需要确保招标采购过程的安全性,主体信息和交易数据信息尤为重要,通过必要的安全架构、技术和安全管理制度&#xff0c;做到事前防范、事中监管和事后审计的安全防御。 一、平台技术安全架构 1、先进的技术架构&#xff0c…

算法设计与分析复习--回溯(一)

文章目录 上一篇回溯法性质子集和问题装载问题下一篇 上一篇 算法设计与分析复习–贪心&#xff08;二&#xff09; 回溯法性质 类似穷举的搜索尝试过程&#xff0c;在搜索尝试过程中寻找问题的解&#xff0c;组织得井井有条&#xff08;避免遗漏&#xff09;&#xff0c; 高…

KNN(k近邻法)算法理论和实战

KNN概念 k近邻法&#xff08;k-nearest neighbor&#xff0c;k-NN&#xff09;是一种基本分类与回归方法。 k近邻法的输入为实例的特征向量对应于特征空间的点&#xff1b;输出为实例的类别&#xff0c;可以取多类。 k近邻法假设给定一个训练数据集&#xff0c;其中的实例类…