prizmatik666/suri_dash_cli

GitHub: prizmatik666/suri_dash_cli

一对纯 Python 标准库编写的 Suricata 日志终端工具,提供实时仪表盘监控与交互式日志查看美化功能,专为家庭实验室和小型防御监控环境设计。

Stars: 1 | Forks: 0

# Suricata PRIZM 实用工具 https://www.github.com/prizmatik666/suri_dash_cli Prizmatik Underground 出品 SDASH 屏幕截图 image SLOG 屏幕截图 image image image 这是一对小型的 Python 实用工具,专为在家庭实验室、学习或防御性监控环境中处理 Suricata 日志而设计。 本仓库包含: - `sdash.py` — 针对 `eve.json` 的实时终端仪表盘 - `slog.py` — 交互式 Suricata 日志查看器 / 美化器 / 导出器 这两个工具均专为可读的终端工作流、SSH/tmux 使用场景以及小型实验室网络分析而设计。 # 项目状态 当前发布目标: ``` v3.2 and v0.1.0 sdash.py // slog.py ``` 这些实用工具已达到实验室可用水平,但并不旨在取代完整的 SIEM、SOC 平台或企业级 Suricata 部署堆栈。 它们的最佳用途是: - 家庭实验室监控 - 学习 Suricata 事件结构 - 审查 `eve.json` - 在终端中监控警报/流量 - 导出清理后的日志摘要 - 关联本地扫描、SMB 测试、DNS、TLS、HTTP 以及 Suricata 警报 # 系统要求 ## 系统 - Linux - Python 3.9+ - 已安装 Suricata 并正在写入日志 - 支持 ANSI 颜色的终端 - 推荐:`jq`、`tmux` ## Python 这两个工具目前仅使用 Python 标准库模块。 正常使用无需任何外部 Python 包。 用于测试: ``` sudo apt install python3-pytest ``` 或: ``` python3 -m pip install pytest ``` # Suricata 日志预期 默认情况下,这两个工具期望 Suricata 日志位于: ``` /var/log/suricata/ ``` 最重要的文件是: ``` /var/log/suricata/eve.json ``` 常见的 Suricata 日志: ``` eve.json Structured JSON event log fast.log Human-readable alerts stats.log Suricata stats output suricata.log Engine/runtime messages ``` 检查您的日志目录: ``` sudo ls -lh /var/log/suricata/ ``` 检查 Suricata 配置的日志写入位置: ``` grep -n "default-log-dir" /etc/suricata/suricata.yaml ``` 检查 Suricata 是否正在运行: ``` systemctl status suricata ``` 或: ``` ps aux | grep suricata ``` # sdash.py `sdash.py` 是一个针对 Suricata `eve.json` 的实时终端仪表盘。 它会跟踪日志、解析事件,并为以下内容显示紧凑的实时版块: - 事件计数 - 高频警报 - 高频目标端口 - 高频通信主机 - 协议 - SMB 流量 - 扫描/探测检测 - 最近的事件 它的品牌标识为: ``` SURICATA LIVE DASHBOARD - PRIZM BUILD ``` ## sdash.py 监控的内容 `sdash.py` 读取 Suricata EVE JSON 事件,例如: ``` alert flow dns http tls stats smb ``` 它同时使用 Suricata 原生警报和本地仪表盘启发式算法。 仪表盘可以识别: - Suricata 警报签名 - Nmap / 与扫描相关的警报签名 - 大流量端口扫描 - 轻量级受监控端口探测 - SMB 139/445 探测 - SMB 流量 - DNS 查询 - HTTP/TLS 活动 ## 扫描检测行为 仪表盘拥有自己的扫描/探测跟踪器。 默认行为: ``` SCAN_WINDOW = 30 seconds SCAN_THRESHOLD = 5 unique destination ports LIGHT_SCAN_THRESHOLD = 2 unique watched ports ``` 这意味着: - 大范围扫描通常会迅速出现 - 仅扫描两个端口的小型扫描,只有在跟踪窗口内这两个端口都被探测到时才可能显示 - 完整的全网络检测仅对 Suricata 传感器实际能看到的流量有效 重要的网络可见性说明: 位于单台主机上的 Suricata 传感器通常可以看到: ``` traffic to/from itself broadcast traffic multicast traffic some local discovery traffic ``` 除非您使用以下方法,否则它通常无法看到交换式 LAN 或 Wi-Fi 网络上所有设备之间的单播流量: - 路由器/网关部署 - SPAN/镜像端口 - 网络分路器 - 在每个端点上部署基于主机的 Suricata (host-based Suricata) - 受控实验室 MITM 设置 因此,如果 Suricata 运行在 `192.168.2.5` 上,从另一台机器扫描 `192.168.2.5` 应该是可见的,但扫描局域网中的其他两台主机则可能是不可见的。 ## 运行 sdash.py 基本运行: ``` sudo python3 sdash.py ``` 赋予可执行权限: ``` chmod +x sdash.py sudo ./sdash.py ``` 针对特定的 EVE 日志运行: ``` sudo python3 sdash.py --log /var/log/suricata/eve.json ``` 为小型家庭实验室降低扫描阈值: ``` sudo python3 sdash.py --scan-threshold 2 --window 60 ``` 显示完整的 IPv6 地址: ``` sudo python3 sdash.py --full-ip ``` 从日志开头启动,而不是仅跟踪新事件: ``` sudo python3 sdash.py --no-follow-end ``` ## sdash.py 键盘控制 在仪表盘内部: ``` q quit p pause/resume ``` ## sdash.py 标志 ``` --log PATH Path to Suricata eve.json. Default: /var/log/suricata/eve.json --scan-threshold N Number of unique destination ports required before a possible scan is shown. Default: 5 --light-threshold N Number of watched ports required for light probe detection. Default: 2 --window SECONDS Time window for scan/probe tracking. Default: 30 --max-events N Number of recent events kept in memory. Default: 40 --full-ip Show full IP addresses instead of shortening IPv6 addresses. --no-follow-end Start reading from the beginning of the log instead of tailing only new events. ``` ## sdash.py 操作说明 ### 权限错误 Suricata 日志通常仅限 root 可读。 如果您看到: ``` Permission denied Log file is not readable ``` 请运行: ``` sudo python3 sdash.py ``` ### 终端过小 如果仪表盘显示: ``` TERMINAL TOO SMALL - resize pane ``` 解决方法: - 放大终端窗口 - 放大 tmux 窗格 - 减小字体大小 - 使用全屏终端模式 ### 轻量级扫描可能不显示 诸如以下的小型扫描: ``` nmap -Pn -p 139,445 TARGET ``` 可能并不总是显示,这取决于: - Suricata 可见性 - 是否生成了 flow 事件 - 这两个端口是否出现在扫描窗口内 - 流量是否到达传感器 - 是否监控了正确的接口 请尝试: ``` nmap -Pn -p 1-300 TARGET ``` 或: ``` sudo python3 sdash.py --scan-threshold 2 --window 60 ``` ### 错误的接口 一个非常常见的问题: Suricata 可能正在监控错误的网卡。 检查活动接口: ``` grep "interface:" /etc/suricata/suricata.yaml ``` 验证流量: ``` sudo tcpdump -i wlan1 ``` 如果 tcpdump 能看到流量,但 sdash 仍然为空: - Suricata 可能未连接到正确的接口 - EVE 日志记录可能被禁用 - `eve.json` 可能未在 `suricata.yaml` 中启用 ### EVE 日志记录已禁用 如果 `eve.json` 从未更新: 请检查: ``` grep -n "eve-log" /etc/suricata/suricata.yaml ``` 确保: ``` - eve-log: enabled: yes ``` 存在。 更改后请重启 Suricata: ``` sudo systemctl restart suricata ``` ### 未出现警报 可能的原因: - 未加载任何规则 - 未安装 ET/Open - Suricata 运行时未配置规则源 - HOME_NET 配置错误 - 接口不匹配 - 扫描过于轻微 检查规则: ``` sudo suricata-update list-sources sudo suricata-update ``` 然后重启: ``` sudo systemctl restart suricata ``` ### 仪表盘显示流量但未检测到扫描 可能的原因: - 阈值过高 - 扫描规模过小 - 缺少 flow 事件 - Suricata 只能看到部分流量 请尝试: ``` sudo python3 sdash.py --scan-threshold 2 ``` # slog.py `slog.py` 是一个 Suricata 日志查看器、浏览器、美化和导出工具。 它可以: - 列出 `/var/log/suricata` 中的日志 - 打开 `.log`、`.json` 和 `.gz` 文件 - 美化格式化 `eve.json` - 逐页浏览清理后的输出 - 按 `event_type` 过滤 - 将清理后的日志输出导出到 `~/logs` - 交互式运行或仅以导出模式运行 它的品牌标识为: ``` suri-log-viewer - PRIZM BUILD ``` ## slog.py 的用途 当您想在事后检查日志时,请使用 `slog.py`。 适用场景: - 审查 `eve.json` - 导出可读的警报摘要 - 检查 DNS/HTTP/TLS/flow 活动 - 将嘈杂的 JSON 转换为可读文本 - 为报告或作品集撰写准备笔记 - 浏览压缩的轮转日志 ## 运行 slog.py 基本交互式运行: ``` sudo python3 slog.py ``` 赋予可执行权限: ``` chmod +x slog.py sudo ./slog.py ``` 打开特定日志: ``` sudo python3 slog.py --file eve.json ``` 打开压缩日志: ``` sudo python3 slog.py --file eve.json.1.gz ``` 仅导出警报事件: ``` sudo python3 slog.py \ --file eve.json \ --event-type alert \ --export-only \ --output alerts.txt ``` 禁用颜色: ``` sudo python3 slog.py --no-color ``` ## slog.py 查看器控制 在查看器内部: ``` n / Enter next page p previous page g top G bottom q quit viewer ``` ## slog.py 标志 ``` --log-dir PATH Directory containing Suricata logs. Default: /var/log/suricata --save-dir PATH Default export directory. Default: ~/logs --file FILE Specific log file to open. --limit N Number of events/lines to load. Use 0 for whole file. Default: 500 --tail Read the last --limit lines instead of the first. --no-color Disable ANSI colors. --export-only Export prettified output without opening the interactive viewer. --output FILE Output filename/path for export-only mode. --page-lines N Lines shown per page in the viewer. Default: 28 --event-type TYPE Filter eve.json by event type. Example: alert dns http tls flow --version Show version and exit. ``` ## slog.py 操作说明 ### 权限问题 如果您无法读取日志: ``` Permission denied ``` 请运行: ``` sudo python3 slog.py ``` ### 巨大的 eve.json 文件 某些 Suricata 安装会生成海量的日志。 在庞大的 `eve.json` 上使用: ``` --limit 0 ``` 可能会消耗大量 RAM 并变得缓慢。 更安全的选项: ``` --limit 500 --limit 2000 --tail ``` ### 损坏的 JSON 行 如果 Suricata 在写入过程中崩溃或轮转日志,某些行可能无法干净地解析。 查看器会尝试安全地继续运行,并在解析失败时显示原始行。 ### Gzip 日志支持 诸如以下压缩日志: ``` eve.json.1.gz ``` 将自动获得支持。 ### 缺失 SMB 字段 并非所有的 Suricata 安装/日志格式都包含 SMB 事件元数据。 如果 SMB 部分显得内容稀少: - SMB 日志记录可能未启用 - Suricata 版本可能不同 - SMB 解析器/应用层支持可能不同 ### 空日志文件 可能的原因: - Suricata 未运行 - 日志目录错误 - EVE 日志记录已禁用 - 无流量 - 监控的接口错误 请检查: ``` systemctl status suricata ``` 和: ``` ls -lh /var/log/suricata/ ``` # 测试 安装 pytest: ``` sudo apt install python3-pytest ``` 运行所有测试: ``` pytest -v ``` 仅运行 sdash 测试: ``` pytest -v tests/test_sdash.py ``` 仅运行 slog 测试: ``` pytest -v tests/test_slog.py ``` 预期输出: ``` 18 passed ``` 或类似内容。 # 推荐环境 这些工具在以下环境中运行效果尤佳: - tmux - Warp 终端 - SSH 会话 - Kali Linux - Suricata 家庭实验室 - 小型监控虚拟机 - Raspberry Pi 传感器 - 本地 Wi-Fi 分析设置 # 未来构想 可能的未来升级: - 仪表盘快照 - 实时警报声音钩子 - ncurses 窗口大小调整 - 设备名称标记 - 协议热力图 - 警报搜索 - grep 风格过滤 - 离线重放模式 - 多日志关联 - pcap 关联 - Zeek 集成 - JSON 导出模式 - 深色/浅色终端主题 - 警报严重性排序 - sdash 内部键盘切换 - Suricata 规则命中统计
标签:eve.json, Linux运维, Metaprompt, PB级数据处理, Python, SIEM工具, Suricata, 交互式查看器, 代码示例, 安全运维, 家庭实验室, 开源安全工具, 数据分析, 无后门, 日志导出, 日志美化, 现代安全运营, 终端仪表盘, 网络安全, 警报关联, 逆向工程平台, 隐私保护