使用netfilteriptables構建防火墻_第1頁
使用netfilteriptables構建防火墻_第2頁
使用netfilteriptables構建防火墻_第3頁
使用netfilteriptables構建防火墻_第4頁
使用netfilteriptables構建防火墻_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、如何使用 netfilter/iptables構建防火墻對于 internet上的系統(tǒng),不管是什么情況都要明確一點:網(wǎng)絡是不安全的。因此,雖然創(chuàng)建一個防火墻并不能保證系統(tǒng)100安全,但卻是絕對必要的。linux提供了一個非常優(yōu)秀的防火墻工具netfilter/iptables。它完全免費、 功能強大、 使用靈活、 可以對流入和流出的信息進行細化控制,且可以在一臺低配置機器上很好地運行。本文將簡單介紹使用netfilter/iptables實現(xiàn)防火墻架設和internet連接共享等應用。netfilter/iptabels應用程序,被認為是linux 中實現(xiàn)包過濾功能的第四代應用程序。netfi

2、lter/iptables包含在 2.4 以后的內核中,它可以實現(xiàn)防火墻、nat (網(wǎng)絡地址翻譯)和數(shù)據(jù)包的分割等功能。netfilter工作在內核內部,而iptables則是讓用戶定義規(guī)則集的表結構。 netfilter/iptables從 ipchains和 ipwadfm( ip 防火墻管理)演化而來,功能更加強大。下文將netfilter/iptabels統(tǒng)一稱為iptables。可以用 iptables為 unix 、linux 和 bsd個人工作站創(chuàng)建一個防火墻,也可以為一個子網(wǎng)創(chuàng)建防火墻以保護其它的系統(tǒng)平臺。iptales只讀取數(shù)據(jù)包頭,不會給信息流增加負擔,也無需進行驗證。要想

3、獲得更好的安全性,可以將其和一個代理服務器(比如squid )相結合。基本概念典型的防火墻設置有兩個網(wǎng)卡:一個流入,一個流出。iptables讀取流入和流出數(shù)據(jù)包的報頭,將它們與規(guī)則集(ruleset )相比較,將可接受的數(shù)據(jù)包從一個網(wǎng)卡轉發(fā)至另一個網(wǎng)卡,對被拒絕的數(shù)據(jù)包,可以丟棄或按照所定義的方式來處理。通過向防火墻提供有關對來自某個源地址、到某個目的地或具有特定協(xié)議類型的信息包要做些什么的指令,規(guī)則控制信息包的過濾。通過使用iptables系統(tǒng)提供的特殊命令iptables建立這些規(guī)則,并將其添加到內核空間特定信息包過濾表內的鏈中。關于添加、去除、編輯規(guī)則的命令,一般語法如下:iptabl

4、es -t table command match target 1表( table )-t table選項允許使用標準表之外的任何表。表是包含僅處理特定類型信息包的規(guī)則和鏈的信息包過濾表。有三個可用的表選項:filter、nat 和 mangle。該選項不是必需的,如果未指定,則filter作為缺省表。各表實現(xiàn)的功能如表1 所示。表 1 三種表實現(xiàn)的功能2命令( command )command部分是 iptables命令最重要的部分。它告訴 iptables命令要做什么, 例如插入規(guī)則、將規(guī)則添加到鏈的末尾或刪除規(guī)則。表2 是最常用的一些命令及例子。表 2 命令的功能和樣例3匹配( mat

5、ch)iptables命令的可選match 部分指定信息包與規(guī)則匹配所應具有的特征(如源地址、目的地址、 協(xié)議等) 。匹配分為通用匹配和特定于協(xié)議的匹配兩大類。這里將介紹可用于采用任何協(xié)議的信息包的通用匹配。表3 是一些重要且常用的通用匹配及示例說明。表 3 通用匹配及示例說明4目標( target)目標是由規(guī)則指定的操作,對與那些規(guī)則匹配的信息包執(zhí)行這些操作。除了允許用戶定義的目標之外,還有許多可用的目標選項。表4 是常用的一些目標及示例說明。除表 4 外,還有許多用于建立高級規(guī)則的其它目標,如log 、redirect 、mark 、mirror和 masquerade等。表 4 目標及示

6、例說明應用 iptables與 ipchains和 ipfwadm 不同的是, iptables可以配置有狀態(tài)的防火墻。iptables可以檢測到源地址和目的地址、源端口和目的端口及流入數(shù)據(jù)包的順序,即iptables記住了在現(xiàn)有連接中, 哪些數(shù)據(jù)包已經(jīng)被允許接收。這使得暫時性的端口只有在需要時才會被打開,并且會拒絕所有永久性占用端口的請求,大大地加強了安全性。同時, 那些被更改了報頭的數(shù)據(jù)包, 即使包含有一個被允許的目的地址和端口,也會被檢測到并被丟棄。此外, 有狀態(tài)的防火墻能夠指定并記住為發(fā)送或接收信息包所建立連接的狀態(tài)。防火墻可以從信息包的連接跟蹤狀態(tài)獲得該信息。在決定新的信息包過濾時,

