能在 CentOS 上用 suricata -T 校验规则,并用 -r 回放本地 PCAP 在 fast.log 中看到首条告警。
上一课,你学会了把规则头拆成动作、协议、源地址、源端口、方向、目的地址、目的端口七段,并写出了语法正确的规则头。但规则此刻还只是写在文件里的一行字,Suricata 并不知道它的存在。要让这条规则真正生效,需要走完三步:校验、回放、核对。
校验,用测试模式确认规则语法无误,Suricata 愿意加载。回放,把录好的 PCAP 当作现场流量重新过一遍,看规则是否命中。核对,打开 fast.log,找到属于这条规则的告警行。
全程在 CentOS 命令行完成,只用本地 PCAP 与回环流量。
核心概念
测试模式:上线前先自检
类比:寄信前先让校对者通读草稿。格式错、地址缺,都被拦下,不会真的寄出去。
技术定义:测试模式让 Suricata 加载配置文件与规则文件,逐条检查规则语法后退出,不进入持续检测。命令是 suricata -T -c suricata.yaml -S 规则文件:-c 指向配置文件,-S 指向规则文件。输出里没有语法错误,说明规则被接受,可以进入回放。
核心概念
离线回放:对着录像复盘
类比:比赛前看录像。不必重赛一场,把录好的比赛放一遍,就能逐回合研究。
技术定义:离线回放让 Suricata 直接读取 PCAP 文件,像处理实时流量一样逐包匹配规则并写日志。官方论坛给出的用法是 suricata -r path-to-pcap。回放只读文件、不发数据包,适合拿真实抓包验证规则。配合 -S 指定规则文件,就能用自己的规则验证。
核心概念
fast.log:一行一条告警
类比:值班日志。每发生一件事,登记一行:时间、对象、原因。翻日志就能快速回顾发生了什么。
技术定义:fast.log 是 Suricata 的纯文本告警日志,规则每命中一次写一行,行里带有规则消息与签名 ID(sid)。论坛的验证流程正是回放后打开 fast.log 确认是否识别出威胁。fast.log 需要先在 suricata.yaml 中启用输出,否则不会生成。
先确认安装方式,再决定用哪条路径。官方快速入门写明:发行版打包安装,配置文件在 /etc/suricata/suricata.yaml;源码编译安装,默认前缀 /usr/local,配置文件在 /usr/local/etc/suricata/suricata.yaml。规则由 suricata-update 装到 /var/lib/suricata/rules,配置默认引用其中的 suricata.rules;日志在 /var/log/suricata/ 下,包括 suricata.log 与 stats.log。三处目录并不相同,报错时按日志提示逐个核对路径。
测试模式与离线回放都只读取本地文件,不产生网络流量。练习 PCAP 只能来自:你自己抓的包、授权靶场的抓包、明确授权捕获的流量,示例视频中的 DC-6 靶机抓包即属授权场景。不要对未授权的真实目标做任何探测或扫描。
校验、回放、核对首条告警
- 1
建实验目录,写入规则文件。这条是官方快速入门用于测试 IDS 功能的签名,原样复制即可;它会对任何载荷中含该内容的 IP 流量告警。选项细节后续课程展开。
bashmkdir -p /root/suricata-lab cat > /root/suricata-lab/local-test.rules <<'EOF' alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, updated_at 2010_09_23;) EOF - 2
确认配置文件路径。拿不准安装方式时先看构建信息;打包安装用 /etc/suricata/suricata.yaml,源码安装用 /usr/local/etc/suricata/suricata.yaml。
bashsuricata --build-info - 3
用测试模式校验规则。把 -c 指向实际配置文件,-S 指向刚写的规则文件。
bashsudo suricata -T -c /etc/suricata/suricata.yaml -S /root/suricata-lab/local-test.rules - 4
读输出。没有 error、规则加载成功,进入回放;有报错先看排查块,修正路径后重试。
- 5
新开一个终端,在回环接口抓包,写入 test.pcap。
bashsudo tcpdump -i lo -w /root/suricata-lab/test.pcap - 6
回到原终端,向 127.0.0.1 的 discard 端口发送匹配串。普通括号就是规则要匹配的字节。
bashecho 'uid=0(root)' | nc -u 127.0.0.1 9 - 7
回抓包终端,确认 tcpdump 有捕获计数后按 Ctrl+C 结束。已有授权环境抓的 PCAP 也可以代替,前提是其中包含规则匹配的内容。
- 8
离线回放 PCAP。默认读取安装时找到的 suricata.yaml。
bashsudo suricata -r /root/suricata-lab/test.pcap -S /root/suricata-lab/local-test.rules - 9
核对 fast.log 末尾。
bashsudo tail -n 20 /var/log/suricata/fast.log - 10
找到包含 2100498 的行,这就是这条规则触发的告警。再回放一次 PCAP,fast.log 会多追加一行。
你应该看到
suricata -T 输出无语法错误、规则加载成功;回放后 /var/log/suricata/fast.log 中出现包含 sid 2100498 的告警行。若 fast.log 为空,说明 PCAP 载荷中没有匹配内容,重新生成后再回放。
遇到问题:运行 suricata -T 或 suricata -r 时报错,提示文件找不到或路径不正确,规则未加载。
可能原因
- 命令行里 -c 或 -S 指向的文件不存在、路径拼错。
- suricata.yaml 中引用的文件不在预期位置。官方论坛建议:根据日志提示,逐一核对 suricata.yaml 里的每个路径。
- 把源码安装的路径当成打包安装路径,或反之;两者默认位置不同。
排查步骤
- 读报错日志,记下它提示的每个路径。
- 逐个检查这些路径与文件是否存在,修正 suricata.yaml 或命令行参数。
- 用 suricata --build-info 确认安装方式与版本。
- 确认 -S 指向的规则文件名与大小写完全一致。
- 重新运行 -T,直到无语法错误。
遇到问题:回放正常结束,但 fast.log 不存在或为空。
可能原因
- suricata.yaml 未启用 fast.log 输出。官方论坛提醒:别忘了在 suricata.yaml 设置中启用 fast.log 输出。
- PCAP 载荷里没有规则要匹配的内容,规则没有命中。
- 日志目录没有写入权限,回放没有真正落盘。
排查步骤
- 检查 suricata.yaml 中 fast.log 输出是否启用,启用后重新回放。
- 看 tcpdump 的捕获计数确认抓到了包;重发一次载荷再回放。
- 查看 /var/log/suricata/suricata.log,确认回放过程无报错。
- 用 sudo tail -n 20 /var/log/suricata/fast.log 查看文件末尾。
自检:你写完一条新规则。按顺序,先用哪条命令校验语法?再用哪条命令回放?最后从哪里确认规则命中?
先用 suricata -T -c <配置文件> -S <规则文件> 校验,无 error 即通过;再用 suricata -r <PCAP> -S <规则文件> 离线回放;最后打开日志目录下的 fast.log,找到包含该规则 sid 的告警行。