iptables的基础知识-iptables中TCP三次握手

运维 系统运维
iptables的基础知识-iptables中TCP三次握手:iptabels被认为是Linux中实现包过滤功能的第四代应用程序。iptables包含在Linux2.4以后的内核中,它可以实现iptables防火墙、NAT(网络地址翻译)和数据包的分割等功能。本文介绍的是iptables的基础知识-iptables中TCP三次握手。

iptables的基础知识-iptables中TCP三次握手:

  一个TCP连接是通过三次握手的方式完成的。首先,客户程序发出一个同步请求(发出一个SYN分组);接着,服务器端回应一个SYN|ACK分组;最后返回一个ACK分组,连接完成,一共需要三个步骤,整个iptables过程如下所示:

  1. Client          Server  
  2.  
  3. 1 SYN ---> 
  4. 2         <--- SYN+ACK  
  5. 3 ACK ---> 
  6.          <--- ACK  
  7. ACK ---> 
  8.  

   

  接下来我们看具体iptables的过程,假设client(192.168.10.7)要访问server(192.168.10.100,同时启用iptables)的WEB主页。

  1 client首先发出一个SYN的连线请求(注意ack,rst等的值),源端口是1286,目的端口是80。

  2 Server收到着请求后应答一个SYN+ACK,因为是SERVER应答client,所以源端口是80,目的端口是1286。

  3 client再答复一个ACK,至此三步握手的过程结束,一个正常的连接建立。

  从以上的三步中可以看到,一个正常的tcp连接建立的过程。值得注意的是一个正常的tcp发起的请求,tcp中包头中SYN位是1,这就意味着如果一个新的包但是SYN却不置位,这个包肯定有问题。

  为了跟踪一个TCP连接的状态,我们在SERVER使用了如下命令:

  1.   iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT  
  2.  
  3.   iptables -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT  
  4.  

  接着看在连接建立过程中iptables状态表的变化:

  1> 由于CLIENT和SERVER之前没有任何连接,CLIENT发送的SYN(此时的TCP状态是SYN_SENT)请求进入iptables 的INPUT链,发现是一个新包,那么此时iptables将此状态定义为NEW,因为我们的规则允许,这个请求包被接受。

  2> server返回一个SYN+ACK的包(此时的TCP状态是SYN_RECIV),这个包要经过OUTPUT链(因为这个包是从本机发出的,目的地址是client),由于之前曾经收到一个包,此时个状态,已经变成了ESTABLISHED,按照规则,这个包成功发送出去。

  3> 接下来client发送一个ACK,同样由于INPUT中允许,server接受这个包,至此连接完成,在整个过程中状态从NEW变为ESTABLISHED(此时的TCP也是established)

  注意:在第二步的时候,server上TCP的状态是SYN_RECVD,对于iptables来讲,状态已经是established,但此时的三次握手并没有完成,实际是半连接(对与TCP来讲,必须是三次握手完成以后,状态才是established)。所以iptables面对SYNFLOOD攻击,可以通过控制SYN流量结合tc等实现。但是对于SYN攻击,即便能保护服务器,对于带宽的消耗也是没有办法的,因为攻击者消耗了你大部分带宽。具体连接过程中TCP状态是如何变化可参考看TCP/IP V1等著作(douglas E.comer或者Steven Richard等的经典之作)。

  注意iptables状态机制在用户空间里的部分不会查看TCP包的标志位(也就是说TCP标志对它而言是透明的)。如果我们想让NEW状态的包通过防火墙,就要指定NEW状态,我们理解的NEW状态的意思就是指SYN包,可是iptables又不查看这些标志位。这就是问题所在。有些没有设置SYN或ACK的包,也会被看作NEW状态的。这样的包可能会被冗余防火墙用到,但对只有一个防火墙的网络是很不利的(可能会被攻击哦)。那我们怎样才能不受这样的包的影响呢?可以使用tcp-flags进行检查。

  上一节:iptables中的状态检测  下一节:iptables中的ICMP

【编辑推荐】

IPtables防火墙使用技巧(超实用)

Linux下Iptables端口转发功能的解决

四种NAT的iptables实现

责任编辑:zhaolei 来源: netren
相关推荐

2011-03-16 11:17:56

IptablesICMP

2011-03-18 09:26:13

Iptables规则

2011-03-16 11:12:06

Iptables

2011-03-18 08:52:23

Iptables

2011-03-18 09:26:14

iptableslimit

2023-09-07 16:46:54

TCP数据传递

2020-12-08 06:34:16

TCP握手SYN 报文

2015-10-13 09:42:52

TCP网络协议

2024-01-12 08:23:11

TCPACK服务器

2023-10-24 15:22:09

TCPUDP

2024-10-09 20:54:16

2022-10-10 07:34:36

TCP三次握手区块链

2022-07-07 09:00:17

TCP 连接HTTP 协议

2019-06-12 11:26:37

TCP三次握手四次挥手

2021-01-29 06:11:08

TCP通信三次握手

2021-05-18 12:27:40

TCP控制协议

2011-03-16 11:06:55

Iptables防火墙

2021-03-08 18:08:08

TCP Connect 协议

2022-07-25 07:07:35

TCP客户端服务器

2020-02-17 10:10:43

TCP三次握手四次挥手
点赞
收藏

51CTO技术栈公众号