7、防火墻所使用的這些狀態(tài)信息可以增加其效率和速度。1啟動和停止iptables 下面將正式使用iptables來創(chuàng)建防火墻。啟動和停止iptables的方法取決于所使用的 linux 發(fā)行版,可以先查看所使用linux 版本的文檔。一般情況下, iptables已經(jīng)包含在linux 發(fā)行版中, 運行 iptables -version來查看系統(tǒng)是否安裝了iptables。在 red hat 9.0中,安裝的版本是iptables v1.2.7a。如果系統(tǒng)沒有安裝iptables,則可以從下載。2查看規(guī)則集上面僅對iptables的用法做了一個簡單介紹,使用中可以運

8、行man iptables來查看所有命令和選項的完整介紹,或者運行iptables -help來查看一個快速幫助。要查看系統(tǒng)中現(xiàn)有的iptables規(guī)劃集,可以運行以下命令:iptables -list 下面是沒有定義規(guī)劃時iptables的樣子:chain input (policy accept) target prot opt source destination chain forward (policy accept) target prot opt source destination chain output (policy accept) target prot opt sou

9、rce destination 如上例所示,每一個數(shù)據(jù)包都要通過三個內建的鏈(input、output 和 forward)中的一個。filter是最常用的表,在filter表中最常用的三個目標是accept 、drop 和 reject 。drop 會丟棄數(shù)據(jù)包,不再對其進行任何處理。reject 會把出錯信息傳送至發(fā)送數(shù)據(jù)包的主機。圖 1 red hat 9.0中安全設置的gui工具在 red hat 9.0中,提供一個gui程序來讓用戶對系統(tǒng)的安裝級別進行簡單的配置。該工具的啟動方法是:主選單系統(tǒng)設置安全工具(如圖 1 所示) 。在此將安全級別設為“高級”,并選擇使用默認的防火墻規(guī)則。點

10、擊確定后,再用iptables -list顯示,發(fā)現(xiàn)iptables與沒有定義規(guī)則前已經(jīng)有很大不同,如下所示:rootworkstation root# iptables -list chain input (policy accept) target prot opt source destination rh-lokkit-0-50-input all - anywhere anywhere chain forward (policy accept) target prot opt source destination rh-lokkit-0-50-input all - anywhere

11、 anywhere chain output (policy accept) target prot opt source destination . 現(xiàn)實中一般不使用這個gui 工具,因為它的功能有限,也不夠透明。 相比較而言, suse 9.0 中相應的配置工具要好得多,它可以在gui下對防火墻進行更加細化的配置(比如增加了 ip 轉發(fā)和偽裝等功能的配置)。盡管這樣,一般還是自己來增加和刪除規(guī)則。圖 2 suse 9.0中 yast配置工具中的防火墻設置3增加規(guī)則本例中的規(guī)則將會阻止來自某一特定ip 范圍內的數(shù)據(jù)包,因為該ip 地址范圍被管理員懷疑有大量惡意攻擊者在活動:# iptable

12、s -t filter -a input -s 123.456.789.0/24 -j drop 也可以很輕易地阻止所有流向攻擊者ip 地址的數(shù)據(jù)包,該命令稍有不同:# iptables -t filter -a output -d 123.456.789.0/24 -j drop 注意這里的a選項,如前所述,使用它說明是給現(xiàn)有的鏈添加規(guī)則。4刪除規(guī)則網(wǎng)絡上的惡意攻擊者總是在變化的,因此需要不斷改變ip。假設一個網(wǎng)上攻擊者轉移到新的 ip 地址,而其老的 ip 地址被分配給一些清白的用戶,那么這時這些用戶的數(shù)據(jù)包將無法通過你的網(wǎng)絡。這種情況下,可以使用帶-d 選項的命令來刪除現(xiàn)有的規(guī)則:# i

13、ptables -t filter -d output -d 123.456.789.0/24 -j drop 5缺省的策略創(chuàng)建一個具有很好靈活性、可以抵御各種意外事件的規(guī)則需要大量的時間。對于那些沒有時間這樣做的人,最基本的原則是“先拒絕所有的數(shù)據(jù)包,然后再允許需要的”。下面來為每一個鏈設置缺省的規(guī)則:# iptables -p input drop # iptables -p forward drop # iptables -p output accept 這里選項 -p 用于設置鏈的策略,只有三個內建的鏈才有策略。這些策略可以讓信息毫無限制地流出,但不允許信息流入。很多時候需要接收外部信

14、息,則可使用以下命令:# iptables -t filter -a input -s 123.456.789.0/24 -j accept 6syn的使用不能關閉所有端口,也不能只指定某些端口處于打開狀態(tài),那么怎樣才能設置一個有效的規(guī)則,既可以允許普通用戶正常通過,又可以阻止惡意攻擊者訪問網(wǎng)絡呢?剛開始使用iptables的人可以充分利用syn 標識來阻止那些未經(jīng)授權的訪問。iptables只檢測數(shù)據(jù)包的報頭,事實上,除iptables以外,很多其它有用的數(shù)據(jù)包分析都是基于報頭的。比如,在進行web沖浪時,一個請求從你的pc發(fā)送至其它地方的web服務器上, 該服務器會響應請求并發(fā)回一個數(shù)據(jù)包

