雷池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 ]; then
    echo "Backing up the current compose.yaml"
    cp compose.yaml compose.yaml.bak
else
    echo "compose.yaml not found in /data/safeline!"
    exit 1
fi

# 检查是否已经存在端口映射
if grep -q "5433:5432" compose.yaml; then
    echo "PostgreSQL port mapping already exists."
else
    # 使用 sed 插入 ports 字段到 postgres 服务中
    sed -i '/container_name: safeline-pg/a\    ports:\n      - 5433:5432' compose.yaml
    echo "PostgreSQL port mapping added to 5433:5432."
fi

# 重新启动容器,应用更改
docker compose down --remove-orphans && docker compose up -d

echo "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并上传威胁情报

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

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

相关文章

队列(数据结构)——C语言

目录 1.概念与结构 2.队列的实现 初始化QueueInit 申请新节点BuyNode 入队QueuePush 判断队为空QueueEmpty 出队QueuePop 读取队头数据QueueFront 读取队尾数据QueueBack 元素个数QueueSize 销毁队列QueueDestroy 3.整体代码 (文章中结点和节点是同一个意思) 1.概…

15. 软件接口

文章目录 第15章 软件接口15.1接口的概念多个接口操作、事件和属性接口演进 15.2 设计接口接口的范围交互方式交换数据的表示形式和结构可扩展标记语言(XML)JavaScript 对象表示法(JSON)Protocol Buffers 错误处理 15.3 接口文档…

200元运动蓝牙耳机有哪些?爆款测评PK力荐!

在运动场景下,传统的入耳式和半入耳式耳机虽然占据了大部分市场,但并不适合所有人,尤其是在长时间运动中佩戴时,耳道的压迫感往往会导致不适。而骨传导耳机虽然通过不塞入耳道的方式改善了佩戴舒适度,但在音质方面与入…

[openvino]windows上配置C++openvino后测试代码

测试环境&#xff1a; vs2022 w_openvino_toolkit_windows_2024.3.0.16041.1e3b88e4e3f_x86_64.zip 代码&#xff1a; #include <iostream>#include <openvino/openvino.hpp>int main(int, char**){// -------- Get OpenVINO runtime version --------std::cou…

UG NX12.0建模入门笔记:1.2 鼠标的基本操作

文章目录 前言&#xff1a;鼠标的操作1.鼠标左键&#xff1a;单击—>单选&#xff1b;长按并滑动—>框选。2.鼠标右键&#xff1a;在不同的地方单击弹出不同的菜单。3.鼠标中键&#xff1a;滚动中键—>放大缩小【镜头拉近拉远】。4.鼠标中键&#xff1a;摁住鼠标中键&…

微信小程序考试系统(lw+演示+源码+运行)

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了微信小程序考试系统的开发全过程。通过分析微信小程序考试系统管理的不足&#xff0c;创建了一个计算机管理微信小程序考试系统的方案。文章介绍了微信小程序考…

鸿蒙开发:什么是ArkTS语言

ArkTS(也称为Ark TypeScript)是HarmonyOS的主力应用开发语言。面向万物互联时代&#xff0c;华为提出了“一次开发多端部署、可分可合自由流转、统一生态原生智能”三大应用与服务开发理念。针对多设备、多入口、服务可分可合等特性&#xff0c;华为提供了多种能力协助开发者降…

从0开始Linux(14)——进程(5)进程空间地址(2)

欢迎来到博主的专栏&#xff1a;从0开始linux 博主ID:代码小豪 文章目录 关于页表程序权限加载状态 可执行程序分段 关于页表 在前一篇博客中博主提到&#xff0c;页表是链接虚拟地址(mm_struct)和物理地址&#xff08;存储器&#xff09;的中间商&#xff0c;其主要作用是映射…

Jmeter之GET与POST 请求的参数存放位置

根据不用的请求方式&#xff0c;参数的设置详细如下&#xff0c;二选一&#xff0c;否则报错 POST请求 GET请求

VMware中安装配置Ubuntu(2024最新版 超详细)

