深入解析 Snort 规则转换为 iptables 规则及 fwsnort 部署
1. 不支持的 Snort 规则选项
虽然 iptables 能在很大程度上模拟 Snort 规则语言,但仍有部分 Snort 规则选项难以找到合适的 iptables 等效项,具体如下:
| 选项 | 说明 | 替代方案 |
| ---- | ---- | ---- |
| asn1 | 允许 Snort 将签名与解码后的抽象语法表示法一(ASN.1)数据关联,常用于 SMB 协议。iptables 难以模拟该复杂处理。 | 无 |
| byte_jump | 使数据包数据决定 Snort 在进行下一次模式匹配或字节测试前跳过的字节数,适用于字段长度可变的协议。 | 可使用 u32 匹配模拟,但 2.6 内核暂不支持。 |
| byte_test | 让 Snort 对数据包数据的特定偏移量进行数值测试。 | 可用 pcre 选项模拟部分功能,但性能不如 byte_test;u32 匹配可在一定程度上模拟,2.6 内核暂不支持。 |
| flowbits | 用于 Snort 规则间传递状态信息,如检测协议登录阶段完成并设置标签。 | 可通过 iptables 的 CONNMARK 目标和字符串匹配扩展有限模拟,fwsnort 暂不支持;L7 - filter 项目也可部分模拟。 |
| fragbits | 允许 Snort 对 IP 头中的分段位进行测试。 | iptables 虽可判断数据包是否分段,但功能不如 Snort;开启连接跟踪时,数据包会自动重组。 |
| isdataat | 指示 Snort 测试特定偏移量是否存在数据,偏移量可绝对指定或