maxias13/snort-rule-converter-site

GitHub: maxias13/snort-rule-converter-site

一个无需后端的静态网页工具,专为将 Cisco Secure Firewall 的 Snort 2 本地规则平滑迁移至 Snort 3 而设计。

Stars: 0 | Forks: 0

# Snort 2 → Snort 3 本地规则转换器 ## 概述 一个完全静态的单一文件网页应用(`index.html`),用于帮助网络安全工程师将 Cisco Secure Firewall(旧称 Firepower)的本地 Snort 2 规则迁移到 Snort 3 格式。 无需后端服务器即可运行,托管在 GitHub Pages 上。 ## 功能 ### 1. 首页 — 规则转换器 通过 **4-pass 转换管道**,将 Snort 2 本地规则转换为 Snort 3 语法。 #### 转换算法 **Pass 1 — 选项级关键字转换** 将每条规则解析为头部和以分号分隔的选项(支持带引号与转义的词法分析器)。对每个关键字应用以下转换: | Snort 2 | 操作 | Snort 3 结果 | |---------|------|----------------| | `uricontent:"X"` | 拆分为粘性缓冲区 + 内容 | `http_uri; content:"X"` | | `flowbits:set,name` | 转换为基于主机的 xbits | `xbits:set,name,track ip_src` | | `flowbits:noalert` | 独立标志转换 | `noalert` | | `flowbits:reset` | 无 Snort 3 等价物 | ⚠ 移除 + 警告 | | `isdataat:N,rawbytes` | 剥离 rawbytes 子选项 | `isdataat:N` | | `file_data:mime` | 剥离参数 | `file_data` | | `fast_pattern:only` | 移除 `:only` 限定符 | `fast_pattern` | | `metadata:service http` | 提升 service 条目 | `service:http` | | `sameip` | 重命名 | `same_ip` | | `rawbytes`、`threshold`、`resp`、`react`、`tag`、`activates`、`activated_by`、`logto`、`session`、`stream_reassemble`、`replace` | Snort 3 中已移除 | ⚠ 移除 + 警告 | **Pass 2 — 粘性缓冲区重排序** 在 Snort 3 中,粘性缓冲区关键字(如 `http_uri`、`http_header` 等)必须出现在其关联的 `content` 选项之前。此 Pass 将任何顺序错误的粘性缓冲区移动到正确位置。 **Pass 3 — PCRE HTTP 标志转换** Snort 2 的 PCRE 使用单字母 HTTP 标志(例如 `/pattern/Ui` 表示 URI)。Snort 3 通过在 `pcre` 选项前放置粘性缓冲区来替换这些标志。 ``` pcre:"/pattern/Ui" → http_uri; pcre:"/pattern/i" ``` **Pass 4 — 内容修饰符内联** 在 Snort 3 中,位置修饰符(`depth`、`within`、`offset`、`distance`、`nocase`、`fast_pattern`)必须以内联方式作为逗号分隔的参数放在 `content` 选项内。 ``` content:"X"; depth:20; nocase; distance:0; → content:"X", depth 20, nocase, distance 0; ``` **最终步骤** - `gid`、`sid`、`rev` 始终按顺序排在选项末尾 - 如果指定了 **Start SID**,则每条规则的 SID 会从该值开始顺序重映射 - 原始规则 → 新 SID 的映射会持久化到 `localStorage`,以便跨会话追踪 #### 首页附加功能 - **文件拖放** — 可直接将 `.rules` 文件拖到输入区域 - **并排差异视图** — 以词法级别展示原始规则与转换后规则的差异并高亮 - **规则解释面板** — 按规则分解动作、协议、网络、检测条件与元数据 - **下载转换后的规则** — 导出为 `.rules` 文件,兼容 FMC 命名规范 ### 2. 规则优化 分析 Snort 2 或 Snort 3 本地规则,并提供优化建议(**韩语**)。 - **版本切换** — Snort 2 / Snort 3 选择器会应用版本特定的检查 - **多行规则支持** — 通过括号深度跟踪,在分析前将格式化的多行规则合并 - **版本不匹配检测** — 若 Snort 3 专用关键字出现在 Snort 2 规则中(或反之)会发出警告 - **每条规则建议** — 分为 `PERF`(性能)、`WARN`(正确性)、`INFO`(最佳实践) - **每个选项的详细说明** — `OPT_EXPLAIN` 数据库包含约 40 个关键字的韩语描述 - **点击展开** — 规则标题显示被截断的规则,点击可展开完整内容 #### 建议分类(示例) | 级别 | 示例检查 | |------|----------| | PERF | 未前置 `content` 锚点的 `pcre` | | PERF | 多个 `content` 选项但无 `fast_pattern` | | PERF | 缺少 `flow` 选项 | | WARN | 未知规则动作 | | WARN | 缺少 `msg`、`sid`、`rev` | | WARN | SID 不在本地规则范围(1,000,000–1,999,999) | | WARN | 存在已弃用的 Snort 2 关键字 | | INFO | `flowbits` → `xbits` 迁移说明 | | INFO | `dce_stub_data` 需要 dce2 inspector | ### 3. Python 验证器 生成一个独立的 Python 3 脚本(`validate_snort3.py`),用于离线验证 Snort 3 规则。 - **无依赖** — 纯 Python 3,无需外部包 - **嵌入转换后的规则** — 可直接在“首页”标签中加载已转换的规则到脚本内 - **网络变量输入** — 配置 `$HOME_NET` / `$EXTERNAL_NET`(源/目标 IP 或 CIDR) - **应用到脚本** — 将网络变量注入生成的脚本中 - **下载 / 复制** — 导出脚本以用于 CI/CD 流水线或本地验证 ### 4. Snort SRU 更新 展示本周的 **Snort 2 订阅规则更新(SRU)** 发布说明。 - 并行获取当前周(周日–周六)的所有公告页面(通过 `Promise.all`) - 来源:`snort.org/advisories/talos-rules-YYYY-MM-DD` - 匹配 `Snort version 2XXXXXXX` 模式的区块 - 按天展示 **新增 / 修改 / 删除** 的规则数量,并支持折叠每日区块 - 若直接请求被屏蔽,则通过 `api.codetabs.com` 进行 CORS 代理 ### 5. Snort LSP 更新 展示本周的 **Snort 3 轻量安全包(LSP)** 发布说明。 - 与 SRU 相同的获取与展示架构 - 匹配 `Snort version 3.X.X.X` 模式的区块 - 按天展示 **新增 / 修改 / 删除** 的规则 ### 6. 站点信息 静态信息页面,涵盖: - 站点所有者、站点名称、用途、目标用户 - 详细转换算法文档的功能列表 - 技术栈(GitHub Pages、Cloudflare Workers、GitHub Issues API) - 免责声明 ### 7. 反馈板 社区留言板,允许访客在不使用 GitHub 账户的情况下留下反馈。 #### 架构 ``` Browser (no login required) ↓ Cloudflare Worker (snort-feedback.snort-feedback.workers.dev) ↓ [GitHub token stored server-side as environment secret] GitHub Issues API (maxias13/snort-rule-converter, label: feedback) ``` #### 帖子类型 | 类型 | 徽章颜色 | 说明 | |------|----------|------| | 功能请求 | 青色 | 开放给所有访客 | | 错误报告 | 红色 | 开放给所有访客 | | 建议 | 黄色 | 开放给所有访客 | | 通知 | 金色 ★ | **仅管理员** — 需要密码 `maxias` | #### 行为 - **通知** 帖子始终显示在列表顶部 - 帖子默认仅显示标题,点击后展开作者、日期与内容 - 提交的帖子会作为 GitHub Issues 存储,可在 `github.com/maxias13/snort-rule-converter/issues` 中管理(编辑/关闭/删除) - 激活的标签页会保留在 URL 哈希中(例如 `#feedbackView`),刷新页面后仍保持 ## 技术栈 | 组件 | 技术 | |------|------| | 托管 | GitHub Pages(静态) | | 前端 | 纯 HTML / CSS / JavaScript — 零依赖 || 反馈后端 | Cloudflare Workers + GitHub Issues REST API | | 字体 | Google Fonts(Inter) | | 规则更新来源 | snort.org Talos 公告页面 | | CORS 备用代理 | api.codetabs.com | ## 导航 | 标签页 | URL 哈希 | 描述 | |--------|----------|------| | 首页 | `#homeView` | 规则转换器 + 差异视图 | | 规则优化 | `#optimizerView` | 每条规则分析(韩语) | | Python 验证器 | `#validatorView` | 可下载的验证脚本 | | Snort SRU 更新 | `#sruView` | 每周 Snort 2 规则变更 | | Snort LSP 更新 | `#lspView` | 每周 Snort 3 规则变更 | | 站点信息 | `#siteinfoView` | 关于此站点 | | 反馈 | `#feedbackView` | 社区留言板 | | 如何编写 Snort 3 规则 ↗ | — | 外部链接至 docs.snort.org 文档 | ## 仓库 - **源码**:`index.html`(单一文件应用) - **GitHub**:https://github.com/maxias13/snort-rule-converter - **在线站点**:https://maxias13.github.io/snort-rule-converter/
标签:Cisco Secure Firewall, Firepower, flowbits, GitHub Pages, HTTP 解析, MacOS取证, PB级数据处理, PCRE, SEO: Snort 规则转换器, SEO: 规则迁移工具, Snort 2, Snort 3, URI 匹配, WAF, xbits, 云计算, 前端工具, 单文件应用, 后端开发, 多模态安全, 安全运维, 数据可视化, 日志告警, 本地规则, 流量控制, 程序员工具, 网络安全, 规则升级, 规则引擎, 规则转换, 规则迁移, 逆向工具, 防火墙, 隐私保护, 静态网站