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, 云计算, 前端工具, 单文件应用, 后端开发, 多模态安全, 安全运维, 数据可视化, 日志告警, 本地规则, 流量控制, 程序员工具, 网络安全, 规则升级, 规则引擎, 规则转换, 规则迁移, 逆向工具, 防火墙, 隐私保护, 静态网站