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
[[email protected] ~]# 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模块是否已加载
[[email protected] ~]# 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
在高并发状态下建议 卸载该模块 或者 提高该模块的连接的最大数目
[[email protected] ~]# modprobe -rnf_conntrack
[[email protected] ~]# modprobe -r nf_conntrack_ipv4
[[email protected] ~]# 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