?? linux免費防火墻試用手記(轉(zhuǎn)).txt
字號:
作者:hansome
email: hansome@chinaasp.com
日期:9/6/2001 9:22:49 AM
引言:作為一個網(wǎng)管,為了保護你的網(wǎng)絡,你可以花數(shù)萬元來對流入流出的信息進行控制,也可以分文不花而達到同樣的目的。聽起來是不是覺得不太可能?下面就讓我們來試一試吧!不試怎么知道行不行呢?
24小時在線的寬帶Internet連接的優(yōu)點是顯而易見的,它快速、便宜、方便。不過,它潛在的危險相對來說,則不易為人們所注意。事實上,如果沒有合適的保護,這種不間斷的連接將使你公司的服務器和數(shù)據(jù)時刻處于危險之中。
一個帶有防火墻功能的路由器可以有效地消除這些危險。你可以花很多的錢去買一個路由器,也可以把錢省下來,完全使用Linux內(nèi)建的路由和防火墻的功能來達到目的。在很多情況下,你甚至可以把你的Linux服務器同時作為路由器使用。不過,如果你的Web站點信息流量很大的話,最好使用一臺PC來單獨完成這項任務。
使信息可進可出
有時,你可能想讓路由器限制內(nèi)部網(wǎng)中特定的PC,使其無法從Internet訪問,不過,更多時候,你會讓Linux路由器阻止一些不速之客的訪問。在使用DSL或者線纜連接時,一般都使用一個HUB,將其中一個端口連到Internet。這種情況下,只要是能夠連接到HUB上的人,就可以使用一些很容易得到的軟件,對流過你站點的數(shù)據(jù)進行監(jiān)聽,甚至可以直接訪問你的網(wǎng)絡資源。
為此,我們可以關(guān)閉Telnet和FTP等容易被居心叵測者所監(jiān)聽的服務。這顯然可以保證網(wǎng)絡免于被入侵的威險,但是一般來說,公司都會用得上這些服務。也就是說,公司的業(yè)務一般要求路由器即要有安全性,又要讓信息能夠順暢地流入流出。所以,你應該做的是有選擇性的限制對這些服務的訪問,而不是完全關(guān)閉它們。一旦你建立好了合適的配置腳本,Linux路由器/防火墻就會為你完成這些工作。
服務、端口和協(xié)議
一般來說,e-mail或者Web等Linux服務器,都必須可以被外部網(wǎng)所能訪問。對于這種類型的通信,一些行業(yè)的標準端口常被用于幫助定義這些服務。比如,Web服務器一般使用80端口,SMTP(用于電子郵件服務)一般使用25端口等等。服務器里運行的服務以及其使用的端口,可以在/etc/services文件里找到。
(這是我一臺Linux機器上的services文件內(nèi)容)
此外,你還要清楚路由器應該使用什么協(xié)議。以太網(wǎng)的協(xié)議種類很多,不過最常用的是TCP和UDP協(xié)議。(機子所使用的協(xié)議可以在/etc/protocols中找到)。
使用的命令
對于Linux路由器來說,我們使用的其實只是內(nèi)核中IP地址轉(zhuǎn)發(fā)和防火墻部分。所以你根本不需要額外的軟件,只需要一些命令腳本,為路由器在處理收到的數(shù)據(jù)包時所做的反應定一些規(guī)則。這其中包括一系列輸入、輸出和轉(zhuǎn)發(fā)方面的規(guī)則。
輸入方面的規(guī)則要調(diào)整流入的數(shù)據(jù)包,比如,如果運行的是Web服務器,那么你可能想使用端口80來接收流入的數(shù)據(jù)包。輸出方面的規(guī)則定義路由器是否允許數(shù)據(jù)被送到Internet,這常被用于拒絕與一些特定站點的連接(通過IP地址)。轉(zhuǎn)發(fā)方面的規(guī)則,用于控制數(shù)據(jù)包從一個地方轉(zhuǎn)發(fā)到另一個地方;通過在網(wǎng)絡里定義特定的子網(wǎng)并且設置規(guī)則只允許一些子網(wǎng)可以轉(zhuǎn)發(fā)信息,從而達到限制Internet訪問的目的。
設置過程
在我所使用的Red Hat7 Linux路由器里,要管理防火墻的行為,我使用ipchains來設置規(guī)則(在Red Hat 6或者更早的版本里使用ipfwadm)。對于一些其它的Linux發(fā)行版,雖然名字可能不一樣,但是功能卻是完全一樣的(比如,F(xiàn)reeBSD中要使用ipfw)。在不同的發(fā)行版本中,防火墻命令的語法會有一些細微的差別(對于這些差別,可以用man命令來查看),不過,只要熟悉了其中一個版本中的配置,其它版本中的配置都是類似的。防火墻配置的管理最好的辦法就是使用在系統(tǒng)啟動過程中會調(diào)用的腳本。
對于我例子中的腳本,我做如下說明:
1. 我的路由器中有兩個網(wǎng)卡(NIC),分別是eth0和eth1。
2. eth0通過HUB連接到LAN,并且在192.168.1.0/24的網(wǎng)絡中(24指的是子網(wǎng))。
3. eth1連接在線纜或者DSL調(diào)制解調(diào)器上,并且使用的IP地址是由ISP提供的207.1.1.1。
默認情況下,Linux路由器會接收并且送出所有的信息,這相當于和下面一系列的命令等價:
ipchains -F
ipchains -P input ACCEPT
ipchains -P output ACCEPT
ipchains -P forward ACCEPT
在本例中:
* -F選項會重置所有規(guī)則,去除所有規(guī)則,然后重新開始配置。
* -P選項告訴防火墻使用默認的規(guī)則,直到有新的規(guī)則對其進行改變。事實上,如果只使用默認規(guī)則,路由器將很容易受到攻擊。
從關(guān)到開
我們可以先打開所有的服務,然后再來關(guān)閉那些不想讓別人訪問的東西,這看起來似乎很不錯。不過在實際中,我們往往把這個過程倒過來,也就是說,我們首先禁止所有的和路由器的通信,然后再把一些特定的服務和端口打開。所以我們可以采用以下的命令過程:
ipchains -F
ipchains -P input DENY
ipchains -P output REJECT
ipchains -P forward DENY
對這些命令說明如下:
* -P input DENY對所收到的數(shù)據(jù)包不做任何反應。
* -P output REJECT不接收任何數(shù)據(jù)包,但會給出一個ICMP無法到達的返回信息。
下面,我們再增加規(guī)則,允許內(nèi)部網(wǎng)里的信息流出:
ipchains -A input -i lo -j ACCEPT
ipchains -A output -i lo -j ACCEPT
ipchains -A input -i eth0 -s 192.168.1.0/24 -j ACCEPT
ipchains -A output -i eth0 -d 192.168.1.0/24 -j ACCEPT
剛開始的兩行告訴路由器接收所有流入的信息,放行所有流出的信息。第三行和第四行為內(nèi)部網(wǎng)網(wǎng)卡eth0建立一些流入和流出的規(guī)則。
這其中:
* -i選項指定要應用規(guī)則的接口(在第一行中是lo,在最后兩行中使用的是eth0)。
* -A告訴路由器要增加一個規(guī)則。
* -j告訴路由器如何處理數(shù)據(jù)包。
* -s指示源地址(對于輸入而言)。
* -d指明目的地址(對于輸出而言)。
第三行在內(nèi)部網(wǎng)(eth0)上創(chuàng)建了一個輸入規(guī)則,允許路由器接收所有源地地址為192.168.1.0/24的數(shù)據(jù)包。第四行指明,所有去往以上地址的數(shù)據(jù)包都可以通行。
轉(zhuǎn)發(fā)
下面,我們將增加一些規(guī)則,控制流出數(shù)據(jù)的轉(zhuǎn)發(fā):
ipchains -A forward -i eth1 -s 192.168.1.0/24 -j MASQ
ipchains -A forward -i eth0 -s 192.168.1.0/24 -j ACCEPT
ipchains -A forward -i eth0 -d 192.168.1.0/24 -j ACCEPT
這三條轉(zhuǎn)發(fā)的規(guī)則非常的簡單。第一行告訴路由器允許所有源地址為192.168.1.0的數(shù)據(jù)都可以發(fā)到Internet上。-j MASQ選項告訴路由器要使用IP偽裝,這使得多個內(nèi)部網(wǎng)主機可以使用同一個IP地址來訪問Internet。接下來兩行創(chuàng)建的規(guī)則,允許路由器轉(zhuǎn)發(fā)所有源自或者送往內(nèi)部網(wǎng)192.168.1.0的數(shù)據(jù)包。
到此,最基本的東西就已經(jīng)配置完成。但是,有時,我們可能需要限制一些內(nèi)部網(wǎng)里的用戶對Internet的訪問。要做到這一點,我們可以讓用戶使用不同的子網(wǎng),這樣,他的IP地址和規(guī)則不相符,那么所有源自這些主機的數(shù)據(jù)包就不能轉(zhuǎn)發(fā)到Internet。類似地,我們卻可以讓這些用戶使用其它的服務(比如e-mail服務等)。
開啟信息通路
到現(xiàn)在為止,我們的路由器還不會正常工作,因為我們已經(jīng)使用DENY和REJECT選項把路由器鎖住,它不會讓任何信息通過?,F(xiàn)在我們需要添加一些腳本命令來打開各需要的Internet服務。比如,要讓用戶可以訪問我們的Web站點,我們可以添加以下的命令:
ipchains -A output -i eth1 -p tcp -s 207.1.1.1 1024:65535 -destination-port 80 -j ACCEPT
ipchains -A input -i eth1 -p tcp ! -y --source-port 80 -d 207.1.1.1 1024:65535 -j ACCEPT
這兩行,可以讓路由器向遠程的服務器發(fā)送一個數(shù)據(jù)包,請求一個連接(第一行),并且接收一個流入的數(shù)據(jù)包(第二行)。因為我們的信息流出接口使用了IP地址偽裝,所以所有向外的連接其使用的IP地址看起來似乎都是207.1.1.1(這個地址只是一個例子)。同樣,如果我們想讓用戶訪問外部的POP3電子郵件服務,我們只需要把這兩行命令的端口號80改為110(POP3端口)即可。不管你要添加什么服務,只要增加相應的行即可。
允許訪問
如果你不想讓外部世界來訪問我們的路由器服務,那么我們已經(jīng)達到目的了,因為我們?nèi)鄙俚囊?guī)則已經(jīng)被設置成拒絕所有的信息流入的請求。但是有時我們需要在服務器上運行Web服務,以讓外部的人也可以訪問,這時我們可以添加以下命令:
ipchains -A input -i eth1 -p tcp --source-port 1024:65535 -d 207.1.1.1 80 -j ACCEPT
ipchains -A output -i eth1 -p tcp ! -y -s 207.1.1.1 80 --destination-port 1024:65535 -j ACCEPT
第一行告訴路由器去接收(-j ACCEPT)所有來自外部網(wǎng)并且目的地址是我們路由器的數(shù)據(jù)包。接著的一行讓路由器可以發(fā)送數(shù)據(jù)包。要配置其它的服務,其和以上的命令非常的類似。比如,我們要在內(nèi)部運行SMTP或者POP3服務器,那么我們只需將上述命令的端口80分別改為25和110即可。
例圖所述的網(wǎng)絡結(jié)構(gòu)圖
檢查并且激活服務
在任何時候,你都可以輸入“ipchains -L”命令來檢查你的規(guī)則腳本。
通過更改一些系統(tǒng)文件,你可以讓這些腳本在每一次路由器啟動時,都會被自動的被激活。要做到這一點,方法很多。比如,如果你的ISP給你的是一個動態(tài)IP地址并且你的系統(tǒng)在啟動時使用“/sbin/pump”來獲取這一地址,那么你必需更改你的“/etc/pump.conf”文件,將其配置為等“/sbin/pump”完成后,再激活腳本。如果你使用的是靜態(tài)IP地址,那么你可以在“/etc/rc.d/rc.local”后面來激活腳本。
最后,一定要測試一下,確保路由器所做的和自己想像中的完全一樣。此外,一旦你的網(wǎng)絡和服務有更改或者用戶的增加減少,你的這些腳本可能都要相應地做一些調(diào)整。
摘自:計算機世界網(wǎng)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -