iptables的状态检测机制

80酷酷网    80kuku.com

  

  1.什么是状态检测

  每个网络连接包括以下信息:源地址、目的地址、源端口和目的端口,叫作套接字对(socket pairs);协议类型、连接状态(TCP协议)和超时时间等。防火墙把这些信息叫作状态(stateful),能够检测每个连接状态的防火墙叫作状态包过滤防火墙。它除了能够完成简单包过滤防火墙的包过滤工作外,还在自己的内存中维护一个跟踪连接状态的表,比简单包过滤防火墙具有更大的安全性。

  iptables中的状态检测功能是由state选项来实现的。对这个选项,在iptables的手册页中有以下描述:

  state

  这个模块能够跟踪分组的连接状态(即状态检测)。

  --state state

  这里,state是一个用逗号分割的列表,表示要匹配的连接状态。有效的状态选项包括:INVAILD,表示分组对应的连接是未知的; ESTABLISHED,表示分组对应的连接已经进行了双向的分组传输,也就是说连接已经建立;NEW,表示这个分组需要发起一个连接,或者说,分组对应的连接在两个方向上都没有进行过分组传输;RELATED,表示分组要发起一个新的连接,但是这个连接和一个现有的连接有关,例如:FTP的数据传输连接和控制连接之间就是RELATED关系。

  对于本地产生分组,在PREROUTING或者OUTPUT链中都可以对连接的状态进行跟踪。在进行状态检测之前,需要重组分组的分片。这就是为什么在iptables中不再使用ipchains的ip_always_defrag开关。

  UDP和TCP连接的状态表由/proc/net/ip_conntrack进行维护。稍后我们再介绍它的内容。

  状态表能够保存的最大连接数保存在/proc/sys/net/ipv4/ip_conntrack_max中。它取决于硬件的物理内存。

  2.iptables的状态检测是如何工作的?

  2.1.iptables概述

  在讨论iptables状态检测之前,我们先大体看一下整个netfilter框架。如果要在两个网络接口之间转发一个分组,这个分组将以以下的顺序接收规则链的检查:

  PREROUTING链

  如果必要对这个分组进行目的网络地址转换(DNAT)和mangle处理。同时,iptables的状态检测机制将重组分组,并且以以下某种方式跟踪其状态:

  分组是否匹配状态表中的一个已经实现(ESTABLISHED)的连接。

  它是否是和状态表中某个UDP/TCP连接相关(RELATED)的一个ICMP分组。

  这个分组是否要发起一个新(NEW)的连接。

  如果分组和任何连接无关,就被认为是无效(INVALID)的。

  FORWARD链

  把分组的状态和过滤表中的规则进行匹配,如果分组与所有的规则都无法匹配,就使用默认的策略进行处理。



分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: