当前位置: 首页 > news >正文

雷池WAF自动化实现安全运营实操案例终极篇

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。

背景 作为一个小型网站的站长,往往面临资源有限(没有RMB)、人手不足的情况(没人就自己),基本都是1个人负责运营一个或多个网站。

为了提升运维效率及网站的安全性,我们需要解决以下问题:

避免频繁的切换安全系统查看日志 避免人工封禁IP的傻瓜式操作 将供给详情及告警处置及时通知给网站管理者 减少因网络安全产生的运维问题 本文主要介绍雷池WAF、钉钉联动的场景,但是实际情况下,可能会产生更多的联动效果,比如:雷池自动化拦截通知告警、蜜罐捕获告警通知等。

前言 在上一期雷池WAF自动化安全运营实操案例中,我们通过日志文本的方式记录WAF告警,并结合inotify-tools监控日志文件的变化来触发钉钉告警通知。然而,这种方法可能会引发一些问题,例如日志提取异常、日志内容截断等。此外,我更希望直接获取完整的攻击payload,以便复现攻击并验证其是否成功。

雷池WAF还提供了频率限制的黑名单功能,例如通过限制频繁访问或攻击来封禁IP。为了提高运营效率,我希望能够通过钉钉、飞书等工具实时获取封禁IP的通知,而不是手动登录WEB页面查看。

上篇实操案例中,我们使用了多个shell脚本,流程略显繁琐。因此,我开发了一套自动化程序,直接从雷池WAF数据库提取数据,不再依赖日志存储。同时,该程序能够自动推送攻击告警和频繁限制的黑名单告警,简化了整个安全运营过程。

软件介绍

雷池社区版 雷池(SafeLine)是长亭科技耗时近 10 年倾情打造的WAF,核心检测能力由智能语义分析算法驱动,目前分为社区版、专业版和企业版。

SafeLine_Push 雷池WAF推送小助手,可以自动化实现WAF告警日志推送、频繁限制告警IP推送(相当于解开了付费版的部分封印)

预计实现效果 原本的效果 image.png

想要实现的效果 image.png

要想能够实现将完整的请求包截取到的情况,那么就需要对WAF数据库的另外一个表下手,这个表为PUBLIC.MGT_DETECT_LOG_DETAIL

原本我只是对PUBLIC.MGT_DETECT_LOG_BASIC这个表进行查询操作,上篇中已经提到了,此时有2个方法,一种为在原有数据库中进行查询,或者是将数据库的这两个表进行迁移,迁移到新的数据库中来进行操作。

雷池WAF中频繁限制的告警效果预计如下:

image.png

前置工作 映射雷池WAF数据库端口

#!/bin/bash# 运行安装/更新脚本
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/upgrade.sh)"# 进入 /data/safeline 目录
cd /data/safeline || { echo "/data/safeline not found!"; exit 1; }# 检查 compose.yaml 是否存在并备份
if [ -f compose.yaml ]; thenecho "Backing up the current compose.yaml"cp compose.yaml compose.yaml.bak
elseecho "compose.yaml not found in /data/safeline!"exit 1
fi# 检查是否已经存在端口映射
if grep -q "5433:5432" compose.yaml; thenecho "PostgreSQL port mapping already exists."
else# 使用 sed 插入 ports 字段到 postgres 服务中sed -i '/container_name: safeline-pg/a\    ports:\n      - 5433:5432' compose.yamlecho "PostgreSQL port mapping added to 5433:5432."
fi# 重新启动容器,应用更改
docker compose down --remove-orphans && docker compose up -decho "Containers restarted with the updated compose.yaml"

这个脚本适用于每次更新时,重新映射数据库端口,如果已经最新版,可以注释掉更新脚本命令。

配置数据库配置文件 通过cat /data/safeline/.env | grep POSTGRES_PASSWORD | tail -n 1 | awk -F ‘=’ ‘{print $2}‘查看数据库密码

然后在/var/scripts/.pgpass中写入如下代码,然后给这个文件添加600的权限。

localhost:5433:safeline-ce:safeline-ce:abcd #把abcd替换成第2步中获取到的密码

