iptables状态检测

    iptables状态检测是一种扩展匹配中的显式扩展,用于检测会话之间的连接关系的,有了检测我们可以实现会话间功能的扩展

什么是状态检测?

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

对于整个TCP协议来讲,它是一个有连接的协议,

在tcp的三次握手中:

NEW: 新建立的连接,连接追踪模板中无相应的条目时,客户端第一次发出的请求;(tcp三次握手中的第一次握手)

ESTABLISHED:NEW状态之后,边距追踪模板中的条目删除之前所进行的通信过程,都称为ESTABLISHED;(tcp的第二次第三次握手,叫做已建立的连接(ESTABLISHED))

INVALID:还有一种状态,比较诡异的,比如:SYN=1 ACK=1 RST=1,对于这种我们无法识别的,我们都称之为INVALID无法识别的

RELATED:表示发起一个新的连接,但是这个连接和一个现有的连接有关

-m state扩展

    启用连接追踪模板记录连接,并根据连接匹配连接状态的扩展;

专用选项:

--state STATE

示例 : 放行访问本机22,80端口的服务

# iptables -t filter -I INPUT-d 172.16.6.61 -p tcp -m multiport --dports 22,80 -m state --state  NEW,ESTABLISHED -j ACCEPT

# iptables -t filter -IOUTPUT -s 172.16.6.61  -p tcp  -m state --state  NEW,ESTABLISHED -j ACCEPT

调整连接追踪功能所能容纳的连接的最大数目:

/proc/sys/net/nf_conntrack_max 

当前追踪的所有连接:

/proc/net/nf_conntrack

[root@localhost ~]# cat/proc/net/nf_conntrack

ipv4     2 tcp     6 29 TIME_WAIT src=172.16.6.62 dst=172.16.6.61 sport=41644 dport=22 src=172.16.6.61dst=172.16.6.62 sport=22 dport=41644 [ASSURED] mark=0 secmark=0 use=2

ipv4     2 icmp    1 29 src=172.16.6.62 dst=172.16.6.61 type=8 code=0 id=20325src=172.16.6.61 dst=172.16.6.62 type=0 code=0 id=20325 mark=0 secmark=0 use=2

ipv4     2 tcp      6 299 ESTABLISHED src=172.16.6.61dst=172.16.6.11 sport=22 dport=63572 src=172.16.6.11 dst=172.16.6.61sport=63572 dport=22 [ASSURED] mark=0 secmark=0 use=2

conntrack

查看该conntrack模块是否已加载

[root@localhost ~]# lsmod | grepnf_conntrack

nf_conntrack_ipv4       9506 4

nf_defrag_ipv4          1483 1 nf_conntrack_ipv4

nf_conntrack           80390  2 nf_conntrack_ipv4,xt_state

在高并发状态下建议 卸载该模块 或者 提高该模块的连接的最大数目

[root@localhost ~]# modprobe -rnf_conntrack

[root@localhost ~]# modprobe -r nf_conntrack_ipv4

[root@localhost ~]# modprobe -rnf_defrag_ipv4

不同协议或连接类型追踪时的时长属性:

/proc/sys/net/netfilter/

如何放行被动模式下的ftp服务:

(1) 装载模块:

# modprobe nf_conntrack_ftp

 

(2) 放行请求报文

放行入站请求端口为21的请求报文;

放行所有状态为ESTABLISHED和RELATED状态的入站报文;

 

(3) 放行出站响应报文

放行所有状态为ESTABLISHED的出站报文;

 

如何保存及重载规则:

保存:

(1) service iptables save

/etc/sysconfig/iptables文件;

 

(2) iptables-save > /PATH/TO/SOMEFILE