第一章 關於本教程
我應該學習這門教程嗎?
本教程演示了如何使用 netfilter 來建立功能強大的 Linux 有狀態防火牆。您需要的只是使用 Linux 2.4 內核的現有 Linux 系統。安裝了 Linux 2.4 內核的膝上型計算機、工作站、路由器或服務器都符合要求。
您應該相當熟悉標准網絡術語,如 IP 地址、源和目標端口號、TCP、UDP 和 ICMP 等。學完本教程後,您將會懂得如何創建 Linux 有狀態防火牆,而且會有幾個示例配置可供您在自己的項目中使用。
關於作者
如果有關於本教程內容的技術問題,請通過
[email protected] 聯系作者 Daniel Robbins。
Daniel Robbins 居住在新墨西哥州的 Albuquerque。他是 Gentoo Technologies, Inc. 的總裁兼 CEO,Gentoo Linux(用於 PC 的高級 Linux)和 Portage 系統(Linux 的下一代移植系統)的創始人。他還是 Macmillan 書籍 Caldera OpenLinux Unleashed、SuSE Linux Unleashed 和 Samba Unleashed 的合作者。Daniel 自二年級起就與計算機某些領域結下不解之緣,那時他首先接觸的是 Logo 程序語言,並沉溺於 Pac-Man 游戲中。這也許就是他至今仍擔任 SONY Electronic Publishing/Psygnosis 的首席圖形設計師的原因所在。Daniel 喜歡與妻子 Mary 和新出生的女兒 Hadassah 一起共度時光。
第二章 首要步驟
定義目標
在本教程中,我們將創建 Linux 有狀態防火牆。此防火牆將會在 Linux 膝上型計算機、工作站、服務器或路由器上運行;其主要目的是只允許某些類型的網絡通信流通過。為了增加安全性,我們將配置防火牆,使它刪除或拒絕我們不感興趣的通信流,以及可能會造成安全性威脅的通信流。
獲取工具
開始設計防火牆之前,需要做兩件事。首先,需要確保 "iptables" 命令可用。作為 root,輸入 "iptables",查看它是否存在。如果不存在,那麼需要先安裝它。以下是安裝方法:訪問 http://netfilter.samba.org,下載可以找到的 iptables.tar.gz 的最新版本(目前是 iptables-1.1.2.tar.gz)。然後,輸入以下命令來安裝它(為簡便起見,省略了輸出):
# tar xzvf iptables-1.1.2.tar.gz
# cd iptables-1.1.2
# make
# make install
內核配置,第 1 部分
安裝之後,應該有一個 "iptables" 命令可供使用,還有一個方便的 iptables 幫助頁面("man iptables")。好;現在只需要確保已在內核中構建了必需的功能。本教程假設您編譯自己的內核。進入 /usr/src/linux,輸入 "make menUConfig" 或 "make xconfig";我們將啟用一些內核網絡功能。
內核配置,第 2 部分
在 "Networking options" 部分中,確保至少啟用了以下選項:
<*> Packet socket
[*] Network packet filtering (replaces ipchains)
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: advanced router
[*] IP: policy routing
[*] IP: use netfilter MARK value as routing key
[*] IP: fast network address translation
[*] IP: use TOS value as routing key
然後,在 "IP: Netfilter Configuration --->" 菜單中,啟用每個選項,這樣我們就擁有了完整的 netfilter 功能。雖然我們不會使用所有 netfilter 功能,但最好啟用它們,這樣您可以在以後進行一些實驗。
內核配置,第 3 部分
"Networking options" 類別下有一個網絡選項不應該啟用:明確擁塞通知。讓這個選項保留禁用狀態:
[ ] IP: TCP EXPlicit Congestion Notification support
如果啟用了這個選項,那麼 Linux 機器將不能繼續與 8% 的因特網進行網絡通信。啟用 ECN 時,Linux 機器發送出的一些包將會設置 ECN 位;不過,這個位會使許多網際路由器感到困惑,因此一定要禁用 ECN。
好,現在已根據我們的需要正確配置了內核,編譯一個新的內核,安裝它,然後重新引導。現在開始使用 netfilter :)
防火牆設計基礎
在創建防火牆時,"iptables" 命令是我們的朋友。我們使用它與內核中的網絡包過濾規則進行交互。我們將使用 "iptables" 命令來新建規則、列出現有規則、刷新規則和設置缺省包處理策略。這就意味著要創建防火牆,需要輸入一系列 iptables 命令,這就是我們首先要討論的內容(此時請別輸入此命令!)……
# iptables -P INPUT DROP
您現在看到的是一個幾乎“完美”的防火牆。如果輸入此命令,您將會得到難以置信的完美保護,它可以防止任何形式的進入惡意攻擊。那是因為此命令告訴內核刪除所有進入網絡包。雖然這個防火牆非常安全,但它有點傻。但在繼續討論之前,讓我們研究一下此命令是如何執行操作的。
設置鏈策略
"iptables -P" 命令用於為包過濾規則鏈設置缺省策略。在本示例中,iptables -P 用於為 INPUT 鏈設置缺省策略,INPUT 是一個內置鏈,包括了應用於每個進入包的規則。通過將缺省策略設置成 DROP,告訴內核應該刪除(即,廢棄)到達 INPUT 規則鏈末端的任意包。而且,由於我們還沒有對 INPUT 鏈添加任何規則,因此所有包都會到達此鏈的末端,而且所有包都會被刪除。
再次聲明,這個命令本身根本沒有用。但是,它演示了一個很好的防火牆設計策略。我們從缺省情況下刪除所有包開始,然後逐步開放防火牆,這樣它將會滿足我們的需要。這種做法可以確保防火牆會盡可能安全。
再次聲明,這個命令本身根本沒有用。但是,它演示了一個很好的防火牆設計策略。我們從缺省情況下刪除所有包開始,然後逐步開放防火牆,這樣它將會滿足我們的需要。這種做法可以確保防火牆會盡可能安全。