利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP

admin 2025年3月18日19:51:24评论13 views字数 3457阅读11分31秒阅读模式
                                    01
前言
    官方网站:https://n8n.io/
    github下载地址:https://github.com/n8n-io/n8n
    n8n 是一个开源的自动化工具,用于连接不同的应用程序和服务,实现工作流自动化。
    n8n提供了大量的模板以供使用,其中有专门负责安全运营的模块SecOps,也有负责其他版块的,n8n并不是专属的安全工具,而是一个自动化流程工具。
    虽然在某些方面不如一些专业的SOAR产品,但是它的丝滑程度,产品质量,界面简洁程度都是相对优秀的,Bug相对于别的产品来说较少,产品的资源开销也不高。
利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP
我们可以通过github地址上提供的Docker教程快速搭建n8n,这篇文章只讨论如何联动cloudflare,不考虑其他的场景。
                                    02
利用过程
1、创建第一个节点Schedule Trigger,这是一个计划任务的start Node,n8n支持很多Trigger
利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP
2、创建一个Date&Time Node,这是一个生成时间相关的节点
利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP
3、GetTime,生成cloudflare要的时间格式
// 获取当前时间和6小时前的UTC时间const now = new Date();const sixHoursAgo = new Date(now.getTime() - 6 * 60 * 60 * 1000); // 当前时间减去6小时//const sixHoursAgo = new Date(now.getTime() - 12 * 60 * 60 * 1000); // 当前时间减去6小时// 格式化函数const formatUTCTime = (date) => {  const year = date.getUTCFullYear();  const month = String(date.getUTCMonth() + 1).padStart(2'0');  const day = String(date.getUTCDate()).padStart(2'0');  const hours = String(date.getUTCHours()).padStart(2'0');  const minutes = String(date.getUTCMinutes()).padStart(2'0');  const seconds = String(date.getUTCSeconds()).padStart(2'0');  return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}Z`;};// 生成时间范围const datetime_leq = formatUTCTime(now);     // 当前时间(作为结束时间)const datetime_geq = formatUTCTime(sixHoursAgo); // 6小时前(作为开始时间)// 遍历所有条目并添加字段for (const item of $input.all()) {  item.json.datetime_geq = datetime_geq;  item.json.datetime_leq = datetime_leq;}return $input.all();
利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP
4、构建HTTP节点,这里我要使用的是Cloudflare付费版的功能
面板——安全性——分析——攻击可能性——筛选攻击IP,大致请求如下所示
https://api.cloudflare.com/client/v4/graphql
{"operationName":"GetSecuritySampledLogs","variables":{"zoneTag":"xxxx9e4c7b4d06780fa34c744956xxxx","accountTag":"xxxx516d1d6a7456546b8ce85368xxxx","filter":{"AND":[{"datetime_geq":"2025-03-16T14:14:38Z","datetime_leq":"2025-03-17T02:14:38Z","requestSource":"eyeball"},{"wafAttackScoreClass":"attack"}]}},"query":"query GetSecuritySampledLogs {n  viewer {n    scope: zones(filter: {zoneTag: $zoneTag}) {n      logs: httpRequestsAdaptive(filter: $filter, limit: 100, orderBy: ["datetime_DESC"]) {n        leakedCredentialCheckResultn        cacheStatusn        clientASNDescriptionn        clientAsnn        clientCountryNamen        clientIPn        clientRequestHTTPHostn        clientRequestHTTPMethodNamen        clientRequestHTTPProtocoln        clientRequestPathn        clientRequestSchemen        userAgentn        securityActionn        securitySourcen        datetimen        rayNamen        clientRequestReferern        clientRequestQueryn        contentScanNumMaliciousObjn        contentScanNumObjn        edgeResponseContentTypeNamen        edgeResponseStatusn        xRequestedWithn        originResponseStatusn        wafAttackScoreClassn        __typenamen      }n      __typenamen    }n    __typenamen  }n}n"}
利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP
利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP
然后填入cloudflare节点当中,这里时间作为变量填充
利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP
5、时间waitfor节点,这里是为了防止频率异常
利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP
6、过滤IP出现的次数,这里我设置为5次,根据企业规模自定义即可
// 提取所有 clientIPconst logs = $input.all()[0].json.data.viewer.scope[0].logs;const ipCounts = {};// 统计 IP 出现次数logs.forEach(log => {  const ip = log.clientIP;  ipCounts[ip] = (ipCounts[ip] || 0) + 1;});// 过滤次数 >10 的 IPconst frequentIPs = Object.entries(ipCounts)  .filter(([ip, count]) => count > 5)  .map(([ip, count]) => ({ ip, count }));// 返回结果(符合 n8n 输出格式)return frequentIPs.map(ipInfo => ({  json: ipInfo}));
利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP
7、设置封禁IP节点,这里我请求的是地址簿,对应的位置为cloudflare——安全性——WAF——自定义规则——denyipList——编辑——管理列表——编辑地址簿
https://api.cloudflare.com/client/v4/accounts/xxxx516d1d6axxxx546b8ce85368xxxx/rules/lists/xxxx2d4f1fd148xxxxae72c6ccd1xxxx/items
[  {    "ip": "1.2.3.4",    "comment": ""  }]
在Post字段设置表达式即可
利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP
8、接着构建钉钉webhook告警,这里不再说明,主要的流程如下。
就完成了一个简单的自动封禁IP的SOAR,当然根据企业规模大小可以有更多调整。
利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP

原文始发于微信公众号(Ice ThirdSpace):利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IP

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月18日19:51:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用n8n构造安全自动化流程SOAR联动cloudflare自动封禁IPhttps://cn-sec.com/archives/3854131.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息