歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 用Linux實現路由器和包過濾防火牆

用Linux實現路由器和包過濾防火牆

日期:2017/2/27 14:24:26   编辑:更多Linux
  用Linux實現路由器和包過濾防火牆     【路由器和防火牆】   路由器是一種廣泛運用在IP網段之間的設備,市場上有許多現成的產品。在應用中,我們經常將路由器跨接在廣域網和局域網之間,大多數的路由器產品也就是基於這種需要來設計的。但是隨著用戶IP網絡的擴展,我們需要一種能夠在多個以太網絡之間進行尋址的路由器,傳統的路由器產品中偶爾有幾款雙以太網絡接口的,但是這樣的產品價格尤其昂貴,而且要是支持快速以太網絡應用的話價格將是天文數字;第三層交換機可以實現這樣的功能,但是第三層交換機也不是便宜的家伙。   路由器工作的時候,根據它的某個端口收到的數據包的目的IP地址,查詢路由器自己的路由表,然後決定將數據包轉發到相應的端口。路由器的路由表有幾種:一種是根據路由器自己的每個端口IP地址和子網掩碼計算出來的路由,這種路由叫做“固定路由”;第二種是有系統管理員種設置的到某個子網需要通過某個下一級路由器的路由,這種叫“靜態路由”;還有就是在網絡環境中讓每個路由器都把自己的路由信息廣播出去,讓路由器之間進行互相學習,這樣學到的路由就叫做“動態路由”。路由器還會把目的地址不在自己路由表中的數據包固定轉發給一個預先設定IP地址,這樣的路由設置又叫“默認路由”。在路由匹配的過程中,一般有這樣的優先級:固定路由>靜態路由>動態路由>默認路由。   路由器只會查看IP數據包的目的地址,也就是說原則上它是“照單全收”,而且全部轉發,除非真的發不出去了。如果讓路由器在轉發數據包的時候,加一項檢查,檢查數據包的來源和數據包要求的應用層服務類型,根據預先設計的規則來判定這個數據包是應該轉發還是作別的處理,這樣這個路由器就不再是一個單純意義上的路由器,而是一種類型的防火牆——包過濾防火牆。   包過濾防火牆可以檢查數據包的來源、源端口、目的地址、目的端口,使用的傳輸層協議類型等項目,根據檢查的項目的內容來匹配一個規則表,當符合規則表中的定義的時候,就執行規則表事先定義的操作。一般來說,規則表可以定義這樣的操作:ACCEPT(通過)、NAT(MASQ地址轉換)、DENY(丟棄)、REJECT(拒絕,同時回送‘不可用’消息給源端)。   當然目前市場上也能買到支持包過濾防火牆的現成產品,但是價格問題還是我們不得不考慮的重要因素。尤其大多數產品都有許多許可證、性能等方面的限制。   Linux操作系統應運IP網絡而生,除了Linux價格上的優勢之外,更吸引人的是它內建的強大的網絡功能,除了做各種Internet上的應用服務之外,Linux還提供了完整的路由器功能和防火牆功能。而它所帶來的系統造價和功能的比例是相當誘人的,為什麼不一試呢?   【Linux系統的准備】   相對於現成的路由器產品,我們把這樣的路由器稱為“軟路由器”,當然這樣做出來的路由器性能絕對不會比“硬件路由器”的性能差,我們只要明白比如很多“25××”系列的路由器才只是采用25M主頻的摩托羅拉68030CPU(性能相當於Intel 80386)我們就知道了。   用來做“軟件路由器”的Linux系統主機硬件配置要求並不是太高,用作三五個局域網之間的路由選擇,數百台計算機的話,選用奔騰133以上的主機就足夠了,當然現在的市場上賽楊2或者奔騰4或者其他的CPU也不是很貴;配置64M內存,有條件的話可以配置到128M也無所謂;硬盤就不要太大了,否則也是浪費.   關鍵在於網絡適配器的配置,Linux系統支持大多數市場上能見到的以太網絡適配器,PCI卡的安裝比較簡單,只要內核支持,在開機的時候有多少卡都會被系統正確的識別出來。ISA卡的安裝也不復雜,詳細可以參考我以前的一篇文章   www.nyfzns.net www.520cat.com   下面是我在實際使用過的能夠正常工作的網卡:   ★Intel EtherEXPress Pro PCI100M   ★RealTek 8029/8139 PCI 10M/100M   ★D-link 系列 (使用Tulip 2114X驅動) PCI 10M   ★ACCTON EN1207 (使用Tulip 2114X驅動) PCI 100M   ★3COM全系列 (PCI/ISA 10M/100M)   ★AMD PC-NET 32 PCI 10M   ★大部分NE2000兼容網卡,Topstar、Dlink、ACCTON、SN2000等等   ★HardLink PCMCIA 筆記本專用網卡 10M   當然Linux能支持的網卡遠遠不止這些.   將網卡驅動加掛到Linux中有幾種方法,最常用的是用modprobe系統工具加掛一個內核模塊,比如加載一個NE2000兼容網卡的驅動可以這樣:   #modprobe ne io=0x300   其實大多數的PCI網卡並不需要指定IO地址范圍,就像加載一個ACCTON的EN1207c網卡可以這樣:   #modprobe tulip   將網卡驅動編譯到Linux內核中是一種最高效的做法,在編譯Linux內核的時候,使用   #make menUConfig   代替很多老資料上提到的“#make config”,這樣就會得到一個菜單,在菜單中“Network Device”選項下選定指定的網絡適配器的驅動程序,編譯完成以後就會得到一個完整的支持相應網卡的Linux內核。   對於很多系統只能識別一個的網卡,將第二個以後的網卡參數寫在/etc/lilo.conf中是最佳做法,這裡有一個系統中安裝呢4塊網卡,一個是PCI的RealTek 8139,另外3個是NE2000,這樣的話系統就識別8139網卡以後就不會自動識別後面的三個ISA卡,我們需要在/etc/lilo.conf中加上這樣一句:   append=-ether=3,0x240,eth1 ether=11,0x300,eth2 ether=4,0x260,eth3-   在編譯內核的過程中,我們可以在Network option中選擇“optimize as router not host”,這樣系統就會按照路由器而不是主機的方式進行優化,同時,還可以根據具體的需要選擇上“ Fast switching”和“ Forwarding between high speed interfaces”以及“ advanced router”。如果我們還計劃在這個機器上實現包過濾防火牆,那麼選擇上“ firewalling”和“ IP: masquerading”以及與“IP MASQ”相關的選擇項。   編譯內核的全部過程請參看“Linux Kernel Howto”。在http://howto.fhlfox.dhs.org/online....鬧形木迪癜姹盡?/a>   注意查看開機的系統提示或者使用dmesg命令可以看到系統是不是正常識別並且啟動相應的網卡的驅動程序,在上面例子中提到的具有一個Realtek8139網卡,三個NE2000網卡的機器上我們能夠看到這樣的情況:   rtl8139.c:v1.07 5/6/99 Donald Becker http://cesdis.gsfc.nasa.gov/linux/drivers/r   tl8139.Html   eth0: RealTek RTL8139 Fast Ethernet at 0x6000, IRQ 9, 00:e0:4c:dd:5f:85.   ne.c:v1.10 9/23/94 Donald Becker ([email protected])   NE*000 ethercard probe at 0x240: 00 40 05 1f 60 9a   eth1: NE2000 found at 0x240, using IRQ 3.   NE*000 ethercard probe at 0x300: 00 40 05 22 08 65   eth2: NE2000 found at 0x300, using IRQ 11.   NE*000 ethercard probe at 0x260: 00 40 05 23 59 0f   eth3: NE2000 found at 0x260, using IRQ 4.   然後是配置每個網絡端口的IP地址,當然我們可以使用操作系統的一些對話框來配置第一個網卡的參數,但是一個有經驗的網絡管理員一般是不這樣做的,因為這樣不能配置其他的網卡,我們必須學會用這個命令來配置第一塊網卡:   #ifconfig eth0 10.3.3.3 netmask 255.255.255.0 broadcast 10.3.3.255   第二塊網卡的名字就是eth1,其他依次是eth2,eth3等等。   由於計算機體系結構的限制,在一個普通PC主板上只有一個PCI控制器,而一個PCI控制器最多只能同時支持4個PCI設備,當然某些專用服務器上可能有支持兩個以上的PCI控制器。ISA網卡的安裝受到系統中斷號的限制,單CPU的系統中只有16個可用的IRQ號,扣除硬盤、內存、鍵盤、顯示卡等硬件已經所剩無幾,所以一般也是安裝4個卡,當然,雙CPU的系統可以有256個中斷號可用,這樣就寬裕了許多。   另外,我們還需要打開Linux系統的IP轉發開關,這一點非常容易,執行這一條指令:   echo 1 > /proc/sys/net/ipv4/ip_forward   當然這些配置命令最好是放到/etc/rc.d/rc.local中,這樣就不用每次開機以後重新配置了。   【Linux實現路由器】   正確配置ê拖嘤Φ腎P地址等參數以後,系統就自動計算出了每個端口所接的子網的固定路由,在這樣的一個例子中我們可以看到:   我們可以用命令“route -n”或者“netstat -r -n”來查看系統目前的路由表,在右邊圖二所示的例子中,我們可以得到這樣的路由表:   # route -n   Kernel IP routing table   Destination Gateway Genmask Flags Metric Ref Use Iface   10.3.2.4 0.0.0.0 255.255.255.252 U 0 0 0 eth0   10.3.2.128 0.0.0.0 255.255.255.128 U 0 0 0 eth3   10.3.253.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2   172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1   其中Destination項表示目的網絡,其大小可以通過子網掩碼(Genmask)計算出來,Flags項表示這個網段是否直接連接的,“U”就是直接可用的意思,Metric是級跳,Ref是優先級參考,Use Interface是連接的端口,Gateway欄目在需要其他路由器轉發的時候指明下一級路由器的地址。   使用命令route同時還可以建立或者刪除一個靜態路由,使用這樣的格式:   #route add -net 目標子網地址 netmask 目標子網掩碼 gw 下一級路由器的地址   同理,使用   #route del -net 目標子網地址 netmask 目標子網掩碼 gw 下一級路由器的地址   可以設置靜態路由。   使用   #route add default gw 網關地址   或者   # route add -net 0.0.0.0 netmask 0.0.0.0 gw 網關地址   我們把路由設置命令加到/etc/rc.d/rc.local中,以便其能夠在下次啟動的時候自動的運行所




Copyright © Linux教程網 All Rights Reserved