Stateful Firewall和SPI(stateful packet inspection) Firewall介绍

有状态防火墙 

       有状态防火墙会跟踪网络连接的状态,例如 TCP 流、UDP 数据报和 ICMP 消息,并且可以应用诸如 LISTEN、ESTABLISHED 或 CLOSING 等标签。状态表条目是为允许根据配置的安全策略通过防火墙进行通信的 TCP 流或 UDP 数据报创建的。一旦在表中,存储会话的所有相关数据包都被简化,比标准检查占用更少的 CPU 周期。即使没有配置允许来自该主机的通信的规则,相关数据包也被允许通过防火墙返回。如果在指定时间内没有看到流量(取决于实现),则从状态表中删除连接。应用程序可以定期发送 keepalive 消息 ,以防止防火墙在无活动期间或设计为长时间静默的应用程序断开连接。

       维护会话状态的方法取决于所使用的传输协议。 TCP 是一种面向连接的协议,会话是通过使用 SYN 数据包的三向握手建立的,并通过发送 FIN 通知结束。防火墙可以使用这些唯一的连接标识符来知道何时从状态表中删除会话,而无需等待超时。 UDP 是一种无连接协议, 这意味着它在通信时不发送与连接相关的唯一标识符。因此,会话只会在配置的超时后从状态表中删除。 UDP 打孔技术是一种滥用此特性以允许在互联网上动态设置数据隧道的技术。 ICMP 消息与 TCP 和 UDP 不同,它传递网络本身的控制信息。一个众所周知的例子是 ping 实用程序。  ICMP 响应将被允许通过防火墙返回。在某些情况下,UDP 通信可以使用 ICMP 来提供有关会话状态的信息,因此也将允许与 UDP 会话相关的 ICMP 响应返回。

简单SPI防火墙例子

IPv4

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i br0 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i br0 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

IPv6

ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -i br0 -j ACCEPT
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
ip6tables -A FORWARD -i br0 -j ACCEPT
ip6tables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -P INPUT DROP
ip6tables -P OUTPUT ACCEPT
ip6tables -P FORWARD DROP

包状态

NEW:一个新的连接包 (建立新连接后的第一个包)
ESTABLISHED:成功建立连接,即建立跟踪连接后所有封包状态 (跟在 NEW 包后面的所有封包)
RELATED:新建连接,由 ESTABLISHED session 所建立的新独立连接 
INVALID:非法连接状态的包 (DROP 封包)
UNKOWN:未知状态的封包

猜你喜欢

转载自blog.csdn.net/wgl307293845/article/details/121529987
今日推荐