赞
踩
前面的状态介绍来源于以下两篇博文:
https://blog.51cto.com/misliang/1371361
https://blog.csdn.net/dhRainer/article/details/84846417
conntrack将数据流的状态信息以Hash表的形式储存在内存中,包括五元组信息以及超时时间等。这里说的状态跟踪并非是指状态协议(如TCP)中连接状态的跟踪,而是conntrack特有的与网络传输协议无关的状态的跟踪。
下面介绍一下conntrack中的状态分类以及在TCP和UDP这两种4层协议中,是如何进行状态跟踪的。
五种状态
conntrack共可以为连接标记五种状态,分别如下:
NEW,表示这个分组需要发起一个连接,或者说,分组对应的连接在两个方向上都没有进行过分组传输。NEW说明这个包是我们看到的第一个包。意思就是,这是conntrack模块看到的某个连接第一个包,它即将被匹配了。比如,我们看到一个SYN包,是我们所留意的连接的第一个包,就要匹配它。第一个包也可能不是SYN包,但它仍会被认为是NEW状态。比如一个特意发出的探测包,可能只有RST位,但仍然是NEW。
ESTABLISHED,表示分组对应的连接已经进行了双向的分组传输,也就是说连接已经建立,而且会继续匹配这个连接的包。处于ESTABLISHED状态的连接是非常容易理解的。只要发送并接到应答,连接就是ESTABLISHED的了。一个连接要从NEW变为ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防火墙转发的。ICMP的错误和重定向等信息包也被看作是ESTABLISHED,只要它们是我们所发出的信息的应答。
RELATED,表示分组要发起一个新的连接,但是这个连接和一个现有的连接有关,例如:FTP的数据传输连接和控制连接之间就是RELATED关系。RELATED是个比较麻烦的状态。当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了。换句话说,一个连接要想是RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是RELATED的了,当然前提是conntrack模块要能理解RELATED。ftp是个很好的例子,FTP-data连接就是和FTP-control有RELATED的。还有其他的例子,
INVAILD,表示分组对应的连接是未知的,说明数据包不能被识别属于哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP错误信息。一般地,我们DROP这个状态的任何东西。
这些状态可以一起使用,以便匹配数据包。这可以使我们的防火墙非常强壮和有效。以前,我们经常打开1024以上的所有端口来放行应答的数据。现在,有了状态机制,就不需再这样了。因为我们可以只开放那些有应答数据的端口,其他的都可以关闭。这样就安全多了。
UNTRACKED :
这是一种特殊状态,或者说并不是状态。它是管理员在raw表中,为连接设置NOTRACK规则后的状态。这样做,便于提高包过滤效率以及降低负载。
conntrack是一种状态跟踪和记录的机制,本身并不能过滤数据包,只是提供包过滤的依据。 有状态是一种过滤依据,无状态实际也是一种过滤依据。
因此,需要小心的是,设置了NOTRACK,不代表是放行,只是它的状态是UNTRACKED。所以如果想要对这种包放行或者处理,同样需要配置相应的规则。具体使用方法可以查看下面“设置NOTRACK”部分的内容。
————————————————
笔记:
conntract -L (-p tcp -s ip1 ip2) 命令
或者安装iptstate后, 可用 iptstate 命令查看跟踪模块的连接状态表
测试:用xcap重放数据包对状态进行测试
通过上图-L -n -v 选项 查看通过各个规则的数据包,得出这个数据包所属的状态
测试目的:
测试对于没有任何连接状态信息的第一个通xcap回放的tcp包,iptables会判定数据包为什么状态?
测试结果:
首包是 SYN/ACK、FIN/ACK、RST这三种数据包会被判定为INVALID 数据包。
其他SYN、ACK、 ACK+PSH、 这几种数据包会判定为NEW包。
注测试中:只有 首包是SYN包的数据包才会在conntract状态信息表(用conntract -L查看到的)里查询得到相关的信息,其他的首包在状态信息表中都查询不到任何状态信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。