fatimaanees485-art/suricata-nids-deployment
GitHub: fatimaanees485-art/suricata-nids-deployment
一套基于 Suricata 的 Docker 化网络入侵检测系统,提供本地检测规则、实时告警监控、自动化响应和可视化仪表盘。
Stars: 0 | Forks: 0
# 网络入侵检测系统
此软件包使用 Suricata 搭建了一套基于网络的入侵检测系统。它包含本地规则、持续告警监控、响应钩子、测试流量以及可选的仪表盘。
## 功能概述
- 配置了用于数据包捕获和 JSON 告警的 Suricata IDS
- 包含针对扫描、暴力破解、可疑 DNS、ICMP 探测、Web 攻击和恶意软件指标的本地检测规则
- 用于持续监控 `eve.json` 的脚本
- 带有 dry-run 模式和可选拦截功能的响应脚本
- 用于验证告警的测试流量脚本
- 用于告警可视化的可选 Streamlit 仪表盘
## 目录结构
```
suricata-nids/
config/suricata.yaml
rules/local.rules
scripts/monitor_alerts.py
scripts/respond.py
scripts/generate_test_traffic.py
dashboard/app.py
docker-compose.yml
logs/
```
## 使用 Docker 快速开始
1. 编辑 `docker-compose.yml` 并设置网络接口:
```
command: ["-i", "eth0", "-c", "/etc/suricata/suricata.yaml"]
```
请使用你真实的捕获接口,例如 `eth0`、`ens33`、`enp0s3`,或操作系统显示的其他接口。
2. 启动 Suricata:
```
docker compose up -d
```
3. 查看告警:
```
python scripts/monitor_alerts.py --eve logs/eve.json
```
4. 在另一个终端运行测试流量:
```
python scripts/generate_test_traffic.py --target 127.0.0.1
```
## Linux 原生安装
安装 Suricata:
```
sudo apt update
sudo apt install suricata
```
复制规则文件:
```
sudo cp rules/local.rules /etc/suricata/rules/local.rules
```
在 `/etc/suricata/suricata.yaml` 中添加或确认已加载此规则文件:
```
rule-files:
- local.rules
```
验证配置:
```
sudo suricata -T -c /etc/suricata/suricata.yaml -v
```
启动实时捕获:
```
sudo suricata -c /etc/suricata/suricata.yaml -i eth0
```
## 持续监控
监控脚本会持续跟踪 Suricata 的 `eve.json` 告警流,并打印重要告警:
```
python scripts/monitor_alerts.py --eve logs/eve.json
```
运行响应操作:
```
python scripts/monitor_alerts.py --eve logs/eve.json --respond --min-severity 2
```
默认情况下,响应模式处于 dry-run(模拟运行)状态。它会将响应决策写入 `logs/responses.log`。
## 响应机制
响应脚本支持:
- 记录告警元数据
- 在冷却期内抑制来自同一源的重复告警
- 生成拦截名单(blocklist)文件
- 使用 `iptables` 进行可选的 Linux 防火墙拦截
dry-run 示例:
```
python scripts/respond.py --src-ip 10.0.0.55 --signature "ET SCAN Example" --severity 2
```
实时拦截示例:
```
sudo python scripts/respond.py --src-ip 10.0.0.55 --signature "ET SCAN Example" --severity 2 --enforce
```
仅在测试通过后再启用实时拦截,因为如果规则范围过大,自动拦截可能会中断合法用户的访问。
## 仪表盘
安装 Streamlit:
```
pip install streamlit pandas
```
运行:
```
streamlit run dashboard/app.py -- --eve logs/eve.json
```
仪表盘会显示告警数量、严重程度分布、高频源 IP、高频签名以及最近的告警。
## 检测覆盖范围
本地规则包含以下场景的示例:
- ICMP ping 扫描
- Nmap 风格的 SYN 扫描
- SSH 暴力破解模式
- HTTP SQL 注入尝试
- HTTP 路径遍历尝试
- 可疑的 PowerShell 下载字符串
- 针对可疑动态 DNS 域名的 DNS 查询
- 已知的恶意测试域名
这些只是入门规则。在生产环境中,请将它们与持续维护的社区或商业规则集结合使用,并针对您的实际环境调整容易误报的签名。
## 运维检查清单
1. 选择捕获接口。
2. 在 `config/suricata.yaml` 中设置受信任的内部网络。
3. 加载 `rules/local.rules`。
4. 验证 Suricata 配置。
5. 启动持续数据包捕获。
6. 确认 `logs/eve.json` 能接收到告警。
7. 运行测试流量并验证检测结果。
8. 启动监控脚本。
9. 在 dry-run 模式下启用响应。
10. 审查误报情况。
11. 仅对高可信度的告警类别启用强制执行。
## 安全注意事项
- 首先在 IDS 模式下运行。
- 在规则调优完成之前,保持拦截功能禁用。
- 未经明确加入白名单,绝不拦截共享的 DNS 解析器、网关或代理服务器。
- 以适当的权限存储日志,因为其中可能包含内部 IP、主机名、URL 和用户活动信息。
标签:Docker, IP 地址批量处理, Kubernetes, Metaprompt, Python, Suricata, 安全防御评估, 插件系统, 无后门, 现代安全运营, 网络安全, 请求拦截, 逆向工具, 隐私保护