歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Linux 組網:如何用老式奔騰機和 Linux 構建防火牆

  作者:Rawn Shah    我在說您那台老舊的奔騰計算機呢!別因為老奔騰機不如現今花哨的新硬件動力十足就把它拋棄。它完全可以勝任小型商業或家庭辦公室的網絡防火牆工作。ipchains 是 Linux 下的防火牆軟件,其源碼可以免費獲得,並能夠在老式奔騰機的 T-1 連網環境下工作。與其花上幾千美元從軟件提供商處購買定制的防火牆軟件,還不如試試這種最實惠的解決方案。下面,我將一步步地教您如何安裝和配置 ipchains 軟件。   老式奔騰機並不只是堵門擱腳的垃圾,它們仍可用來計算!實際上,一個裝有 32MB 內存和 200-400MB 硬盤的的小機器就可以勝任小型辦公網絡防火牆的任務。 Linux 的緊湊版本只含有重要的系統應用程序,而沒有圖形用戶接口和用戶應用程序。安裝了緊湊版本的 Linux 之後,您就可以漂亮地把老機器變成防火牆了。    完成這些只需要一個叫 ipchains 的公開源碼的軟件包,它是由 Paul "Rusty" Russell 提供的。這個軟件具備了許多商業防火牆產品的特征:允許自定義網絡通信量的流向,及哪些訪問者可以獲准進出。    早期的 ipfwadm (IP Firewall Administration) 可以運行在 2.0.X 及更低的版本的 Linux 上。後來 ipchains 取代了 ipfwadm,且能工作在所有 2.1.x 和 2.2.x 版本的 Linux 下。隨著內核升級,它還將升級到 2.3.x 下的 netfilter 或其他更高版本。這麼頻繁更新的原因在於,防火牆的數據包過濾是基於內核本身的,因此防火牆軟件就必須亦步亦趨地緊隨內核變動。本文討論了 ipchains 是什麼,它能做什麼以及如何應用於不同場合。    Ipchains 和防火牆  ipchains 本質上是包過濾器。它檢查到達網絡接口的 IP 包,根據事先定義好的規則進行修改,然後再轉發給其它接口。    每個 IP 包都含有報頭 (header),裡面含有該包的目的地、及如何處理等控制信息(參見下圖)。需要傳送的數據則放在有效段(或稱為包體)中。通常情況下,有效段可以包含更高一級的包。例如,一個 TCP 包就總是包含於 IP 包的有效段中,該 TCP 包擁有自己的報頭和有效段。我們將會看到,ipchains 軟件可以改變 IP 報頭、TCP 報頭、UDP 報頭(未顯示)和 ICMP 報頭內的一些域值.        ipchains 的名稱來自其工作特點。它能夠創建合理過濾步驟,根據用戶定義的規則來處理包。這些步驟被"鏈接"在一起來創建包處理的完整規則體系。這個處理"鏈條"可以與具體的 IP 地址,或者網絡地址相結合。如下所示,系統中可以有很多這樣的"鏈條"來處理每個進入的 IP 包:      點擊查看大圖   運行 ipchains 的機器可以擁有許多網絡接口,每個接口都連接在不同的網絡上。任何可用的防火牆至少應有兩個獨立的接口,一個連到內部網絡,另一個連到外部網絡。數據包從一個接口進入,經由過濾"鏈條" 傳給另一個接口。    最簡單的情況下,ipchains 只執行三種策略:接受、和拒絕。它能接受來自指定 IP 地址或網絡的所有包,否決策略丟棄來自特定地方的所有包。拒絕策略則丟棄來自指定源頭的包,並且通知該源頭其請求的連接被拒絕.    有三類基本的鏈:輸入鏈、正向鏈和輸出鏈。輸入和輸出鏈分別處理對應於進入和流出接口的包的執行策略。正向鏈直接將通信量傳送給另一機器(在其執行了輸入鏈後)。這裡的"另一"機器多數情況下是路由器。ipchains 本身並不希望成為完全的路由引擎,所以它把包轉交給本機上的真正的軟件路由器或者另一節點上的硬件路由器。完整的ipchains引擎處理流程圖如下所示:          防火牆是可以那些能夠操縱輸入數據流和選擇可流出數據流的設備的通稱。在執行過程中,它可能會改變輸入或輸入數據流的狀態,以此隱藏機器的具體信息或防止非法入侵。    ipchains 有兩種運行方式:代理服務器和網絡地址轉換器。前者接收來自受防火牆保護的網絡內部機器的數據流,使用用戶定義的規則對其進行過濾處理,然後發送給外部網絡。總之,內部哪些機器可以訪問外部網絡是由代理服務器控制的,反之亦然。    當您沒有足夠的網絡地址,或者不願對您的內部網絡使用公共因特網址時,可以采用網絡地址轉換器 (NAT) 或是 IP 屏蔽 (Masqing) 的方法。它能把內部私有的地址轉換成合法的公共地址,即將多個內部地址映射成唯一的外部地址。這樣就不能從外部網絡上直接訪問到內部網絡的某個機器,從而達到保護內部機器的目的。    安裝防火牆  把一台 linux 機器配置成防火牆不是那麼容易的。您應該重新安裝穩定的 Linux 版本(即並非最新最強大的版本,可以試試 2.2.12),而不是轉變已有的 Linux 機器。在安裝過程中,最好只安裝那些最基本的系統組件。除非不得已的情況,一般不要安裝網絡服務器、NFS服務器或者編譯程序等其他組件,甚至不能運行Telnet服務器。如果您必須通過網絡登錄到本機,那就安裝"SSH Secure Shell" (ssh) 遠程登錄系統吧。總之需要記住,防火牆永遠不應該執行除了處理包和網絡安全之外的任務。    您使用的 Linux 中可能附帶著 ipchains 軟件。如果您是偏執狂,可以在確認主要的Linux提供商已經認證其合格後,才使用該版本。    首先要做的事情是確認您的機器上是否已經安裝了防火牆。請查看 /etc/rc.d/init.d 目錄下有沒有類似於 packetfilter、ipchains、pifwadm、firewall 或 proxy 等名字的"開始/關閉"腳本。如果存在這樣的文件,並且有來自 /etc/rc.d/rc2.d 或 /etc/rc.d/rc3.d 的符號連接,那麼該機器上很可能已安裝了防火牆,也許它還正運行在沒有任何具體防火牆策略的環境下呢。要驗證這一點,可以敲入如下命令:    # cat /proc/sys/net/ipv4/ip_forward   如果找不到這個文件,說明防火牆尚未安裝。如果返回值為0,則意味著防火牆已經安裝但沒有運行;返回值為1表示正在運行。    您也可以下載 ipchains 的源碼來自己編譯。這麼的時候,要運行校驗和程序來確認這份源碼是可靠的。(通常采用 md5sum 命令)。ipchains 網站上列出了校驗和的有效值,您校驗的結果應該和它們完全匹配。當前的 ipchains 版本是 1.3.9。    如果這些值全部無法匹配,就得查查編譯內核時是否把 Masquerading 打開了。缺省情況下,這些選項在編譯內核時是打開的。但如果您決定自己來編譯 Linux 2.2.x 版本的內核,就必須對如下選項說 YES :    CONFIG_EXPERIMENTAL  CONFIG_MODULES  CONFIG_NET  CONFIG_FIREWALL  CONFIG_INET  CONFIG_IP_FORWARD  CONFIG_IP_MASQUERADE  CONFIG_IP_MASQUERADE_IPPORTFW   CONFIG_IP_MASQUERADE_IPAUTOFW  CONFIG_IP_MASQUERADE_ICMP  CONFIG_IP_ALWAYS_DEFRAG  CONFIG_DUMMY  CONFIG_IP_MASQUERADE_MFW    內核編譯完畢,就要把防火牆安裝為系統服務的一項。這樣系統初始化時就會啟動它。系統服務是系統啟動過程中由系統初始進程執行的,不同的系統服務有不同的初始化優先級別。級別 0 表示系統完全卸載可以關斷電源;級別 1 則表示沒有網絡支持的單用戶模式;級別 2 和 3 一般用作網絡支持的多用戶模式,也就是多數機器的運行模式。還有一些其他的級別,但都不常用。    為了創建防火牆服務的開始腳本並安裝在級別 2 和 3 下,首先要如下所示創建 ipchains 的系統"開始/關閉"腳本文件,並把它保存在 /etc/rc.d/init.d 或 /etc/init.d/ 目錄下(保存在哪個目錄據所使用 Linux 版本而定)。    #!/bin/sh  # Firewalling with ipchains, startup/shutdown script    PATH=/sbin:/bin:/usr/sbin:/usr/bin    [ -f /etc/packetfiler.rules ] exit 0     case "$1" in     start)       echo -n "Starting ipchains firewall:"       /sbin/depmod -a  # Comment the following line if you do not intend to support   # using FTP through the firewall       /sbin/modprobe ip_masq_ftp  # Insert lines to support other application protocols here         /sbin/ipchains-restore < /etc/firewall.rules exit 1         echo "1" > /proc/sys/net/ipv4/ip_forward    # If you do NOT use PPP, SLIP or DHCP for any of your network   # interfaces on this machine, comment the following line        echo "1" > /proc/sys/net/ipv4/ip_dynaddr         echo "."       ;;     stop)       echo -n "Shutting down ipchains firewall:"         echo "0" > /proc/sys/net/ipv4/ip_forward    # Comment the following line if you do NOT use PPP, SLIP or DHCP       echo "0" > /proc/sys/net/ipv4/ip_dynaddr         /sbin/ipchains -X       /sbin/ipchains -F       /sbin/ipchains -P input ACCEPT       /sbin/ipchains -P output ACCEPT       /sbin/ipchains -P forward ACCEPT       echo "."       ;;     *)       echo "Usage: /etc/rc.d/init.d/packetfilter {startstop}"       exit 1       ;




Copyright © Linux教程網 All Rights Reserved