iptables的基础知识-iptables中TCP三次握手
创始人
2024-07-23 07:01:32
0

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实现

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
规避非法攻击 用好路由器远程管... 单位在市区不同位置设立了科技服务点,每一个服务点的员工都通过宽带路由器进行共享上网,和单位网络保持联...
范例解读VB.NET获取环境变... VB.NET编程语言的使用范围非常广泛,可以帮助开发人员处理各种程序中的需求,而且还能对移动设备进行...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...