使用iptables實現資料包過濾(轉)

post0發表於2007-08-10
使用iptables實現資料包過濾(轉)[@more@]

  我本來打算寫一些iptables 的使用的文章,但是,經過閱讀Netfilter 郵件列表以及在其它論壇上的使用者問題以後,我決定在編譯核心和安裝iptables的基礎知識上多花一點時間。雖然大多對iptables的使用感興趣的人可能已經是LINUX的高手了,但是仍然有相當數量的LINUX新手會從這些入門的文章中獲得極大的幫助。

在下面的文章中,將對在LINUX2.4核心中取代了ipchains的iptables包過濾技術進行討論。我的計劃是,第一篇的著重討論介紹如何啟動和執行iptables的相關基礎知識,隨後的一篇將對使用iptables的細節問題上進行深入探討。

什麼是iptables?

  Iptables由兩個子系統組成:核心模組和使用者介面應用程式。對iptables的支援必需被編譯進LINUX核心或者編譯成一個可裝卸的模組。然後,可以為不同的任務(如偽裝、埠轉發、包過濾等)選擇安裝其它一些元件。同ipchains一樣,您可以根據在編譯到核心和可裝載模組之間進行選擇。

它能做什麼?

  Iptables模組能夠對輸入、輸出的IP包進行過濾和管理。Iptables模組是LINUX2.4核心中的Netfilter框架的一個組成部分。在我看到的某些有關Iptables的參考文獻中的敘述有些模糊,因為那些文章將Netfilter和iptables看成是一個東西。事實上,我們可以將Netfilter視為網路協議堆疊中可以讓其它模組操作網路資料包的一系列"鉤子",在資料包透過協議堆疊的某些特定的點上, Netfilter框架允許一個模組轉發或丟棄資料包、透過某種方式改變資料包、在使用者空間(非核心模式)對包進行排隊,當然也可以根本不去幹涉它。

  大多數情況下,在路由器或防火牆計算機中用iptables進行網路地址轉換(Network Address Translation-NAT,也稱為偽裝Masquerading)。通常,您不應在普通的主機或工作站上使用iptables。

  注意,iptables和Linux 2.4.x核心系列並沒有被廣泛採用,這些技術可能沒有達到最新的2.2.x核心和ipchains的組合那樣成熟。您可能不想冒險去用2.4.x核心和 iptables去架設您的防火牆或路由器。但是,現在是熟悉這些新工具的絕佳時機。

如何安裝iptables

  要在您的計算機上安裝iptables,您必需保證您的計算機上正在執行2.4.x核心的LINUX。從技術角度講,iptables模組能夠在2.3.x系列的核心上執行,但是,我不建議在關鍵任務中使用不成熟的中間開發版本來完成關鍵工作。如果您正在執行2.2.x核心,現在還沒有任何埠能夠使用(雖然iptables 的設計者宣稱在2.2.x核心上不是真的無法實現)。

  如果您一直在使用ipchains甚至ipfwadm,並且已經對2.4系列核心的特性有了一定程度的瞭解,為什麼不試著去掌握 iptables呢?有很多模組可以保證您在準備好轉換到2.4.x核心之前仍然使用原有的系統配置。當然,必需記住這個忠告:您可以選擇 iptables或者ipchains,也可以選擇ipfwadm。但是,同一個核心中只能擁有三者中的一個,如果您加入了iptables的核心支援,就不能再支援另外兩個模組中的任意一個。

  如果您還沒有(但是希望嘗試)執行2.4.x核心,您可以從下載。

  您還需要使用者空間的程式iptables,它可以從Netfilter主頁下載。Iptables的原始碼已經用bzip2壓縮過了,但是這個工具在很多LINUX的釋出中沒有被預設安裝。

編譯核心

  如果您以前從來沒有編譯過Linux核心,請不要擔心,因為它實際上沒有您想象的那樣難。解壓縮核心的原始碼後,README檔案會講述所有您必需知道的事情。我通常將核心原始碼在/usr/src目錄下解壓縮(當然,這個目錄根據不同人的喜好而不同)。解壓縮後的核心原始碼目錄將是 /usr/src/linux。

  您還需要下列程式的足夠新的版本:

