4. Snort运行模式与基础命令
Snort 的四种运行模式并不是四个互不相关的功能,而是同一条抓包—解码—检测流水线上不同“出口”的选择:嗅探模式把解码结果直接打印到终端,包记录模式把原始报文写入磁盘,IDS 模式在检测后产生告警但不阻断,IPS 模式则在检测命中后直接丢弃或替换报文。理解这条流水线,才能理解为什么同一份规则文件在不同模式下表现完全不同。
四种模式的命令行形态
嗅探模式是最轻量的形态,只做抓包和解码,不加载任何规则。常用参数是 -v(显示 TCP/UDP 头部摘要)、-d(显示应用层数据)、-e(显示以太网帧头)。例如在 eth0 上观察 20 个包:
snort -v -i eth0 -n 20
# 输出示例(示例数据,非实测)
# 10/12-09:31:02.114 192.168.10.23:51422 -> 10.0.0.8:80
# TCP TTL:64 TOS:0x0 ID:34112 IpLen:20 DgmLen:52 DF
# ******S* Seq:0x1A2B3C4D Ack:0x0 Win:0x7210 TcpLen:32
包记录模式在嗅探的基础上增加 -l 指定输出目录,-b 表示以 tcpdump 二进制格式(pcap)写入,而不是文本。默认文件名形如 snort.log.1697093462,其中数字是 Unix 时间戳。若希望按大小切分,可加 -b 配合 config logfile_limit,或使用 -G 指定文件名后缀。记录下来的 pcap 可以用 -r 回放:
snort -l /var/log/snort -b -i eth0
snort -r /var/log/snort/snort.log.1697093462 -c /etc/snort/snort.conf
IDS 模式必须通过 -c 加载配置文件,否则 Snort 会以嗅探模式启动。告警输出方式由 -A 决定:alert_fast 每行一条告警,适合快速浏览;alert_full 附带报文头部和载荷;alert_json 输出 JSON,便于对接日志平台;console 直接打印到终端。告警文件默认位于 -l 指定目录下的 alert 文件。例如:
snort -c /etc/snort/snort.conf -i eth0 -A alert_fast -l /var/log/snort
# /var/log/snort/alert 示例
# [**] [1:1000001:0] ICMP test ping [**]
# [Classification: Potentially Bad Traffic] [Priority: 2]
# 10/12-09:35:11.882 192.168.10.23 -> 10.0.0.8
# ICMP TTL:64 TOS:0x0 ID:2211 IpLen:20 DgmLen:84 Type:8 Code:0
IPS 模式与 IDS 模式最大的区别在于抓包接口和动作执行。它使用 -Q 进入内联模式,并配合 DAQ 模块(如 --daq afpacket 或 --daq nfq)接管转发路径。此时规则中的 drop、reject、sdrop 动作才会真正生效;在 IDS 模式下这些动作会被降级为 alert。典型启动方式:
snort -Q --daq afpacket -i eth0:eth1 -c /etc/snort/snort.conf -A alert_fast
配置文件加载方式与优先级
Snort 2.x 的配置入口是 snort.conf,其中通过 include 引入规则文件、通过 var 定义 HOME_NET 与 EXTERNAL_NET 等变量、通过 preprocessor 启用流重组和端口扫描检测。Snort 3 则改为 Lua 格式的 snort.lua,规则通过 ips.rules 或 include 加载。无论哪个版本,命令行参数与配置文件的关系都遵循“命令行覆盖配置文件”的原则:-i 覆盖 config interface,-l 覆盖 config logdir,-A 覆盖 output alert_*。因此排查“规则没生效”时,第一步应确认是否真的用了 -c,第二步用 snort -c /etc/snort/snort.conf -T 做配置自检,观察是否报出规则语法错误或变量未定义。
alert 而非 drop,流量不会被阻断,容易误判为“IPS 失效”。上线前应先用 -T 校验规则动作,再用测试流量验证 drop 是否生效。模式选择速查
| 模式 | 关键参数 | 是否加载规则 | 是否阻断 | 典型输出 |
|---|---|---|---|---|
| 嗅探 | -v / -d / -e | 否 | 否 | 终端报文摘要 |
| 包记录 | -l -b | 否 | 否 | pcap 文件 |
| IDS | -c -A -l | 是 | 否 | alert 文件 / syslog |
| IPS | -Q --daq -c | 是 | 是 | 阻断 + 告警 |
实际工程中,这四种模式常按“先嗅探确认链路、再包记录留证、然后 IDS 旁路观察、最后 IPS 串联阻断”的顺序推进。每一步都用 -T 或回放 pcap 验证规则命中情况,确认误报率可接受后再进入下一阶段,可以显著降低 IPS 上线后误阻断业务流量的风险。