温馨提示×

Ubuntu Sniffer如何自定义规则

小樊
32
2025-12-15 22:27:13
栏目: 智能运维

Ubuntu 下自定义嗅探与告警规则的实用方案

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

  • 若指的是tcpdump/Wireshark等抓包工具,它们本身不支持“规则报警”,但可通过BPF 过滤表达式精准筛选流量,或与脚本结合实现告警。
  • 若需要基于“规则”的入侵检测/防御,应使用Snort/Suricata这类 IDS/IPS,在其规则文件中编写签名与阈值策略,实现实时告警与阻断。

二、使用 Snort 自定义规则(推荐)

  • 安装与准备
    • Ubuntu 21.04 等版本可用包管理器安装 Snort 2.x;如需Snort 3,通常从源码编译(涉及libdaq、可选gperftools等依赖)。安装完成后可用snort -V查看版本信息。Snort 支持多线程、脚本化配置与更好的跨平台能力。
  • 配置要点
    • 编辑或确认主配置中规则路径与网络变量,例如在/etc/snort/snort.conf中设置var HOME_NET 192.168.1.0/24,并确保包含你的自定义规则文件(如include $RULE_PATH/local.rules)。
  • 规则语法速览
    • 基本结构:<action> <protocol> <src_ip> <src_port> -> <dst_ip> <dst_port> (<options>)
    • 常用动作:alert(告警并记录)、log(仅记录)、pass(忽略)、activate/dynamic(激活/动态规则)。
    • 地址与端口:any、CIDR(如192.168.1.0/24)、端口范围(如1:1024)、取反(!80)。
    • 方向符:->(单向)、`<>``(双向)。
  • 自定义规则示例(写入/etc/snort/rules/local.rules
    • ICMP 探测告警
      • alert icmp any any -> $HOME_NET any (msg:"ICMP Probe Detected"; sid:1000001; rev:1;)
    • HTTP 敏感关键字告警
      • alert tcp any any -> $HOME_NET 80 (msg:"HTTP Suspicious Keyword"; content:"' OR 1=1 --"; http_client_body; sid:1000002; rev:1;)
    • 半开连接阈值告警(SYN Flood 雏形)
      • alert tcp any any -> any any (msg:"Possible SYN Flood"; flags:S; threshold: type both, track by_src, count 100, seconds 60; sid:1000003; rev:1;)
  • 启动与验证
    • 控制台实时告警:sudo snort -i <interface> -c /etc/snort/snort.conf -A console
    • 后台运行:sudo snort -i <interface> -c /etc/snort/snort.conf -D
    • 规则语法检查:sudo snort -T -c /etc/snort/snort.conf
    • 查看告警日志:/var/log/snort/alert(或控制台输出)。

三、使用 Suricata 自定义规则(可选)

  • 安装与配置
    • 在 Ubuntu 上可通过发行版仓库或官方方式安装 Suricata,编辑/etc/suricata/suricata.yaml启用规则路径(如rule-files)与日志输出。
  • 规则示例(写入/etc/suricata/rules/local.rules
    • alert icmp any any -> $HOME_NET any (msg:"ICMP Probe"; sid:1000001; rev:1;)
    • alert http any any -> $HOME_NET 80 (msg:"HTTP SQLi Attempt"; content:"' OR 1=1 --"; http_client_body; sid:1000002; rev:1;)
  • 启动与验证
    • sudo suricata -i <interface> -c /etc/suricata/suricata.yaml -v
    • 查看fast.logeve.json等输出以确认告警。

四、仅用抓包工具实现“规则化”筛选与简单告警

  • tcpdump BPF 过滤示例
    • 捕获目标端口为8080的 HTTP POST 请求:sudo tcpdump -i <interface> -nn -A 'tcp port 8080 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
    • 半开连接检测(SYN 洪泛雏形):sudo tcpdump -i <interface> -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'
  • 结合 Shell/Python 触发告警
    • 将 tcpdump 输出重定向到日志,脚本轮询关键字并通过mail/curl等方式通知(需预装邮件或 webhook 工具)。
    • 注意:抓包工具本身不产生“规则报警”,需自行实现检测与通知逻辑。

五、排错与性能优化要点

  • 权限与接口
    • 抓包/检测需root或具备相应能力(如cap_net_raw),确保以sudo运行并指定正确的网卡接口(如eth0/ens33)。
  • 规则与配置校验
    • 使用snort -T -c /etc/snort/snort.conf做语法与包含路径检查,避免因规则错误导致无法启动。
  • 降低误报与负载
    • 在规则中精确限定源/目的 IP 与端口,必要时使用阈值threshold)与内容修饰符(如http_client_body);仅抓取必要流量,减少资源占用。
  • 日志与维护
    • 定期查看/var/log/snort/alert,并结合实际业务调整规则;保持规则库与软件版本及时更新

0