网络入侵检测系统支持哪些协议类型?一文看懂实际应用场景

最近帮朋友排查公司内网异常流量,发现一台服务器半夜频繁向外发包,用的是 NetFlow 数据,但防火墙日志里没记录——最后靠部署在镜像端口的 Suricata 抓到了 ICMP 隧道行为。这事儿让我意识到:选入侵检测工具前,真得先搞清它到底认不认你家网络里跑的那些协议

不是所有协议都能被“看见”

很多新手以为装个 Snort 或 Zeek 就能防住一切攻击,结果上线后 TCP/HTTP 流量检得挺勤,可 MQTT 设备上报数据、Modbus PLC 指令、甚至 DNS TXT 记录里的隐蔽通信,全被当“未知协议”直接放行。问题不在规则库,而在底层解析能力——协议支持,是入侵检测的硬门槛。

主流 IDS 支持的协议型清单(实测常见组合)

以当前较活跃的三款开源工具为例:

Suricata(v7.0+)
原生解析 TCP/UDP/ICMP/ICMPv6,HTTP/1.1、TLS 1.2/1.3(含 JA3 指纹)、DNS(含 EDNS、TSIG)、FTP、SSH(版本识别)、SMBv2/v3、MQTT 3.1.1/5.0、DTLS、VLAN/QinQ、PPPoE、GRE、IPv4/IPv6 双栈。对自定义协议可通过 Lua 脚本扩展解析逻辑。

Zeek(现名 Zeek Network Security Monitor)
协议解析更重语义,内置 HTTP、SSL/TLS、DNS、FTP、SMTP、IMAP、POP3、IRC、DHCP、NTP、SIP、XMPP、RADIUS、TFTP、SNMP、Modbus/TCP、DNP3、IEC61850 GOOSE/MMS 等。特别适合工控、物联网等垂直场景,比如 Modbus 功能码异常(如非法写保持寄存器)能直接触发告警。

Snort(v3.0)
基础协议覆盖扎实:IP/TCP/UDP/ICMP、HTTP、TLS、DNS、FTP、Telnet、SSH、SIP、RTSP。对新型协议支持偏保守,需依赖社区插件或自定义 preprocessor,例如通过 stream_tcphttp_inspect 模块组合识别 HTTP/2 流量。

协议不支持,等于“睁眼瞎”

举个真实例子:某智能楼宇系统用 BACnet/IP 协议控制空调与照明,攻击者伪造 BACnet Who-Is 请求广播,再响应伪造的 I-Am 报文,把控制权劫持到自己设备上。Snort 默认不解析 BACnet,Suricata 也没开对应模块,Zeek 则能识别并标记 bacnet: who-isbacnet: i-am 事件——这时候协议支持度,直接决定能否拦下这次攻击。

怎么查你手上的 IDS 支持啥协议?

别光看官网文档,动手验证最靠谱:

① 查 Suricata:

suricata --list-app-layer-protos

② 查 Zeek:

zeek -N | grep -i "^Protocol::"

③ 查 Snort:

snort -We | grep -A5 "Preprocessors"

输出里看到 modbusdnp3mqtt 这类关键词,说明对应协议解析器已编译启用;若只有 tcp/udp/ip,那高级应用层检测基本指望不上。

协议支持≠检测有效

支持解析只是第一步。比如 Suricata 能解 TLS SNI 域名,但默认规则不告警非常规域名(如 cdn123.xyz);Zeek 解出 DNS TXT 记录内容,但要靠自定义脚本匹配 base64 编码的 C2 域名。真正起作用的,是协议解析 + 规则/脚本 + 实际业务理解三者咬合。

下次部署 IDS 前,先抓几份真实流量(tcpdump -i eth0 -w test.pcap port 502 or port 1883),用 Wireshark 看清跑的是什么协议,再对照工具的协议列表和你的规则需求——少走半年弯路。