1. 程式人生 > >netfilter/iptables (一) 基礎概念

netfilter/iptables (一) 基礎概念

在介紹netfilter/iptables之前,我們先來了解下防火牆:

防火牆是指設定在不同網路或網路安全域之間的一系列部件的組合,它能增強機構內部網路的安全性。它通過訪問控制機制,確定哪些內部服務允許外部訪問,以及允許哪些外部請求可以訪問內部服務。它可以根據網路傳輸的型別決定IP包是否可以傳進或傳出內部網。

防火牆通過審查經過的每一個數據包,判斷它是否有相匹配的過濾規則,根據規則的先後順序進行一一比較,直到滿足其中的一條規則為止,然後依據控制機制做出相應的動作。如果都不滿足,則將資料包丟棄,從而保護網路的安全。

防火牆可以被認為是這樣一對機制:一種機制是攔阻傳輸流通行,另一種機制是允許傳輸流通過。一些防火牆偏重攔阻傳輸流的通行,而另一些防火牆則偏重允許傳輸流通過。 參考資料:

http://www.ha97.com/4082.html

防火牆的任務簡單描述就是“放行合法”或者“封鎖不合法”的資料包。至於哪些合法,哪些不合法就在於防火牆上規則(rule)的定義了。

Netfilter可以說是Linux的第三代防火牆。netfilter/iptables組成Linux平臺下的包過濾防火牆。

這裡寫圖片描述

我們需要弄清楚netfilter跟iptables是什麼關係。iptables是使用者態的,是一個規則編輯工具,防火牆管理員通過這個工具對記憶體中的規則執行新增、刪除及修改操作,它使插入、修改和除去資訊包過濾表中的規則變得容易。

netfilter則是核心態的(其實Linux和netfilter是兩個相互獨立的組織,Linux每隔段時間就會下載最新版的netfilter原始碼加入到自己所開發的Linux系統中),是核心的一部分,由一些資訊包過濾表組成,這些表包含核心用來控制資訊包過濾處理的規則集。。我們上面用iptables編輯的規則最終是通過netfilter機制來實現的。

簡而言之,就是防火牆管理員通過iptables工具,將“防火牆規則”寫入到netfilter的規則資料庫中。所以Linux防火牆比較正確的名稱應該是netfilter/iptables。

這裡寫圖片描述

上圖,很直觀的反應了使用者空間的iptables和核心空間的基於Netfilter的ip_tables模組之間的關係和其通訊方式,以及Netfilter在這其中所扮演的角色。

回過頭,我們看看iptables iptables內建了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網路地址轉換、包重構(修改)和資料跟蹤處理。 這裡我們主要介紹下iptables傳輸資料包的過程。因為我們後面的netfilter機制主要圍繞這個來介紹。

iptables傳輸資料包的過程:

  1. 當一個數據包進入網絡卡時,它首先進入PREROUTING鏈,核心根據資料包目的IP判斷是否需要轉送出去;
  2. 如果資料報就是進入本機的,它就會沿著圖向下移動,到達INPUT鏈。資料包到了INPUT鏈後,任何程序都會收到它;
  3. 本機上執行的程式可以傳送資料包,這些資料包會經過OUTPUT鏈,然後到達POSTROUTING鏈輸出;
  4. 如果資料報是要轉發出去的,且核心允許轉發,資料包就會如下圖所示向右移動,經過FORWARD鏈,然後到達POSTROUTING鏈輸出。

這裡寫圖片描述

需要清楚的是,上面這幅圖及其說明是針對iptables的。netfilter機制對此有重新命名,不要搞混了。

iptables命令(請參考相關資料如《Linux網路安全技術與實現》)配下去的每一條規則,最終都是通過netfilter機制實現的。 所以如果iptables不能滿足我們當下的需求,我們可以針對netfilter去對其進行擴充套件。這也是我們需要額外的研究netfilter機制的一個重要原因。

netfilter使使用者可以完全控制防火牆配置和資訊包過濾。您可以定製自己的規則來滿足您的特定需求,從而只允許您想要的網路流量進入系統。

未完,待續,後面我們將著重分析netfilter機制。