7、Iptables连接追踪state
7.1、什么是连接追踪
state(conntrack)连接追踪,顾名思义,就是跟踪(并记录)连接的状态
如下图:是一台IP地址为10.1.1.2的linux机器,我们能看到这台机器上有三条连接
1、机器访问外部HTTP服务的连接(目的端口80)
2、外部访问机器内FTP服务的连接(目的端口21)
3、机器访问外部DNS服务的连接(目的端口53)
连接追踪所做的事情就是发现并跟踪这些连接的状态,但这个跟踪状态与TCP协议没有关系
它是由内核netfilter在IP层实现,可IP层是无连接、无追踪的,那是如何知道这个IP是否存在
当用户发送请求时,会将用户的请求信息存储在内存开辟的空间中,对应在/proc/net/nf_conntrack
1、文件会记录源IP、目标IP、协议、时间、状态等信息
2、当用户再次发起请求,就可以通过文件获取该用户是否来过,以此来实现连接追踪机制
3、注意:该文件能存储的条目是受/proc/net/nf_conntrack_max设定大小所限
查看链接追踪详情:/proc/net/nf_conntrack
调整链接追踪大小:echo "100000" > /proc/sys/net/nf_conntrack_m
7.2、连接追踪有哪些状态
[ New ]:新请求,内存中不存在此连接的相关条目,以此识别为第一次请求,状态为NEW
[ ESTABLISHED ]:NEW状态之后,再次建立连接,由于此前的连接还没有失效,所以追踪后被视为已连接通讯状态,状态为ESTABLISHED
[ RELATED ]:相关的连接,比如ftp程序有两个连接,命令连接和数据连接,命令连接有来有往是一个独立的循环。数据连接有来有往又是另外一个许独立的循环
但是两者之间有关系,如果没有命令连接就不可能有数据连接,所以我们将这种称为"相关联的连接"
[ INVALID ]:无效的连接
7.3、连接追踪应用场景
正常情况下服务器的80端口不会主动连接其他服务器,如果出现了80端口连接其他服务器,那么说明出现了异常行为,或者可以理解为中了木马程序冰毒
如果关闭80端口的响应报文,就会造成请求进来无法响应,如果开放80端口则又会出现异常行为
所以我们需要对80端口做连接追踪限制,凡是从80端口出去的就必须是对某个请求的响应,也就是说通过80端口出去的状态必须是ESTABLISHED,不能是NEW
7.4、连接追踪场景配置
1、允许接收远程主机向本机发送的SSH与HTTP请求(NEW、ESTABLISHED)
2、同时也仅允许本机向其他主机回应SSH以及HTTP响应(ESTABLISHED)
3、但不允许本机通过22、80端口主动向外发起连接
#INPUT:
iptables -t filter -I INPUT -p tcp -m multiport --dport 80,22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -p tcp -m multiport --dport 80,22 -j DROP
#OUTPUT:
iptables -t filter -I OUTPUT -p tcp -m multiport --sport 22,80 -m state --state ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -m multiport --sport 22,80 -j DROP
标签:Iptables,ESTABLISHED,--,端口,state,80,连接,追踪
From: https://blog.51cto.com/u_13236892/6983471