Ubuntu Sniffer报警阈值设置指南
先明确你的“Sniffer”类型
- 若你指的是netsniff-ng 套件中的“sniff”(被动抓包/分析工具),它默认不提供“阈值+告警”能力,需要借助外部机制(如阈值脚本、日志告警、Suricata/Snort联动)来实现。
- 若你指的是Snort(开源IDS/IPS),则可在规则与配置中设置告警阈值(如事件计数阈值、速率阈值、抑制/阈值策略),这是更常见且标准的做法。
使用 Snort 设置告警阈值
- 规则级阈值(event thresholding)
- 在规则末尾追加阈值指令,控制同一事件在指定时间窗内的告警频率:
- threshold: type threshold, track by_src, count 5, seconds 60; # 同一源IP在60秒内最多告警5次
- threshold: type threshold, track by_dst, count 10, seconds 3600; # 同一目的IP在1小时内最多告警10次
- threshold: type both, track by_src, count 3, seconds 30; # 触发3次后进入“both”模式(先触发后静默)
- 将这些阈值指令写入自定义规则文件(如:/etc/snort/rules/local.rules),并在 snort.conf 中包含该文件,然后重启 Snort 生效。
- 全局阈值与事件抑制(rate_filter/suppress)
- 使用 rate_filter 做速率型抑制(例如对高频告警降噪):
- rate_filter gen_id 1, sig_id 1000001, track by_src, count 100, seconds 60, new_action drop, timeout 300;
- 使用 suppress 对已知噪声源/网段静默:
- suppress gen_id 0, sig_id 0, track by_src, ip 10.0.0.0/8;
- 输出与验证
- 配置输出到文件或 syslog,便于接入 Barnyard2/日志分析平台做二次告警;
- 用 snort 命令验证配置与规则语法,确认阈值指令被加载后再上线。
使用 netsniff-ng 的“sniff”实现阈值告警
- 思路
- “sniff”本身不内置阈值/告警,建议用“抓包过滤 + 计数脚本 + 告警动作”的组合实现。
- 快速示例(按源IP计数,超阈值则告警)
- 抓包并按源IP统计(每10秒滚动窗口)
- sudo sniff -i eth0 -f “tcp or udp” -l /tmp -T “%Y%m%d-%H%M%S.pcap” &
- 计数与阈值判断(示例阈值:同一源IP在60秒内超过20个会话)
- 使用简单脚本对 /tmp 下最新 pcap 进行统计,提取源IP计数,超过阈值则触发告警(如:logger、curl 调用 webhook、sendmail 等)。
- 清理与限速
- 定期清理旧 pcap,避免磁盘占满;对脚本与日志轮转做限频,避免告警风暴。
- 说明
- 若需要更强的实时性与统计精度,可改用 Suricata(支持规则阈值、速率过滤、AF_PACKET/Netmap、与 EVE/JSON 日志输出),更适合做“阈值+告警”的生产级方案。
常见阈值场景与配置要点
- 高频扫描降噪:对同一源IP的端口扫描类规则设置 threshold + rate_filter,先触发少量告警,后续在设定时间窗内静默,避免日志淹没。
- 内网已知噪声源:用 suppress 按源/目的网段或地址直接静默,减少无效告警。
- 业务突发流量:对 DDoS/异常流量类规则使用 rate_filter 限流告警,结合日志平台做趋势与回溯分析。