* GNU C 2.91.66

* GNU Make 3.77

* binutils 2.9.1.0.25

* util-linux 2.10o

* modutils 2.4.2

* e2fsprogs 1.19

* reiserfsprogs 3.x.0b

* pcmcia-cs 3.1.21

* PPP 2.4.0

* isdn4k-utils 3.1pre1

  其中的一些程式(象isdn4k、pcmcia-cs和reiserfsprogs)僅僅在您需要這些元件的功能時才是必需的。例如,伺服器根本不需要對PCMCIA的支援。如果您根本不知道如何檢查這些程式的最新版本,您可以在 /usr/src/linux/Documentation/Changes檔案中獲得這些資訊。

  如果您需要升級上述的某些程式包,您可以去尋找對應您的LINUX釋出的程式包的最新版本。

  在執行下一步工作之前,一定要確保您得到了老版本LINUX核心核心的備份和在LILO(或者任何其它老版本核心的引導裝載器)中的一個入口。如果由於某種原因,您編譯的核心不能引導,您會需要這些備份。

  確信您已經獲得所有的所需元件之後,您就已經為編譯新的核心準備就緒了。將您的當前目錄轉換到/usr/src/linux或者是您存放核心原始碼的目錄下(當然,為了編譯新的核心,您必需以root身份登入),遵照README檔案的指導進行安裝,直到make config步驟。

  當編譯核心時,您可以選擇使用make config、make menuconfig或make xconfig中的任意一個。我的建議是使用make menuconfig或者make xconfig,因為它們允許您對需要的核心選項進行更快的選取。

  由於各個系統是不同的,我不知道您將為您的系統選擇哪些具體的選項,但是一定要確保您選擇了對您系統上的SCSI裝置、網路卡和系統上配置的其它裝置的支援。

  為了提供對Netfilter和iptable的支援,選擇Networking Options選單選項,然後選擇Network packet filtering (replaces ipchains)。您可以在將這項功能作為核心的一部分或者編譯成一個模組之間進行選擇。我通常將Netfilter和IP tables支援編譯成核心的一本分,而將不同的iptables元件作為模組進行編譯。

  選擇Network packet filtering replaces ipchains.

  下一步,在選單中選擇IP: Netfilter Configuration。

  然後,您會看到完整的Netfilter Configuration選單。使能IP tables support並且選擇您希望使用的iptables子系統。如果您不能確定該如何做,前進到下一步,將它們作為模組編譯就是了。您可能想在以後使用它們,將它們作為模組來處理並不會增加核心的大小和系統資源的佔用。

  IP: Netfilter Configuration

  完成核心安裝的配置之後,儲存配置並執行make bzImage, make modules和make modules_install。再次提醒您一定已經儲存了舊核心的一個備份,以防一些不可預知的錯誤的發生。現在,重新啟動系統,待系統啟動後執行uname -a。您可能會看到類似於這樣的程式碼:

  Linux endless 2.4.2 #3 SMP Wed Mar 7 10:58:04 MST 2001 i686 unknown

  最後,該是編譯使用者空間程式iptables的時候了。您仍然需要以root使用者身份登入。將原始碼解壓縮到iptables目錄,然後cd到iptables-1.2/目錄。執行make和make install,現在,您需要靜下心來"欣賞"硬碟隆隆地歌唱了。注意,安裝程式會將可執行檔案複製到/usr/local/sbin目錄,雖然它不是您root使用者的預設目錄。

  如果一切都很順利,我們就已經在核心中成功地安裝了對iptables和Netfilter的支援。下個月,我將 有組織地討論裝載其中一些模組的方法,並且建立一些您可能會在設定防火牆應用時涉及到的iptables規則。

可供參考的資源:

The Netfilter Project HomePage

Linux Networking-concepts HOWTO

unreliable-guides/networking-concepts-HOWTO/

原文作者 Joe "Zonker" Brockmeier

原文出處:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-940676/,如需轉載,請註明出處,否則將追究法律責任。

相關文章