V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
myliyifei
V2EX  ›  问与答

Iptables 连接状态的理解

  •  
  •   myliyifei · 2015-02-11 13:29:09 +08:00 · 2069 次点击
    这是一个创建于 3423 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就象前面说的,包的状态依据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,应该也是超时重发,但此点不确定)
    
    2 条回复    2015-02-12 00:20:38 +08:00
    myliyifei
        1
    myliyifei  
    OP
       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
        2
    myliyifei  
    OP
       2015-02-12 00:20:38 +08:00
    来个高手解答下吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2920 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:31 · PVG 20:31 · LAX 05:31 · JFK 08:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.