温馨提示×

如何设置CentOS sniffer报警阈值

小樊
42
2025-12-31 07:50:26
栏目: 智能运维

在 CentOS 上设置嗅探器报警阈值的可行方案

一、先明确你的“Sniffer”类型

  • 若指的是Wireshark/tshark、tcpdump等抓包工具,它们本身不提供“阈值+告警”能力,需要配合外部监控/告警系统(如Prometheus + Alertmanager)对抓包结果或衍生指标做阈值判断与通知。
  • 若指的是Snort(常被称作网络嗅探/入侵检测系统),可在规则与输出插件层面实现“事件触发即告警”,并通过外部系统对告警速率/数量设置阈值进行二次抑制与通知。

二、基于 Prometheus 的通用阈值告警方案(适合 tcpdump/tshark、Snort 日志等)

  • 采集与告警链路
    • 抓包侧:用tshark/tcpdump将流量关键指标或告警导出为日志/指标(如将告警写入文件,由node_exporter 的 textfile collector采集;或经 syslog/rsyslog 送入 Loki/Promtail 再由 PromQL 统计)。
    • 监控侧:部署Prometheus(抓取指标)、Alertmanager(分组、抑制、路由与通知)。
    • 可视化:用Grafana做趋势与阈值可视化。
  • 关键阈值示例(PromQL)
    • 抓包丢包率过高(需节点启用网卡丢包/收包计数指标,如 node_netstat_IfaceIfLastChange 或 ethtool -S 暴露的 drop 指标)
      • 规则:1 - (rate(node_netstat_IfaceIfLastChange{device=“ens33”}[5m])) / rate(node_netstat_IfaceIfInOctets{device=“ens33”}[5m]) > 0.01
      • 含义:5 分钟内丢包率超过**1%**触发。
    • Snort 告警速率过高(假设以 Prometheus Counter 形式统计告警总数)
      • 规则:rate(snort_alerts_total[1m]) > 10
      • 含义:最近 1 分钟 Snort 告警速率超过10 条/分钟触发。
  • 通知示例(Alertmanager,邮件)
    • 在 alertmanager.yml 中配置 smtp、to/from、auth 等,结合分组与抑制策略避免告警风暴。

三、基于 Snort 的规则级“阈值”与告警输出

  • 规则级触发(事件即告警)
    • 在**/etc/snort/rules/local.rules**添加检测规则,例如对 ICMP 测试告警:
      • alert icmp any any -> $HOME_NET any (msg:“ICMP test”; sid:10000001;)
    • 配置输出插件(如 unified2)便于外部系统采集与统计:
      • output unified2: filename snort.log, limit 128
    • 启动与验证:
      • 校验:snort -T -i ens32 -c /etc/snort/snort.conf
      • 前台观察:snort -A console -i ens32 -u snort -g snort -c /etc/snort/snort.conf
  • 将 Snort 告警接入阈值体系
    • 方案 A:使用Barnyard2 + MySQL/日志解析,将告警写入数据库/日志,再由**Prometheus(通过 mysqld_exporter 或 Loki/Promtail)**统计速率并设置阈值与通知。
    • 方案 B:将 Snort 以syslog方式输出,由Promtail → Loki → PromQL做速率阈值与告警分组/抑制。

四、阈值设置与运维建议

  • 基线先行:先采集7–14 天历史数据,按分位数(如 p95/p99)设定初始阈值,再按业务周期(工作日/高峰)细化。
  • 分级与抑制:区分critical/warning,对同源/同类型告警设置group_wait/group_interval,并配置inhibit_rules避免重复告警。
  • 避免丢包影响判断:提升抓包稳定性(如增大网卡ringbuffer、内核netdev_max_backlog),否则“丢包导致的告警缺失”会干扰阈值评估。
    • 示例:ethtool -G ens33 rx 2048 tx 1024;echo “net.core.netdev_max_backlog=16384” >> /etc/sysctl.d/99-sysctl.conf && sysctl -p。

0