深入解析 Snort 规则转换为 iptables 规则及 fwsnort 部署
1. 不支持的 Snort 规则选项
虽然 iptables 能在很大程度上模拟 Snort 规则语言,但仍有许多 Snort 选项在 iptables 中没有很好的等效选项。部分选项可通过 iptables 的 u32 扩展模拟,待 u32 扩展移植到 2.6 内核后,fwsnort 的后续版本将支持。以下是一些不支持的选项:
| 选项 | 说明 | 模拟方式 |
| ---- | ---- | ---- |
| asn1 | 允许 Snort 将签名与解码后的抽象语法标记一(ASN.1)数据关联,常用于 SMB 协议。 | 难以在 iptables 中模拟其复杂处理。 |
| byte_jump | 数据包数据可决定 Snort 在进行下一次模式匹配或字节测试前跳过的字节数,对长度可变字段的协议(如 DNS)很有用。 | 最佳方式是使用 u32 匹配,但 2.6 内核暂不支持。 |
| byte_test | 让 Snort 对数据包数据的特定偏移量进行数值测试。 | 可部分用 pcre 选项模拟,但通常 byte_test 性能更好;u32 匹配也可部分模拟,2.6 内核暂不支持。 |
| flowbits | 用于 Snort 规则间传递状态信息。 | 可通过 iptables 的 CONNMARK 目标与字符串匹配扩展有限模拟,fwsnort 暂不支持;L7 - filter 项目也可部分模拟。 |
| fragbits | 允许 Snort 对 IP 报头中的分段位进行测试。 | iptables 虽能判断数据包是否分段,但功能不如 Snort 强大;开启连