15、,同時得到你系統(tǒng)上的一個臨時端口。與響應請求不同的是, 服務器并不關心所傳送的內容??梢岳眠@種特點來設置規(guī)則,讓它阻止所有沒有經(jīng)過你系統(tǒng)授權的tcp連接:# iptables -t filter -a input -i eth0 -p tcp -syn -j drop 這里的 -i指的是網(wǎng)卡, -p 則是指協(xié)議, -syn則表示帶有syn 標識設置的tcp數(shù)據(jù)包。syn用于初始化一個tcp連接,如果自己機器上沒有運行任何服務器,別人也就不會向你發(fā)送 syn數(shù)據(jù)包。7有狀態(tài)的數(shù)據(jù)包的檢測前邊的例子把每一個數(shù)據(jù)包看成是獨立的,而不是相互關聯(lián)的,依靠的是數(shù)據(jù)包的頭信息。 iptables會檢查數(shù)據(jù)

16、包的源和目的ip 地址、源和目的端口、流入數(shù)據(jù)包的順序號、tcp先后順序的信息及頭標記(syn 、ack 、fin、rst等)的狀態(tài), 即它會跟蹤整個連接會話,從而使整個過濾過程是相互關聯(lián)的。8共享一個internet連接網(wǎng)絡地址翻譯和ip 偽裝都可以實現(xiàn)多臺主機共享一個internet連接,這個局域網(wǎng)可以是 linux 和 windows系統(tǒng)組成的多系統(tǒng)局域網(wǎng)。假設現(xiàn)在有一臺機器,配有兩個網(wǎng)卡, 其中 eth0 為“公共”網(wǎng)卡,eth1 為“私有”網(wǎng)卡,即eth0 被分配了一個靜態(tài)的、可路由的ip 地址,而eth1 被分配了一個私有的、不能路由的ip,該 ip 是屬于該局域網(wǎng)子網(wǎng)的。要實現(xiàn)上

17、述功能,需要向nat 和 filter表中添加一些鏈:# iptables -t nat -a postrouting -o eth0 -j masquerade # iptables -t filter -a forward -i eth0 -o eth1 -m state -state related,established -j accept # iptables -t filter -a forward -i eth1 -o eth0 -j accept 這顯示了有狀態(tài)的數(shù)據(jù)包檢測的價值。請注意,這里是如何實現(xiàn)流入數(shù)據(jù)包只有在屬于一個已經(jīng)存在的連接時才被允許,而所有來自局域網(wǎng)內流向外的

18、數(shù)據(jù)包則都允許通過。第一條規(guī)則讓所有流出的信息看起來都是來自防火墻機器的,而并不會顯示出防火墻后面還有一個局域網(wǎng)。下面的命令為forward和 postrouting鏈設置缺省的策略,在使用偽裝時,有一個缺省的 postrouting drop策略非常重要,否則就可能有心懷惡意的用戶突破網(wǎng)關后偽裝自己的身份。# iptables -t filter -p forward drop # iptables -t nat -p postrouting drop 下面的命令為撥號連接設置,它可以動態(tài)地分配ip 地址:# iptables -t nat -a postrouting -o ppp0 -j

19、 masquerade 9運行服務器時的情況有時也會把服務器放置在防火墻后面,這時iptables就需要知道從哪兒通過數(shù)據(jù)包,設置如下所示:# iptables -t nat -a prerouting -i eth0 -p tcp -dport 80 -j dnat -to 0:80 # iptables -t nat -a prerouting -i eth0 -p tcp -dport 25 -j dnat -to 1:25 10規(guī)則的保存到現(xiàn)在為止,所有的例子都是在命令行中進行的。在測試新的規(guī)則時,這是一種很好的方式, 但一旦測試結果令人滿意

20、,就可以將它們保存為腳本??梢允褂?iptables-save 命令來實現(xiàn):$ iptables-save iptables-script 信息包過濾表中的所有規(guī)則都被保存在文件iptables-script中。無論何時再次引導系統(tǒng),都可以使用iptables-restore命令將規(guī)則集從該腳本文件恢復到信息包過濾表。恢復命令如下所示:$ iptables-restore iptables-script 如果愿意在每次引導系統(tǒng)時自動恢復該規(guī)則集,則可以將上面指定的這條命令放到任何一個初始化shell腳本中。下面的例子并不是一個完整的腳本,它只是描述了如何使用變量及提供了一些附加的規(guī)則樣例。#!/bin/sh #為變量賦值iptables=/sbin/iptables lan_net=/24 iface= eth0 lo_iface=lo lo_ip= #加載所需的內核/sbin/modprobe ip_conntrack /sbin/modprobe iptable_nat #缺省情況下, ip 轉發(fā)都處于不可用狀態(tài),將其設置為可用狀態(tài):echo 1 /proc/sys/net/ipv4/ip_forward #使 ip 的動態(tài)分配功能可用echo 1 /proc/sys/net/ipv4/ip_dy

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論