目录 一、安装虚拟机软件 二、VMware虚拟机 三、 Ubuntu 下载 &#xff08;1&#xff09;官网下载 &#xff08;2&#xff09;清华镜像网站下载 四、创建虚拟机 五、Ubuntu 系统安装过程的配置 六、更换国内镜像源 七、环境搭建完毕 全篇较长&#xff0c;请慢慢观看 一…

ffmpeg视频滤镜:平均模糊

滤镜简述 avgblur 官网链接> FFmpeg Filters Documentation 平均模糊滤镜会使视频变得模糊&#xff0c;模糊的程度可以通过参数进行控制。 模糊滤镜可以用于保密的场景&#xff0c;视频特效也会用到这个滤镜。 滤镜使用 参数 sizeX <int> .…

AMS1117 -3.3稳压芯片管脚图以及典型电路

AMS1117 是一个输出电流达到 1A 的三端输出低压差线性稳压器。 上面那个头不要接地&#xff0c;接了会有问题。 还有就是AMS1117不只是3.3V稳压的&#xff0c;还有5v的等&#xff0c;自己注意看左下角的数字。 如果是5就是5V&#xff1b;如果是33就是3.3V。 典型应用电路如下…

基于springboot的网上服装商城推荐系统的设计与实现

基于springboot的网上服装商城推荐系统的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xf…

【AI大模型】本地部署 Code Llama 大模型

要在本地部署 Code Llama 大模型并结合 Text Generation Web UI 实现远程运行 LLM&#xff08;大语言模型&#xff09;&#xff0c;你需要完成以下几个步骤&#xff1a; 1. 准备环境 1.1 硬件和软件要求 硬件&#xff1a; GPU&#xff08;如 NVIDIA 及支持 CUDA 的显卡&#…

内衣迷你洗衣机什么牌子好?内衣洗衣机2024年口碑指数排行榜推荐

内衣专用的洗衣机是一种专门设计用于洗涤内衣和贴身衣物的小型洗衣机。相比于普通的大型洗衣机&#xff0c;这样的小型洗衣机在设计和功能上有很大的区别。内衣专用的迷你洗衣机可以有效地保护内衣和贴身衣物的质量和卫生。在传统的洗衣机中&#xff0c;如果经常将内衣裤、袜子…

RabbitMQ 中的交换机学习

RabbitMQ 中的交换机学习 一、直接交换机&#xff08;Direct Exchange&#xff09; 1. 介绍 Direct 交换机将消息路由到绑定了指定 Routing Key 的队列中。每条消息都有一个 Routing Key&#xff0c;当队列绑定到 Direct 交换机时&#xff0c;它需要一个指定的 Routing Key。…

使用Python实现某易云音乐歌曲下载

前言 在这篇文章中,我们将探讨如何通过Python结合JavaScript代码来逆向网易云音乐的API接口,以获取并下载指定歌曲。请注意,本文仅用于技术学习与交流目的,实际使用时请遵守相关法律法规及服务条款。 目标网站 1. 准备工作 首先,我们需要安装一些必要的库: execjs:用…

揭秘灼口综合征:你的舌头痛竟是这些原因在作祟!

在日常生活中&#xff0c;你是否曾遭遇过舌头像被火烧般的灼痛感&#xff1f;这种让人难以忍受的症状&#xff0c;其实是一种名为“灼口综合征”的疾病表现。今天&#xff0c;我们就来深入探讨这一疾病的背后原因&#xff0c;让你了解这一病症的真相&#xff0c;从而更好地应对…

随记:有关idea中jdk版本

第一个地方&#xff1a;这个可能就是你整个项目的jdk版本的使用&#xff0c;你改了这里大概率可以改了 第二个地方&#xff1a; 就是 有关maven项目的 pom文件 一开始我的第一地方用的是 17 但是这里用的是8 但是运行的时候还是 17 这里可能是 maven的 项目这个地方只是对…

Unity导入.FBX模型设置

** Unity导入.FBX模型设置 ** 第一步、导入.fbx模型 Assets- Import New Asset 第二步、设置 Animation Type 为Legacy 这里导入的是非人形模型设置为Lagacy None&#xff1a;不导入动画Animation Clip Legacy&#xff1a;用于早期动画设置&#xff0c;其不支持状态机A…