歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 再談iptables防火牆的連接狀態

再談iptables防火牆的連接狀態

日期:2017/2/28 15:44:31   编辑:Linux教程

  在前面的文中講過了iptables防火牆連接狀態中的ESTABLISHED狀態(http://www.linuxidc.com/Linux/2012-07/66586.htm)。除了這個狀態之外,iptables還有以下狀態,且聽我慢慢道來。實驗的網絡結構以下圖為准。

  以下圖為例為說明什麼是NEW的狀態,首先需要知道的是NEW與協議無關,其所指的是每一條連接中的第一個數據包,如下圖所示,客戶端主機使用TCP 50000連接服務端的TCP 22,這個連接中的第一個數據包的狀態就是NEW;其它的例如客戶端使用TCP 50001連接至服務端的TCP 22;客戶端的UDP 50000連接至服務端的UDP 53;還有客戶端對服務器端發出的ICMP數據包,以上這些例子中的第一個數據包的狀態都是NEW。

  在Windows系統上有一個tracert的命令,它可以幫助我們檢測兩台主機之間總共經過了多少路由。它的工作原理其實很簡單,主要利用了TTL值的存活時間。這個TTL值是指數據包在網絡上能存活的時間,早期以秒為單位,現在改為“所能跨越的路由器的跳數”。

  以下圖為例說明tracert工具是如何查詢最左邊Host1和最右邊主機Host2隔了多少路由器。首先tracert工具會送出第一個數據包,這個數據包的目的地址是最右邊的主機的IP,並且刻意將這個數據包的TTL值設定為1,接著,這個數據包被送到第一台的路由器H1,而第一台路由器H1在收到這個數據包後,會將數據包內的TTL值減1,因此,這個數據包的TTL值變為0,而這個值代表這個數據包的生命周期已盡,所以第一台路由器H1會丟棄這個數據包,並且返回一個ICMP(type 11 Time to live exceeded)數據包給Host1主機,以告訴Host1“你送出的數據包因生命周期已盡,故已遭丟棄”。這樣,tracert就可以從這個數據包得知第一台路由器H1的IP地址。

  接著tracert會送出第二個數據包,不過,這個數據包的TTL值會刻意指定為2,接著,第二個數據包送到第一台路由器H1,第一台路由器收到這個數據包後,會將其TTL減1,這時數據包內的TTL值變為1,因為TTL值不為0,所以生命周期未盡,因此,第一台路由器H1會將這個數據包傳給第二台路由器H2。不過,當第二台路由器H2把數據包內的TTL值減1後,這個數據包內的TTL值變為0,代表這個數據包的生命周期已盡,因此,第二台路由器H2會丟掉這個數據包,並且回送一個ICMP type 11(Time to live exceeded)傳給發送主機Host1,以告訴Host1“你送出的數據包因生命周期已盡,故已遭丟棄”。這樣,tracert就可以從這個數據包得知第二台路由器H2的IP地址。

Copyright © Linux教程網 All Rights Reserved