ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Krawl封禁名单联邦实战:一个配置项接入社区级威胁情报网络

Krawl封禁名单联邦实战:一个配置项接入社区级威胁情报网络

【免费下载链接】Krawl

Krawl is a customizable, lightweight, cloud-native web deception server and anti-crawler that creates fake web applications with low-hanging vulnerabilities using realistic, randomly generated decoy data and AI-generated HTML templates.

项目地址:https://gitcode.com/gh_mirrors/kr/Krawl
点击查看免费下载

🕸️ 单机蜜罐有一个天然短板:你的 Krawl 只见过打自己家门的攻击者,别人的战场上抓到的 IP 你却一无所知。Krawl 内置的封禁名单联邦(Banlist Federation)机制,让你只用3 行配置项就能接入社区级威胁情报网络——把其他 Krawl 实例(以及任何纯文本 IP 列表)中确认的攻击者 IP 拉进本地,与自己的封禁决策合并,实现"一处中招,全网拉黑"。本文带你从原理到落地,完整走通这套联邦实战流程。

为什么单机蜜罐需要威胁情报联邦?

Krawl 是一款云原生的 Web 欺骗服务器与反爬虫蜜罐,它会伪装出带"低垂果实"漏洞的假站点,诱捕 SQL 注入、路径穿越等攻击,并把攻击者 IP 记入封禁名单。但蜜罐的样本永远是孤立的:

  • 你的实例只记录访问你这个站点的攻击者;
  • 同一个攻击者可能正在扫全网的其他 Krawl 实例;
  • 各实例之间默认互不相通,情报白白浪费。

Krawl 的解决方案很简单:每个实例都可以对外发布自己的封禁名单,也可以订阅其他实例发布的名单。发布与订阅都只是普通的config.yaml配置项,没有额外服务、没有数据库同步,纯文本 HTTP 接口即可打通。

联邦原理:发布 + 订阅两个方向

联邦机制由两组配置驱动,核心代码位于 src/banlist_sync.py:

方向配置项作用
📤 发布banlist.export_path在本实例暴露一个免认证的下载路径,其他实例(或任何人)都能拉取你的封禁名单
📥 订阅banlist.sources上游名单 URL 数组,定期抓取后合并进本地全局封禁集合
⏱️ 频率banlist.refresh_interval两次抓取之间的秒数,默认 3600

工作流程如下:

  1. 后台任务refresh-banlist(src/tasks/refresh_banlist.py)默认每小时执行一次,逐个拉取sources中所有 URL;
  2. 每个响应按行解析,跳过空行和#注释行,全部合并到一个全局封禁集合(frozenset,热路径零拷贝查询);
  3. 之后每个进入蜜罐的请求都会经过封禁中间件(src/middleware/ban_check.py),命中本地名单或联邦名单的 IP 直接收到429 + Retry-After;
  4. 在 scalable(多副本)部署下,只有一个 Pod 实际抓取外部源,其余副本通过 Redis 直接采用已发布的名单,避免重复抓取。

实战步骤一:订阅社区封禁名单(只需 3 行)

打开 config.yaml,找到banlist:段,取消注释并填入上游源:

banlist: sources: - "https://krawl.example.com/public_banlist.txt" refresh_interval: 3600 # 每 3600 秒抓取一次

sources支持任意纯文本 IP 列表——可以是其他 Krawl 实例的联邦端点,也可以是任意第三方封禁名单(README 中就提供了社区演示实例的export-ips端点作为示例源)。保存后重启,日志中会出现[BanlistSync] Fetched N IPs from ...,联邦名单即刻生效。

💡 仓库自带的 banlist.txt 就是 Krawl 官方每周发布的社区封禁名单样例(5000+ 个确认攻击者 IP),可直接作为sources的静态文件参考格式:一行一个公网 IP,#开头为注释。

实战步骤二:发布自己的封禁名单,加入情报网络

如果你也想为社区贡献情报,再加一行export_path即可:

banlist: export_path: "/public_banlist.txt" # 免认证下载路径,留空则关闭 sources: - "https://krawl.example.com/public_banlist.txt" refresh_interval: 3600

设置后,你的实例会在http://<你的域名>/public_banlist.txt暴露封禁名单(处理逻辑见 src/routes/banlist.py),并支持与其他导出接口相同的参数:

  • ?categories=attacker,bad_crawler—— 控制包含哪些 IP 类别(默认含 attacker、bad_crawler、regular_user、good_crawler)
  • ?fwtype=raw|iptables|nftables—— 输出格式

⚠️安全提示:该端点无需认证,任何人都能下载。建议:

  • 只暴露attacker等确实需要公开的类别;
  • 端点会自动过滤私网地址(10.x、192.168.x 等)和服务器自身 IP,无需手工处理。

仪表板验证:确认联邦名单已生效

配置生效后,进入 Krawl 仪表板的IP Banlist页面即可验证:

  • 面板中会展示每个订阅源的抓取状态(成功/失败、各源拉取的 IP 数量),状态数据来自/api/banlist-sources接口(src/routes/api.py);
  • 若某个源长时间不可达,对应源会标记为 error,但不影响其他源和名单中已有 IP 的封禁效果。

另外别忘了本地封禁名单还可以一键导出为防火墙规则(iptables / nftables / 纯 IP),详见 docs/firewall-exporters.md;如果站点在 Cloudflare 后面,还能把封禁直接同步到 Cloudflare 边缘的 IP List 与 WAF 规则,参见 docs/cloudflare_banlist.md。

联邦实战最佳实践清单

  • ✅最小暴露面:sources只填你信任的实例,恶意构造的名单等于把别人指定的 IP 永久拉黑;
  • ✅搭配 CDN 排除:若你的站点在 CDN 之后,导出/同步名单时建议使用exclude_cdn参数剔除 CDN 边缘节点 IP 段,避免误伤(见 docs/firewall-exporters.md);
  • ✅合理设置刷新频率:refresh_interval过大会让情报滞后,过小则对上游实例造成压力,社区场景下 3600 秒(默认值)是平衡点;
  • ✅多副本部署无需额外配置:scalable 模式下联邦抓取自动单 Pod 执行,其余副本经 Redis 共享名单(src/banlist_sync.py 中的publish/load_published机制)。

总结

Krawl 的封禁名单联邦把每台蜜罐从"信息孤岛"变成了威胁情报网络的一个节点:发布一行export_path,订阅一行sources,攻击者的 IP 就能在你的 Krawl 上被瞬间 429 拦截。对于运维多套服务、或多台机器部署蜜罐的用户,这套机制几乎是零成本的防御增益——让你的欺骗服务器不仅骗得狠,封得也更快。

【免费下载链接】Krawl

Krawl is a customizable, lightweight, cloud-native web deception server and anti-crawler that creates fake web applications with low-hanging vulnerabilities using realistic, randomly generated decoy data and AI-generated HTML templates.

项目地址:https://gitcode.com/gh_mirrors/kr/Krawl
点击查看免费下载
上一篇:B站抢票辅助工具 biliTickerBuy 快速上手指南:从装环境到开抢的完整流程
下一篇:pm-skills 实战:基于 JTBD 的 Ideal Customer Profile(ICP)识别方法

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表