Suricata防火墙模式设计解析与技术实现

Suricata防火墙模式设计解析与技术实现

suricata Suricata is a network Intrusion Detection System, Intrusion Prevention System and Network Security Monitoring engine developed by the OISF and the Suricata community. suricata 项目地址: https://gitcode.com/gh_mirrors/su/suricata

防火墙模式概述

Suricata作为一款先进的网络安全检测引擎,在其8.0版本中引入了实验性的防火墙模式。这种模式与传统威胁检测模式有着本质区别,它采用了一种更加严格的"默认拒绝"安全策略,需要管理员明确指定允许的流量。

防火墙模式的核心特性包括:

  1. 默认策略为drop,所有未明确允许的流量都将被拒绝
  2. 使用独立的规则文件存放防火墙规则
  3. 引入新的accept动作类型
  4. 要求规则必须显式指定动作作用域和规则挂钩点
  5. 按协议状态和文件顺序评估规则

核心概念解析

规则表(Table)体系

Suricata防火墙模式内置了多种规则表,每种表处理不同层级的流量:

  • packet:filter:处理原始数据包过滤
  • packet:td:处理数据包层威胁检测
  • app:<proto>:<state>:处理特定应用层协议在特定状态下的流量
  • app:td:处理应用层威胁检测

这些表构成了防火墙处理流水线的基础架构。

协议状态(State)机制

协议状态控制着规则在特定协议处理阶段的评估时机。例如:

  • tcp.flow_start:TCP流开始阶段
  • tls.client_body_done:TLS客户端数据完成阶段

应用层表会针对每个协议及其状态进行细分,如app:http:request_line表示处理HTTP协议请求行状态。

动作与作用域详解

accept动作

accept是防火墙模式特有的动作,用于允许流量通过,支持多种作用域:

  1. packet:仅允许当前数据包
  2. flow:允许当前数据包及后续同流的所有数据包
  3. hook:允许当前挂钩点/状态的规则,继续评估后续表
  4. tx:允许当前事务的规则,继续评估后续表

特别说明:某些协议(如DNS)在每个方向使用独立事务,此时accept:tx仅接受该方向的流量。

drop动作

drop用于拒绝流量,支持两种作用域:

  1. packet:直接丢弃当前数据包,不评估后续规则
  2. flow:丢弃当前数据包及后续同流的所有数据包

注意:防火墙模式不支持pass动作,以避免与威胁检测规则产生歧义。

显式规则挂钩机制

与传统IDS/IPS规则不同,防火墙规则必须显式指定其挂钩点。这种设计消除了隐式推断带来的边缘情况,提高了规则的确定性和安全性。

示例对比:

  • 传统威胁检测规则:alert http ... http.uri; ...
  • 防火墙规则:accept:hook http1:request_line ... http.uri; ...

每个应用层状态都有自己的默认drop策略,规则集必须为每个状态提供accept规则才能允许流量通过。

通用协议状态

所有协议至少支持以下基本状态:

请求端(to_server):

  • request_started:请求开始
  • request_complete:请求完成

响应端(to_client):

  • response_started:响应开始
  • response_complete:响应完成

HTTP协议状态

HTTP 0.9/1.0/1.1协议支持丰富的状态挂钩点:

请求端:

  • request_started:请求开始
  • request_line:请求行处理
  • request_headers:请求头处理
  • request_body:请求体处理
  • request_trailer:请求尾部处理
  • request_complete:请求完成

响应端:

  • response_started:响应开始
  • response_line:响应行处理
  • response_headers:响应头处理
  • response_body:响应体处理
  • response_trailer:响应尾部处理
  • response_complete:响应完成

TLS协议状态

TLS协议的状态机更为复杂:

客户端(to_server):

  • client_in_progress:客户端握手进行中
  • client_hello_done:ClientHello完成
  • client_cert_done:客户端证书发送完成
  • client_handshake_done:客户端握手完成
  • client_finished:客户端Finished消息发送

服务端(to_client):

  • server_in_progress:服务端握手进行中
  • server_hello:ServerHello发送
  • server_cert_done:服务端证书发送完成
  • server_hello_done:ServerHello完成
  • server_handshake_done:服务端握手完成
  • server_finished:服务端Finished消息发送

防火墙处理流水线

Suricata防火墙处理流程是一个精心设计的流水线架构:

  1. 预处理阶段:完成数据包解码、流状态更新、流重组和应用层解析
  2. 数据包过滤:首先评估packet:filter表中的规则
    • 默认drop:packet策略
    • 若结果为accept:hook,则进入下一阶段
  3. 数据包威胁检测:评估packet:td表中的IDS/IPS规则
    • 此阶段的动作不会立即执行,可能被后续处理修改
  4. 应用层处理:对于有应用层更新的数据包
    • 按顺序评估app:*:*表中的规则
    • 每个状态都需要accept:hook才能继续
    • 默认drop:flow策略
  5. 应用层威胁检测:最后评估app:td表中的规则
    • drop动作会进入告警队列
  6. 最终决策:告警处理流程根据action-order逻辑排序威胁检测告警,决定最终是drop还是accept

防火墙模式下的pass规则行为

在传统IDS/IPS模式中,pass规则会使检测引擎跳过后续流量的检测。但在防火墙模式下:

  • pass规则不再影响防火墙规则的处理
  • 检测引擎仍会处理该流的所有数据包
  • 仅跳过packet_tdapp_td表的评估

这种设计确保了防火墙策略的严格执行,同时提供了灵活的威胁检测绕过机制。

总结

Suricata的防火墙模式通过严格的默认拒绝策略、显式规则挂钩和精细的状态处理机制,为网络安全提供了更高级别的保护。其模块化的处理流水线和清晰的动作作用域设计,使得安全策略的实施更加精确和可控。虽然目前仍处于实验阶段,但这种模式展现了Suricata从传统IDS/IPS向更全面的网络安全解决方案演进的重要一步。

suricata Suricata is a network Intrusion Detection System, Intrusion Prevention System and Network Security Monitoring engine developed by the OISF and the Suricata community. suricata 项目地址: https://gitcode.com/gh_mirrors/su/suricata

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江焘钦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值