Iptables 连接状态的理解

2015-02-11 13:29:09 +08:00
 myliyifei

就象前面说的,包的状态依据IP所包含的协议不同而不同,但在内核外部,也就是用户空间里,只有4种 状态:NEW,ESTABLISHED,RELATED 和INVALID。它们主要是和状态匹配一起使用。下面就简要地介绍以下这几种状态:

一般书上说的常见的情况好理解,比如发起第一个包SYN,状态是NEW,有了SYN/ACK应答后,状态就变成了ESTABLISHED。 但是我想问的是一些其他的情况下状态应该是什么样的。

1 SYN发送过去,但是对方在指定端口没开或者根本没有进程打开这个端口。一般是发送RST或者ICMP不可达。(DROP直接没有回包了),那么返回来的数据包 在INPUT链,到底是属于RELATED还是INVALID呢?

2 UDP/ICMP 的会话 包是不是只有NEW / ESTABLISHED 两种状态么?

3 关闭状态,前三个握手都是属于ESTABLISHED, 最后一个ACK发出来,这个包属于什么呢?另外关闭握手如果不正常,比如下面两种情况,又属于什么状态?

(1) 如果一方已经关闭或异常终止,而另一方不知道,此时TCP连接为半打开。不传输数据,另一方就不会检测到,(此时可以设置TCP的KEEPALIVE选项,来定时检测),如果发送数据,另一方会返回RST分节。

(2) 第四个分节ACK丢失,服务器端(被动关闭)会重发FIN分节。(对照前文,第一个分节发送之后如果没有ack,应该也是超时重发,但此点不确定)
2069 次点击
所在节点    问与答
2 条回复
myliyifei
2015-02-11 13:31:47 +08:00
还有个补充
4 像一些构造的异常的TCP数据包,比如XMAS攻击之类的,这些都属于invalid状态吗?没有必要一个个在写了吗

-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A INPUT -p tcp -m tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
myliyifei
2015-02-12 00:20:38 +08:00
来个高手解答下吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/170129

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX