iptables/netfilter具有追踪连接状态功能,用于描述各会话连接之间的关系性。一般为四层协议:TCP/UDP/ICMP等等。

  为什么要用追踪连接状态呢?iptables/netfilter默认规则为拒绝的情况下,当用户访问一个iptables/netfilter允许的服务(端口)的时候,服务器如果想要回复客户端则还需要为其设定一个放行的规则(如果有多个就要多个规则),然而这是多余的,当防火墙允许客户端向某服务通信时,则认为此连接一定是符合规则的,与之相对的通信都应该是可靠的,可以对其放行。这样就可以实现一条规则放行所有可信的通信,而不用多条规则。

  iptables/netfilter追踪的连接状态有四种:

NEW 新连接,发送的第一个包;
ESTABLISHED 已经建立的连接
RELATED

数据连接和命令连接之间的关系,FTP服

INVALID 无效的报文请求,例如TCP的SYN,ACK,FIN都为1

 iptables/netfilter的状态追踪由state模块提供,state底层依赖于nf_conntrack(2.6内核之前叫作ip_conntrack),nf_conntrack是内核功能,负责具体的连接追踪的实施。

 nf_conntrack是有限制的,其根据内部算法,会在内核空间(内存)中记录各所追踪的连接的状态,并将其映射到/proc/net/nf_conntrack文件中。nf_conntrack连接追踪的限制由/proc/sys/net/nf_conntrack_max文件控制,可以修改该文件或者/etc/sysctl.conf。


相关的文件:

  /proc/sys/net/目录

  /proc/net/目录

# /proc/sys/net/nf_conntrack_max

 定义连接追踪的最大值,建议按需调大此值;

/proc/net/nf_conntrack

 记录了当前追踪的所有连接

/proc/sys/net/netfilter/nf_conntrak_tcp_timeout_established

 ESTABLISHED超时时长,默认时间比较长,建议调小此值。

注:由于连接追踪的限制问题,当超过限制时,会导致服务器拒绝服务。此时就需要将/prc/sys/net/nf_conntrak_max调大。如果是一个流量特别大的服务器,不建议开启此功能。