harshraj1695/ThreatLens
GitHub: harshraj1695/ThreatLens
基于 Snort3 的实时入侵检测仪表盘,解析告警并以 Web 可视化方式呈现可疑活动。
Stars: 0 | Forks: 0
# Snort3 IDS 仪表盘
一个基于 AFPacket 的 Snort3 实时入侵检测仪表盘。解析 Snort 告警日志,并在 Web UI 中实时显示攻击分类、源 IP 跟踪和严重性过滤。
## 

## 项目结构
```
snort_project/
├── app/
│ ├── alerts.py # Snort alert parsing and categorization
│ ├── config.py # Paths and environment-driven settings
│ ├── rules.py # Rule validation and rule-file writes
│ ├── state.py # In-memory dashboard aggregates
│ ├── web.py # HTTP server, SSE stream, static/template serving
│ ├── static/
│ │ ├── css/dashboard.css # Dashboard styles
│ │ └── js/dashboard.js # Dashboard client logic
│ └── templates/index.html # Dashboard markup
├── scripts/
│ └── setup_and_run.sh # Installs runtime packages and starts Snort + dashboard
├── server.py # Thin entrypoint for starting the app
└── README.md
```
## 先决条件
- Snort3 已安装在 `/usr/local/snort/bin/snort`
- Snort 配置文件位于 `/usr/local/snort/etc/snort/snort.lua`
- 本地规则文件位于 `/usr/local/snort/etc/snort/rules/local.rules`
- Python 3(仅使用标准库,无需 pip 安装)
- 日志目录:`/var/log/snort/`
## 安装设置
### 1. 确保日志目录存在
```
sudo mkdir -p /var/log/snort
```
### 2. 可选的运行时配置
仪表盘现在支持通过环境变量进行配置,而非硬编码路径:
```
export SNORT_ALERT_FILE=/var/log/snort/alert_fast.txt
export SNORT_INTERFACE=eth0
export SNORT_DASHBOARD_HOST=0.0.0.0
export SNORT_DASHBOARD_PORT=8888
```
## 运行
### 一键启动
如果你希望有一个脚本同时准备本地运行时环境并启动 Snort 和仪表盘:
```
sudo bash scripts/setup_and_run.sh
```
它会执行以下操作:
- 在支持的情况下安装小型运行时包,如 `python3`、`curl` 和 `lsof`
- 检查 Snort 二进制文件和配置文件是否存在
- 创建 `/var/log/snort` 目录
- 默认在 `eth0` 上使用 AFPacket 启动 Snort
- 在端口 `8888` 上启动仪表盘服务
你可以通过环境变量覆盖默认设置:
```
sudo SNORT_INTERFACE=eth0 SNORT_DASHBOARD_PORT=8890 bash scripts/setup_and_run.sh
```
你需要**同时运行两个终端**。
### 终端 1 — 启动 Snort3
```
sudo /usr/local/snort/bin/snort \
--daq afpacket \
-i eth0 \
-c /usr/local/snort/etc/snort/snort.lua \
-l /var/log/snort \
-A alert_fast \
--lua "alert_fast = { file = true }"
```
预期输出:
```
afpacket DAQ configured to passive.
Commencing packet processing
++ [0] eth0
```
### 终端 2 — 启动仪表盘服务
```
sudo python3 ~/snort_project/server.py
```
预期输出:
```
[snort-dashboard] Watching /var/log/snort/alert_fast.txt
[snort-dashboard] Loaded X existing alerts
[snort-dashboard] Dashboard running at http://localhost:8888
```
如果使用 `sudo` 导出了自定义环境变量,请确保它们被保留:
```
sudo --preserve-env=SNORT_ALERT_FILE,SNORT_INTERFACE,SNORT_DASHBOARD_HOST,SNORT_DASHBOARD_PORT python3 ~/snort_project/server.py
```
### 终端 3 — 打开仪表盘
在浏览器中打开:
```
http://localhost:8888
```
## 生成测试流量
```
# 触发 ICMP 规则
ping -c 5 8.8.8.8
# 触发 HTTP 规则
curl http://example.com
# 查看原始告警
sudo tail -f /var/log/snort/alert_fast.txt
```
## 本地规则
规则文件路径:`/usr/local/snort/etc/snort/rules/local.rules`
```
alert icmp any any -> any any (msg:"ICMP Ping Detected"; sid:1000001; rev:1;)
alert tcp any any -> any 22 (msg:"SSH Connection Attempt"; sid:1000002; rev:1;)
alert tcp any any -> any 80 (msg:"HTTP Traffic Detected"; sid:1000003; rev:1;)
```
要添加新规则,请追加到该文件并重启 Snort。无需重启仪表盘。
## 仪表盘功能
| 功能 | 描述 |
|---|---|
| 实时告警流 | 新告警通过 SSE 即时显示(无需刷新页面) |
| 严重性过滤 | 按严重程度过滤:危急 / 高 / 中 / 低 |
| 分类过滤 | 自动分类告警(侦察、Web 攻击、漏洞利用、DoS 等) |
| 搜索 | 按源 IP 地址或消息关键词过滤 |
| 源 IP 排行 | 显示最活跃攻击主机的柱状图 |
| 攻击类型分类 | 按攻击类型统计分布 |
| 每分钟告警数 | 展示流量随时间变化的趋势线 |
| 协议分布 | ICMP / TCP / UDP 比例 |
| 实时指示器 | 绿色圆点表示 SSE 连接状态 |
## API 接口
服务器提供以下接口(可用于脚本编写或集成):
| 接口 | 描述 |
|---|---|
| `GET /` | 提供仪表盘界面 |
| `GET /api/alerts` | 最近 100 条告警(JSON 格式) |
| `GET /api/stats` | 聚合统计信息(Top IP、分类、严重性计数) |
| `GET /api/stream` | SSE 流 — 实时推送新告警 |
示例:
```
curl http://localhost:8888/api/alerts | python3 -m json.tool
curl http://localhost:8888/api/stats | python3 -m json.tool
```
## 告警严重性映射
Snort 优先级字段与仪表盘严重性对应关系如下:
| Snort 优先级 | 仪表盘严重性 |
|---|---|
| 1 | 危急 |
| 2 | 高 |
| 3 | 中 |
| 4+ | 低 |
## 故障排查
**`alert_fast.txt` 未创建**
Snort 在首次触发告警后才会创建该文件。可通过执行 `ping -c 3 8.8.8.8` 触发一条告警。
**浏览器显示“此页面无法找到”**
请从该项目目录运行服务,以便正确提供 `app/templates/` 和 `app/static/` 中的模板和静态资源。
**访问告警文件权限被拒绝**
由于告警文件归 root 所有,请始终使用 `sudo` 运行服务。
**仪表盘显示“等待告警”**
SSE 连接正常,但尚未触发任何告警。可通过 `ping` 或 `curl` 生成流量。
**端口 8888 已被占用**
```
sudo lsof -i :8888
sudo kill
```
标签:AF_PACKET, Dashboard, HTTP服务器, IP追踪, PB级数据处理, Python, SSE, 仪表盘, 安全可视化, 安全运维, 实时日志分析, 开源安全工具, 攻击分类, 无后门, 网络威胁检测, 规则命中, 逆向工具, 逆向工程平台