消息推送配置 从GitHub中下载文件

git clone https://github.com/Fiary-Tale/SafeLine_Push

从上述下载的为源代码及已编译的版本(存放于mark文件夹中)。

配置文件 VulConfig.json 该配置文件映射了雷池WAF数据库中部分字段数据,用于告警推送中的触发规则,这个配置文件可按照需求自行填写,目前并未完全覆盖全部触发规则(本人在数据库中没有找到与之相对应的中文触发规则)

注意:这个文件一定要放入到/var/scripts/VulConfig.json

{ “replacements”: { “m_sqli”: “SQL注入”, “m_xss”: “跨站脚本攻击”, “m_csrf”: “跨站请求伪造”, “m_cmd_injection”: “命令执行” } } config.yaml 该配置文件为消息推送时使用的token及推送方法,目前只编写了钉钉和Server酱,其他可自行补充!

注意:这个文件一定要放入到/var/scripts/config.yaml

token: “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx” method: “dingtalk” # 可以是 “dingtalk” 或 “serverchan”

GeoLite2-City.mmdb 该文件非配置文件,为开源的Geo数据库,但为必须文件,这个文件用于查询IP的归属地,某些方面无法与雷池WAF数据库自身的归属地相比,但查询数据库中的归属地有些繁琐,因此采用Geo查询归属地。

注意:归属地GeoLite2-City.mmdb文件一定要与程序在同一目录

注意:在钉钉推送的安全设置中,我设置的是自定义关键词:入侵检测事件

build.bat 我是于Windows的环境中开发的,因此我编写了一个bat文件,如果有需要大家可以自行编译,记得安装golang开发环境哟!

目前已实现效果 攻击告警推送 image.png

频繁限制处理推送

image.png

设置开机自启动 在/etc/rc.local中追加nohup /var/scripts/SafeLine_Push_linux_amd64 > /dev/null 2>&1 &

后记 在测试中发现,频繁的告警有些烦人,比如:我为了产生短时间内同一IP大量攻击,进入频繁限制的封禁告警推送,开始频繁攻击后,收到了大量的攻击告警推送以及其他一些问题待修复!

互相探讨及待修复 短时间大量的攻击,告警推送如何处理? IP归属地的优化 频繁告警推送中触发规则及拦截结果优化 自动化保留频繁攻击的IP并上传威胁情报

相关文章:

雷池WAF自动化实现安全运营实操案例终极篇

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...

微信小程序实现canvas电子签名

