雷池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并上传威胁情报

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenShift 4 - 云原生备份容灾 - Velero 和 OADP 基础篇

《OpenShift 4.x HOL教程汇总》 说明: 本文主要说明能够云原生备份容灾的开源项目 Velero 及其红帽扩展项目 OADP 的概念和架构篇。操作篇见《OpenShift 4 - 使用 OADP 对容器应用进行备份和恢复(附视频) 》 Velero 和 OADP 包含的功能和模…

three.js 毛玻璃着色器的效果

three.js 毛玻璃着色器的效果 在线链接:https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idgroundglass 国内站点预览:http://threehub.cn github地址: https://github.com/z2586300277/three-cesium-examples import…

MySQL基础笔记小结

1. mysql : 1.1启动与停止mysql: net start mysql80 net stop mysel80 1.2客户端连接: 2种,系统cmd与自带的cmd(直接打开) mysql -u root-p 1.2.1 数据存储 RDBMS:关系型数据库:建立在关系模型基础上&…

在海外留学/工作,如何报考微软mos认证?

重点首先得强调的是,即使在海外也可以顺利地在国内获取微软MOS认证! 01 微软mos认证简介 Microsoft Office Specialist 简称MOS。是微软公司和第三方国际认证机构、全球三大IT测验与教学中心之一的思递波/Certiport公司于1997年联合推出的,…

python爬虫,爬取网页壁纸图片

python爬虫实战,爬取网页壁纸图片 使用python爬取壁纸图片,保存到本地。 爬取彼岸图网,网站地址https://pic.netbian.com/ 本人小白,记录一下学习过程。 开始前的准备 安装python环境,略。 python编辑器pycharm2…

ThinkPad T480拆机屏幕改装:便携式显示器DIY指南

ThinkPad T480拆机屏幕改装:便携式显示器DIY指南 本文记录了将旧笔记本电脑 T480 拆机屏幕改装为便携式显示器的全过程。作者在决定升级设备后,选择通过 DIY 方式利用原有的屏幕资源。文章详细介绍了屏幕驱动板的安装、螺丝孔的剪裁、排线连接及固定的步…

[AWS]RDS数据库版本升级

背景:由于AWS上mysql5.7版本不再支持,需要进行版本升级。 吐槽:每年都要来那么几次,真的有病一样,很烦。 步骤一、升级检查 AWS提供了一个python的升级检测脚本,可以按照一下脚本下载测试: [r…

Kibana可视化Dashboard如何基于字段是否包含某关键词进行过滤

kinana是一个功能强大、可对Elasticsearch数据进行可视化的开源工具。 我们在dashboard创建可视化时,有时需要将某个index里数据的某个字段根据是否包含某些特定关键词进行过滤,这个时候就可以用到lens里的filter功能很方便地进行操作。 如上图所示&…

架构师备考-背诵精华(系统架构评估)

系统架构评估是在对架构分析、评估的基础上,对架构策略的选取进行决策。它利用数学或逻辑分析技术,针对系统的一致性、正确性、质量属性、规划结果等不同方面,提供描述性、预测性和指令性的分析结果。 重要概念 敏感点:敏感点是…

docker 下载netcore 镜像

dotnet-docker/README.runtime.md at main dotnet/dotnet-docker GitHub docker pull mcr.microsoft.com/dotnet/runtime:8.0 docker pull mcr.microsoft.com/dotnet/runtime:3.1

二分查找算法 (算法详解+模板+例题)

文章目录 二分查找算法简介1.朴素的二分查找2. 在排序数组中查找元素的第一个和最后一个位置3. 搜索插入位置4. 山脉数组的峰顶索引5.寻找峰值6. 寻找旋转排序数组中的最小值 二分查找算法简介 二分查找算法并不是针对在数组有序的情况下,通过后面的题我们就会知道实际上只要是…

【贝加莱PLC基础教学】2.1 搜索并连接到对应的PLC(1)

【贝加莱PLC基础教学】目录大全_贝加莱plc p23 1361-CSDN博客 PLC其实和单片机差别不大,无非就是大一点的单片机。另外多加了一点点计算机网络和通讯知识,然而就是这一点点计算机网络知识让大家望而却步。 0.基础知识 在计算机网络中,我们通…

【MySQL】索引的机制、使用

在学习索引知识之前,我们可以先了解一下什么是索引。实际上,索引就是数据库中一个或多个列存储的结构,能够支持数据库管理系统在不扫描整张表的情况下也能查询到数据行,能够大大提升查询效率。举个例子,我们想要找到一…

信号与噪声分析——第一节-确定信号的分析

目录 1.确定信号的分析 1.1确定信号的分类: 1.周期信号与非周期信号: 周期信号的定义: 性质: 2.能量信号与功率信号: 定义 区别: 3.基带信号与频带信号: 基带信号的定义: …

【RabbitMQ】RabbitMQ 的七种工作模式介绍

目录 1. Simple(简单模式) 2. Work Queue(工作队列) 3. Publish/Subscribe(发布/订阅) 4. Routing(路由模式) 5. Topics(通配符模式) 6. RPC(RPC通信) 7. Publisher Confirms(发布确认) 上一篇文章中我们简单认识了RabbitM1: 【RabbitMQ】RabbitMQ 的概念以及使用Rabb…

IO编程——消息队列

题目&#xff1a; 代码实现&#xff1a; #include <myhead.h> //正文大小 #define MSGSZ (sizeof(struct msgbuf)-sizeof(long)) //定义要发送的消息类型 struct msgbuf{long msgtype; //消息类型char mtext[1024]; //消息正文 };int main(int argc, const char *ar…

linux下建立软链接

深度学习训练中经常会遇到数据量庞大或者工程中模型报错太多导致磁盘空间不够&#xff0c;但是又不想修改原来在代码中写的路径&#xff0c;这个时候制作软连接很有作用&#xff0c;把占用量大的目录移到别的空闲磁盘&#xff0c;然后在原来的目录做一个软连接指向那个移到的空…

k8s ETCD数据备份与恢复

在 Kubernetes 集群中&#xff0c;etcd 是一个分布式键值存储&#xff0c;它保存着整个集群的状态&#xff0c;包括节点、Pod、ConfigMap、Secrets 等关键信息。因此&#xff0c;定期对 etcd 进行备份是非常重要的&#xff0c;特别是在集群发生故障或需要恢复数据的情况下。本文…

Java--集合(三)之vectorlinkedlisthashset结构

文章目录 0.架构图1.vector解析2.LinkedList分析2.1源码分析2.2迭代器遍历的三种方式 3.set接口的使用方法3.1基本使用说明3.2基本遍历方式3.3HashSet引入3.4数组链表模拟3.5hashset扩容机制3.6hashset源码解读3.7扩容*转成红黑树机制**我的理解 0.架构图 1.vector解析 和之前介…

【Vue】Vue3.0(十四)接口,泛型和自定义类型的概念及使用

上篇文章&#xff1a; 【Vue】Vue3.0&#xff08;十三&#xff09;中标签属性ref&#xff08;加在普通标签上、加在组件标签上&#xff09;、局部样式 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&…