unflawed-code/route10-suricata-runner
GitHub: unflawed-code/route10-suricata-runner
专为 Route10 路由器优化的 Suricata IDS/IPS 自动化管理工具,通过规则裁剪和内存优化解决低配设备运行入侵检测的资源瓶颈。
Stars: 0 | Forks: 0
# Route10 Suricata 策略处理器与 CLI 自动化
本项目提供了一套稳健的自动化解决方案,用于在 Route10 上管理 Suricata。它针对 Route10 的 1GB RAM 进行了专门优化,并提供灵活的运行模式。
## 功能特性
- **灵活的运行模式**:
- **纯 CLI 模式(推荐)**:独立运行 Suricata,Web UI **禁用**。该脚本手动启动 `ips` 守护进程和 `suricata` 引擎,并采用优化设置以确保最大稳定性。
- **优化 UI 模式**:在 Web UI 中保持 Suricata **启用**。脚本检测系统进程,修剪规则并重启引擎,允许使用 UI 监控状态,同时仍受益于内存优化。
- **可配置的安全类别**:允许用户选择要保持活动的安全类别。包含针对家庭用户的推荐预设,平衡了高防护与低内存占用。
- **自动补丁**:修补系统的 `suricatad.sh` 和 `suricata-update.sh`,防止内存密集型的冗余更新循环(节省约 800MB RAM 峰值)。
- **启动集成**:通过 `/cfg/post-cfg.sh` 与路由器的启动过程无缝集成。
- **反应式阻断**:通过 `ips` 守护进程保留硬件的“阻断级别”反应式防火墙集成。
- **多 VLAN 支持**:自动监控所有定义的 LAN 接口(`br-lan`、`br-lan_2` 等)。
## 安装说明
### 1. 上传文件
将项目文件上传到您的路由器(例如 `/cfg/suricata-runner/` 或您选择的任何目录):
- `setup.sh`
- `ips-policy.conf`
- `scripts/start.sh`
- `scripts/boot-prune.sh`
- `scripts/ips-rule-policy.sh`
- `scripts/post-update-prune.sh`
- `scripts/suricata-update.sh`
### 2. 设置权限
通过 SSH 登录您的路由器,导航到上传目录,并设置适当的权限:
```
cd /path/to/your/upload
chmod 700 *.sh scripts/*.sh 2>/dev/null || chmod 700 *.sh
```
### 3. 运行设置
在上传目录中执行安装脚本:
```
/bin/ash setup.sh
```
这将:
1. 修补 `/usr/bin/suricatad.sh` 和 `/usr/bin/suricata-update.sh` 以修复内存峰值错误。
2. 创建 `/var/lib/suricata` 和 `/var/run/suricata` 先决条件。
3. 配置 `/cfg/post-cfg.sh`(作为注释条目)以确保重启后的持久性。
4. 触发初始规则修剪并重启 Suricata。
## 验证
安装后,您可以验证系统状态并确定当前的阻断模式。
### 1. 检查 Suricata 是否正在运行
运行以下命令查看活动的 Suricata 引擎:
```
ps -w | grep Suricata-Main
```
如果处于活动状态,您将看到 `suricata` 的进程行。
### 2. 识别当前的阻断模式
阻断行为取决于 `ips-policy.conf` 中的 `IPS_INLINE` 设置:
#### **模式 A:反应式阻断 (IPS_INLINE=0)**
*推荐用于 Route10(最低延迟)。* Suricata 作为 IDS 运行,并向 `ips` 守护进程发送警报,随后该守护进程在防火墙中动态阻断 IP。
- **验证守护进程**:`ps -w | grep "/usr/sbin/ips"` 应显示反应式守护进程正在运行。
- **验证连接**:`grep "eve-log output device (unix_dgram) initialized: /var/run/ips.sock" /var/log/suricata/suricata.log` 确认 Suricata 正在与守护进程通信。
#### **模式 B:内联 IPS (IPS_INLINE=1)**
Suricata 直接运行在数据包路径 (AF_PACKET) 中并实时丢弃数据包。
- **验证引擎模式**:`grep "NFQ" /var/log/suricata/suricata.log` 或检查日志中的 `AF_PACKET` 可确认内联操作。
### 3. 检查当前阻断
要查看是否有任何 IP 当前被反应式守护进程阻断:
```
iptables -L ips -v -n
```
如果检测到威胁并进行了阻断,`ips` 链将列出活动的丢弃记录。
## 优化结果
本项目显著减少了 Suricata 在 Route10 上的资源占用:
- **规则缩减**:通常将规则集从约 65,000 条减少到 **约 7,700 条活动规则**(减少约 88%)。
- **内存稳定性**:通过修剪不必要的类别和修补冗余更新循环,遏制了 RAM 峰值,防止了默认配置中常见的 OOM (内存不足) 终止。
- **延迟**:反应式阻断(IDS 模式)避免了内联数据包处理的开销,同时仍提供动态防火墙保护。
## 配置
所有配置均在 `/cfg/suricata-runner/ips-policy.conf` 中管理。
### 关键设置
- `IPS_ENABLED=1`:必须设置为 1 脚本才能运行。
- `IPS_INLINE=0`:设置为 0 以启用带反应式阻断的 IDS 模式(推荐以获得速度)。
- `IPS_ALLOWED_CATEGORIES`:定义要追踪的威胁。
## 工作原理
1. **启动**:`/cfg/post-cfg.sh` 在启动时运行并触发 `boot-prune.sh`,延迟 120 秒。
2. **安全等待**:脚本等待路由器完成其“繁忙”的启动阶段。
3. **符号链接恢复**:它恢复 Suricata 规则所需的易失性符号链接。
4. **修剪**:`ips-rule-policy.sh`(基于 Python)注释掉不必要的规则以节省 RAM。
5. **自动启动/优化**:
- 如果 UI **启用**:它重启系统包装器以应用修剪后的规则。
- 如果 UI **禁用**:它手动启动 `ips` 守护进程和 `suricata` 引擎。
## 故障排除
### 检查状态
```
# 检查内存使用情况
free -m
# 检查 Suricata engine 是否活跃
ps -w | grep Suricata-Main
# 检查 rule 加载状态
grep "rules successfully loaded" /var/log/suricata/suricata.log | tail -n 1
```
### 手动触发
如果您想强制重新修剪并重启而无需重新启动:
```
/bin/ash /cfg/suricata-runner/boot-prune.sh 1
```
## 文件结构(仓库)
```
/
├── setup.sh # One-time installation and persistence setup
├── ips-policy.conf # User configuration (categories, mode)
├── scripts/
│ ├── start.sh # Boot wrapper for persistence
│ ├── boot-prune.sh # Background automation (runs on every boot)
│ ├── ips-rule-policy.sh # Optimized rule pruner (Python3)
│ ├── post-update-prune.sh # Post-update maintenance
│ └── suricata-update.sh # Update wrapper
└── tests/ # Test suite
```
## 许可证
MIT License
标签:Cutter, Google搜索, IPS, LangChain, Metaprompt, Route10, Shell脚本, Suricata, VLAN支持, 入侵检测系统, 内存优化, 反应式阻断, 威胁检测与响应, 安全数据湖, 家庭网络, 嵌入式安全, 数字取证, 现代安全运营, 网络安全, 自动化脚本, 规则修剪, 路由器安全, 轻量级, 运维自动化, 防火墙集成, 隐私保护