一、先看效果 小程序canvas电子签名 二、文档 微信小程序canvas 组件文档 微信小程序canvas API文档 H5Canvas文档 三、分析 1、初始话Canvas容器 2、Canvas触摸事件,bindtouchstart(手指触摸动作开始)、bindtouchmove(手指触摸…...

【SpringCloud】Seata微服务事务

Seata微服务事务 分布式事务问题:本地事务分布式事务演示分布式事务问题:示例1 分布式事务理论CAP定理一致性可用性分区容错矛盾 Base理论解决分布式事务的思路 初识SeataSeata的架构部署TC服务微服务集成Seata引入依赖配置TC地址 其他服务 动手实践XA模…...

重新阅读《马说》,感悟“伯乐相马”背后的被选择与选择的大智慧

“初闻不识曲中意,再听已是曲终人”。世有伯乐,然后有千里马。千里马常有,而伯乐不常有。无论你是考研考公等考试大军中的一员,还是已步入社会的打工人或者领导,当你面临被人选择或者选择人时,皆可从《马说…...

深入拆解TomcatJetty(三)

深入拆解Tomcat&Jetty(三) 专栏地址:https://time.geekbang.org/column/intro/100027701 1 Tomcat组件生命周期 Tomcat如何如何实现一键式启停 Tomcat 架构图和请求处理流程如图所示: 对组件之间的关系进行分析,…...

MySQL 实现简单的性能优化

一:硬件优化 更高的网络带宽:在处理大规模的远程请求时可以提高MySQL服务器的响应速度; 更大的内存空间:有助于缓存更多的数据库数据,减少磁盘I/O操作,提高整体性能; 换用企业级SSD&#xff1…...

AB包资源管理器

简介 ABMgr(Asset Bundle Manager)类是一个用于管理 Unity 中 AssetBundle 资源加载的管理器。它通过字典缓存和管理加载的 AB 包,同时支持同步和异步加载。还包含了卸载和清理 AB 包的方法。 功能解析: 主包加载与依赖管理&…...

Centos7源报错问题

原因:是因为centos7在024年6月份停止维护,导致默认镜像不能使用,更改镜像即可mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/…...

Openlayers高级交互(2/20):清除所有图层的有效方法

Openlayers项目中,经常会放置很多的图层,在业务操作的时候,会做出删除所有图层的行为。这里面给出了一个详细的方法,能够有效的解决 清除所有图层的问题。 效果图 专栏名称内容介绍Openlayers基础实战 (72篇&#xff…...

黑马JavaWeb-day02

什么是JavaScript? JavaScript:简称Js,是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能使网页可交互 JavaScript和Java是完全不同的语言,无论是概念还是设计。但是基础语法类似。 JavaScript JavaScript引入方式…...

laravel清除不同缓存

1、清除应用程序缓存: php artisan cache:clear2、清除路由缓存: php artisan route:cache3、清除配置缓存: php artisan config:cache4、清除编译后的视图文件: php artisan view:clear5、清除事件和监听器缓存: ph…...

【Git】解决分支冲突、分支合并、版本回退、版本管理

解决本地冲突 1. 合并分支 假设你正在 main 分支上,想要合并 feature 分支。 git checkout main git merge feature如果两个分支都对同一文件做了不同的修改,Git 会提示你有冲突,并显示冲突文件。 2. 查看冲突文件 使用以下命令查看冲突…...

linux file结构体与inode结构体

在 Linux 系统中,inode 结构体和 file 结构体都是与文件系统相关的重要数据结构。它们各自承担着不同的角色,帮助操作系统管理文件和目录。以下是它们的异同点: inode 结构体 1.定义:inode(索引节点)是文件…...

探索迷宫的奥秘:用 C++ 打造你的迷宫游戏之旅!

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

JSON 注入攻击 API

文章目录 JSON 注入攻击 API"注入所有东西"是"聪明的"发生了什么? 什么是 JSON 注入?为什么解析器是问题所在解析不一致 JSON 解析器互操作性中的安全问题处理重复密钥的方式不一致按键碰撞响应不一致JSON 序列化(反序列化)中的不一致 好的。JSON 解析器…...

MyBatis入门程序之客户添加、更新与删除

【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》-CSDN博客 《SpringSpring MVCMyBatis从零开始学 视频教学版 第3版整合开发实战快速开发与项目实战框架技术精讲与整合案例 计算机与互联网 编程语言与程序…...

查缺补漏----数据结构树高总结

① 对于平衡二叉树而言,树高的规律: 高度为h的平衡二叉树的含有的最少结点数(所有非叶节点的平衡因子均为1): n01,n11,n22 含有的最多结点数: (高度为h的满二叉树含有的结点数) ②…...

jenkins添加新服务

jenkins添加新服务 新建item 添加流水线 node{def envname "ENVIRONMENT:1234-dev"def projectGitUrl http://xxxxx/xxxxxx/12345.gitdef imageServer harbor.xxxxx.com //镜像仓库地址def projectAppName 12345-applicationdef projectGitBranch dev//git分…...

网络连接设备的功能与应用概述

目录 一、集线器 二、交换机 三、网桥 四、路由器 五、集线器、交换机、网桥与路由器的比较 备注 一、集线器 定义: 集线器(Hub)是一种物理层设备,它提供多个端口,用于将多个计算机或其他网络设备连接在一起&am…...

【SpringCloud】04-Gateway网关登录校验

1. 网关请求处理流程 2. 网关过滤器 3. 网关实现登录校验 Component // 参数构造器 RequiredArgsConstructor public class AuthGlobalFilter implements GlobalFilter, Ordered {private final AuthProperties authProperties;private final JwtTool jwtTool;private final A…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

测试markdown--肇兴

day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...