IPTABLES的使用
【實驗?zāi)康摹?/span>
1.理解iptables工作機理 2.熟練掌握iptables包過濾命令及規(guī)則 3.學(xué)會利用iptables對網(wǎng)絡(luò)事件進行審計 4.熟練掌握iptables NAT工作原理及實現(xiàn)流程 5.學(xué)會利用iptables squid實現(xiàn)Web應(yīng)用代理
【實驗原理】
一.iptables簡介 從1.1內(nèi)核開始,linux就已經(jīng)具有包過濾功能了,,在2.0的內(nèi)核中我們采用ipfwadm來操作內(nèi)核包過濾規(guī)則,。之后在2.2內(nèi)核中,,采用了大家并不陌生的ipchains來控制內(nèi)核包過濾規(guī)則。在2.4內(nèi)核中我們不再使用ipchains,,而是采用一個全新的內(nèi)核包過濾管理工具—iptables,。這個全新的內(nèi)核包過濾工具將使用戶更易于理解其工作原理,更容易被使用,,當然也將具有更為強大的功能,。 iptables只是一個內(nèi)核包過濾的工具,iptables可以加入,、插入或刪除核心包過濾表格(鏈)中的規(guī)則,。實際上真正來執(zhí)行這些過濾規(guī)則的是netfilter(Linux內(nèi)核中一個通用架構(gòu))及其相關(guān)模塊(如iptables模塊和nat模塊)。 netfilter提供了一系列的“表(tables)”,,每個表由若干“鏈(chains)”組成,,而每條鏈中有一條或數(shù)條規(guī)則(rule)組成。我們可以這樣來理解,,netfilter是表的容器,,表是鏈的容器,鏈又是規(guī)則的容器,。 netfilter系統(tǒng)缺省的表為“filter”,,該表中包含了INPUT、FORWARD和OUTPUT 3個鏈,。每一條鏈中可以有一條或數(shù)條規(guī)則,,每一條規(guī)則都是這樣定義的“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個數(shù)據(jù)包”,。當一個數(shù)據(jù)包到達一個鏈時,,系統(tǒng)就會從第一條規(guī)則開始檢查,看是否符合該規(guī)則所定義的條件:如果滿足,,系統(tǒng)將根據(jù)該條規(guī)則所定義的方法處理該數(shù)據(jù)包,;如果不滿足則繼續(xù)檢查下一條規(guī)則。最后,,如果該數(shù)據(jù)包不符合該鏈中任一條規(guī)則的話,,系統(tǒng)就會根據(jù)預(yù)先定義的策略(policy)來處理該數(shù)據(jù)包。
圖21-2-1 網(wǎng)絡(luò)數(shù)據(jù)包在filter表中的流程
數(shù)據(jù)包在filter表中的流程如圖21-2-1所示,。有數(shù)據(jù)包進入系統(tǒng)時,,系統(tǒng)首先根據(jù)路由表決定將數(shù)據(jù)包發(fā)給哪一條鏈,則可能有三種情況: (1)如果數(shù)據(jù)包的目的地址是本機,,則系統(tǒng)將數(shù)據(jù)包送往INPUT鏈,,如果通過規(guī)則檢查,則該包被發(fā)給相應(yīng)的本地進程處理;如果沒有通過規(guī)則檢查,,系統(tǒng)就會將這個包丟掉,。 (2)如果數(shù)據(jù)包的目的地址不是本機,也就是說,,這個包將被轉(zhuǎn)發(fā),,則系統(tǒng)將數(shù)據(jù)包送往FORWARD鏈,如果通過規(guī)則檢查,,則該包被發(fā)給相應(yīng)的本地進程處理,;如果沒有通過規(guī)則檢查,系統(tǒng)就會將這個包丟掉,。 (3)如果數(shù)據(jù)包是由本地系統(tǒng)進程產(chǎn)生的,,則系統(tǒng)將其送往OUTPUT鏈,如果通過規(guī)則檢查,,則該包被發(fā)給相應(yīng)的本地進程處理,;如果沒有通過規(guī)則檢查,系統(tǒng)就會將這個包丟掉,。 當我們在使用iptables NAT功能的時候,,我們所使用的表不再是“filter”表,而是“nat”表,,所以我們必須使用“-t nat”選項來顯式地指明,。因為系統(tǒng)缺省的表是“filter”,所以在使用filter功能時,,我們沒有必要顯式的指明“-t filter”。 同“filter”表一樣,,nat表也有三條缺省的鏈,,這三條鏈也是規(guī)則的容器,它們分別是: (1)PREROUTING:可以在這里定義進行目的NAT的規(guī)則,,因為路由器進行路由時只檢查數(shù)據(jù)包的目的IP地址,,為了使數(shù)據(jù)包得以正確路由,我們必須在路由之前就進行目的NAT,。 (2)POSTROUTING:可以在這里定義進行源NAT的規(guī)則,,在路由器進行路由之后才進行源NAT。 (3)OUTPUT:定義對本地產(chǎn)生的數(shù)據(jù)包的目的NAT規(guī)則,。 二.NAT工作原理 NAT的基本思想是為每個企業(yè)分配一個IP地址(或者是很少幾個)來進行Internet傳輸,。在企業(yè)內(nèi)部,每個電腦取得一唯一的IP地址來為內(nèi)部傳輸做路由,。然而,,當封包離開企業(yè),進入ISP之后,就需要進行地址轉(zhuǎn)換了,。為了使這個方案可行,,IP地址的范圍被聲明為私有的,企業(yè)可以隨意在內(nèi)部使用他們,。僅有的規(guī)則是,,沒有包含這些地址的封包出現(xiàn)在Internet上。 「說明」 IP私有地址范圍是:10.0.0.0~10.255.255.255/8,、172.16.0.0 ~172.31.255.255/12,、192.168.0.0~192.168.255.255/16。 如圖21-2-2所示,。在企業(yè)內(nèi)部,,每個機器都有一個唯一的172.16.x.y形式的地址。然而,,當封包離開企業(yè)時,,它要經(jīng)過NAT轉(zhuǎn)盒,NAT盒將內(nèi)部IP源地址,,即圖中的172.16.0.50轉(zhuǎn)換成企業(yè)的真實地址(這個地址對于Internet來說是可見的),,此例中為202.198.168.150。NAT盒通常和防火墻一起綁定在一個設(shè)備上,,這里的防火墻通過小心地控制進出企業(yè)的封包提供了安全保障,。
圖21-2-2 NAT地址轉(zhuǎn)換
三.iptables常用操作語法 表21-2-1列舉出了iptables常用的操作語法。
表21-2-1 iptables常用操作語法
功能 |
命令 |
語法 |
說明 |
添加規(guī)則 |
-A |
iptables -A INPUT -p tcp -j ACCEPT |
在所選擇的規(guī)則鏈末尾添加規(guī)則,,當源地址或目的地址是以名字而不是IP地址的形式出現(xiàn)時,,這些名字將被解析為多個地址,這條規(guī)則將和所有可用的地址結(jié)合,。 |
刪除規(guī)則 |
-D |
iptables -D INPUT -p tcp -j ACCEPT |
從所選鏈中刪除規(guī)則,。有兩種方法指定要刪除的規(guī)則:一種方法是把規(guī)則完整定出,另一種方法是指定規(guī)則在所選鏈中的序號(每條鏈的規(guī)則都各自從1被編號),。 |
自定義鏈重命名 |
-E |
iptables -E customlist userlist |
對自定義的鏈重命名,,原來的名字在前,新名字在后,。 |
清空規(guī)則 |
-F |
iptables -F INPUT |
清空所選的鏈,,如果沒有指定鏈,則清空指定表中的所有鏈,。默認情況下清空默認表所有的鏈,。 |
插入規(guī)則 |
-I |
iptables -I INPUT 1 -p tcp -j ACCEPT |
在指定鏈內(nèi)的某個位置插入規(guī)則,如果序號為1或沒有序號,,規(guī)則會被插入到的頭部,。 |
顯示規(guī)則 |
-L |
iptables -L INPUT |
顯示所選鏈的所有規(guī)則,,如果沒有指定鏈,則顯示指定表中的所有鏈,。默認情況下顯示默認表所有的鏈,。精確輸出受其它參數(shù)影響,如-n和-v等參數(shù),。 |
用戶自定義鏈 |
-N |
iptables -N customlist |
根據(jù)用戶指定的名字建立新的鏈,。所用的名字不能和已有的鏈、target同名,。 |
默認策略 |
-P |
iptables -P INPUT DROP |
為鏈設(shè)置默認的target(ACCEPT,、DROP、REJECT,、REDIRECT,、)。target稱作策略,,所有不符合規(guī)則的包都被強制使用這個策略,。只有內(nèi)建的鏈才可以使用策略,但內(nèi)建的鏈和用戶自定義鏈都不能被作為策略使用,。 |
替換規(guī)則 |
-R |
iptables -R INPUT 1 -p udp -j ACCETP |
在所選中的鏈里指定的行上(每條鏈的規(guī)則都各自從1被編號)替換規(guī)則,。它主要用于試驗不同的規(guī)則。當源地址或目的地址是以名字而不是IP地址的形式出現(xiàn)時,,如果這此名字可以被解析為多個地址,,則這條命令會失敗。 |
刪除用戶自定義鏈 |
-X |
iptables -X customlist |
刪除指定的用戶自定義鏈,。這條鏈必須沒有被引用,,如果被引用,在刪除之前你必須刪除或者替換與之有關(guān)的規(guī)則,。如果沒有給出參數(shù),,這條命令將會刪除默認表所有非內(nèi)建的鏈。 |
計數(shù)器歸零 |
-Z |
iptables -Z |
把指定鏈(如未指定則認為所有鏈)的所有計數(shù)器歸零,。 |
四.常用通用匹配語法 對于任何協(xié)議及協(xié)議的擴展,通用匹配都可以直接使用,。 (1)匹配指定協(xié)議,。 匹配-p,--protocol/使用iptables -A INPUT -p tcp -j ACCEPT/說明匹配指定的協(xié)議,,指定協(xié)議的形式有以下幾種:①名字不分大小寫,,但必須是在/etc/protocols中定義的;②可以使用協(xié)議相應(yīng)的整數(shù)值,。例如,,ICMP的值是1,,TCP是6,UDP是17,;③缺少設(shè)置ALL,,相應(yīng)數(shù)值是,要注意這只代表匹配TCP,、UDP、ICMP,,而不是/etc/protocols中定義的所有協(xié)議,;④可以是協(xié)議列表,以英文逗號為分隔符,,如:udp,,tcp;⑤可以在協(xié)議前加英文的感嘆號表示取反,,注意有空格,,如:--protocol !tcp表示非TCP協(xié)議,也就是UDP和ICMP,。可以看出這個取反的范圍只是TCP,、UDP和ICMP,。 (2)以IP源地址匹配包。 匹配-s,,--src,,--source/使用iptables -A INPUT -s 192.168.0.1 -j ACCEPT/說明以IP源地址匹配包。地址的形式如下:①單個地址,,如192.168.0.1,,也可寫成192.168.0.1/255.255.255.255或192.168.0.1/32,;②網(wǎng)絡(luò),如192.168.0.0/24,,或192.168.0.0/255.255.255.0,;③在地址前加英文感嘆號表示取反,注意空格,,如--source !192.168.0.0/24表示除此地址外的所有地址,;④缺省是所有地址。 (3)以IP目的地址匹配包,。 匹配-d,,--dst,--destination/使用iptables -A INPUT -d 192.168.0.1 -j ACCEPT/說明以IP目的地址匹配包,。地址的形式和--source完全一樣,。 (4)以包進入本地使用的網(wǎng)絡(luò)接口匹配包。 匹配-i/使用iptables -A INPUT -i eth0 -j ACCEPT/說明以包進入本地所使用的網(wǎng)絡(luò)接口來匹配包,。要注意這個匹配操作只能用于INPUT,,F(xiàn)ORWARD和PREROUTING這三個鏈,用在其他任何地方會提示錯誤信息,。指定接口有以下方法:①指定接口名稱,,如:eth0、ppp0等,;②使用通配符,,即英文加號,它代表字符數(shù)字串,。若直接用一個加號,,即iptables -A INPUT -i 表示匹配所有的包,而不考慮使用哪個接口,。通配符還可以放在某一類接口的后面,,如:eth 表示匹配所有從Ethernet接口進入的包;③在接口前加英文感嘆號表示取反,,如:-i ! eth0意思是匹配來自除eth0外的所有包,。 (5)以包離開本地所使用的網(wǎng)絡(luò)接口來匹配包。 匹配-o/使用iptables -A OUTPUT -o eth1 -j ACCEPT/說明以包離開本地所使用的網(wǎng)絡(luò)接口來匹配包,。要注意這個匹配操作只能用于OUTPUT,,F(xiàn)ORWARD和POSTROUTING這三個鏈,用在其他任何地方會提示錯誤信息,。 (6)匹配通信源端口,。 匹配--source-port,--sport/使用iptables -A INPUT -p tcp --sport 1111/說明當通信協(xié)議為TCP或UDP時,,可以指定匹配的源端口,,但必須與匹配協(xié)議相結(jié)合使用。 (7)匹配通信源端口,。 匹配-- destination-port,--dport/使用iptables -A INPUT -p tcp --dport 80/說明當通信協(xié)議為TCP或UDP時,,可以指定匹配的目的端口,,但必須與匹配協(xié)議相結(jié)合使用,。 五.iptables功能擴展 1.TCP擴展 iptables可以擴展,擴展分為兩種:一種是標準的,;另一種是用戶派生的,。如果指定了“-p tcp”,那么TCP擴展將自動加載,,通過--tcp-flags擴展,,我們指定TCP報文的哪些Flags位被設(shè)置,在其后跟隨兩個參數(shù):第一個參數(shù)代表Mask,,指定想要測驗的標志位,;第二個參數(shù)指定哪些位被設(shè)置。 例:設(shè)置iptables防火墻禁止來自外部的任何tcp主動請求,,并對此請求行為進行事件記錄,。
其中ULOG指定對匹配的數(shù)據(jù)包進行記錄,由日志生成工具ULOG生成iptables防火日志,,--log-prefix選項為記錄前綴,。 2.ICMP擴展 例:設(shè)置iptables防火墻允許來自外部的某種類型/代碼的ICMP數(shù)據(jù)包。
其中--icmp-type為擴展命令選項,,其后參數(shù)可以是三種模式: (1)ICMP類型名稱(例如,,host-unreachable)。 (2)ICMP類型值(例如3),。 (3)ICMP類型及代碼值(8/0),。 六.狀態(tài)檢測 “狀態(tài)”的意思是指如果一個數(shù)據(jù)包是對先前從防火墻發(fā)出去的包的回復(fù),則防火墻自動不用檢查任何規(guī)則就立即允許該數(shù)據(jù)包進入并返回給請求者,,這樣就不用設(shè)置許多規(guī)則定義就可實現(xiàn)應(yīng)用的功能,。 我們可以把請求端與應(yīng)答端之間建立的網(wǎng)絡(luò)通信連接稱為網(wǎng)絡(luò)會話,每個網(wǎng)絡(luò)會話都包括以下信息——源IP地址,、目標IP地址,、源端口、目的端口,,稱為套接字對,;協(xié)議類型、連接狀態(tài)(TCP協(xié)議)和超時時間等,。防火墻把這些信息稱為狀態(tài)(stateful),。狀態(tài)包過濾防火墻能在內(nèi)存中維護一個跟蹤狀態(tài)的表,比簡單的包過濾防火墻具有更大的安全性,,而iptables就是一種基于狀態(tài)的防火墻,。命令格式如下:
其中,state表是一個由逗號分割的列表,,用來指定連接狀態(tài),,狀態(tài)分為4種: (1)NEW:該包想要建立一個新的連接(重新連接或連接重定向),。 (2)RELATED:該包是屬于某個已經(jīng)建立的連接所建立的新連接。舉例:FTP的數(shù)據(jù)傳輸連接和控制連接之間就是RELATED關(guān)系,。 (3)ESTABLISHED:該包屬于某個已經(jīng)建立的連接,。 (4)INVALID:該包不匹配于任何連接,通常這些包被DROP,。 七.NAT操作 前面提到在iptables防火墻中提供了3種策略規(guī)則表:Filter,、Mangle和NAT,這3種表功能各不相同,,而最為常用的就是filter和nat表,。 nat表僅用于NAT,也就是網(wǎng)絡(luò)地址轉(zhuǎn)換,。做過NAT操作的數(shù)據(jù)包的地址就被改變了,,當然這種改變是根據(jù)我們的規(guī)則進行的。屬于流的包只會經(jīng)過這個表一次,,經(jīng)一個包被允許做NAT,,那么余下的包都會自動地做相同的操作。也就是說,,余下的包不會再通過這個表一個一個的被NAT,,而是自動完成的。常用操作分為以下幾類,。 (1)SNAT(source network address translation,,源網(wǎng)絡(luò)地址目標轉(zhuǎn)換)。 SNAT是POSTROUTING鏈表的作用,,在封包就要離開防火墻之前改變其源地址,,這在極大程度上可以隱藏本地網(wǎng)絡(luò)或者DMZ等。比如,,多個PC機使用路由器共享上網(wǎng),,每個PC機都配置了內(nèi)網(wǎng)IP(私有IP),PC機訪問外部網(wǎng)絡(luò)的時候,,路由器將數(shù)據(jù)包的報頭中的源地址替換成路由器的IP,,當外部網(wǎng)絡(luò)的服務(wù)器比如網(wǎng)站W(wǎng)eb服務(wù)器接到訪問請求的時候,它的日志記錄下來的路由器的IP,,而不是PC機的內(nèi)網(wǎng)IP,,這是因為,這個服務(wù)器收到的數(shù)據(jù)包的報頭里邊的“源地址”已經(jīng)被替換了,。所以叫做SNAT,,基于源地址的地址轉(zhuǎn)換。 例如更改所有來自192.168.0.1/24的數(shù)據(jù)包的源IP地址為10.0.0.1,其iptables實現(xiàn)為:
(2)DNAT(destination network address translation,,目標網(wǎng)絡(luò)地址轉(zhuǎn)換),。 DNAT是PREROUTING鏈表的作用,在封包剛剛到達防火墻時改變其目的地址,,以使包能夠被路由到某臺主機。典型的應(yīng)用是,,有個Web服務(wù)器放在企業(yè)網(wǎng)絡(luò)DMZ區(qū),,其配置了內(nèi)網(wǎng)IP地址,企業(yè)防火墻的的外網(wǎng)接口配置了企業(yè)唯一的公網(wǎng)IP,,互聯(lián)網(wǎng)上的訪問者使用公網(wǎng)IP來訪問這個網(wǎng)站,,當訪問的時候,客戶端發(fā)出一個數(shù)據(jù)包,,這個數(shù)據(jù)包的報頭里邊,,目標地址寫的是防火墻的公網(wǎng)IP,然后再把這個數(shù)據(jù)包發(fā)送到DMZ區(qū)的Web服務(wù)器上,,這樣,,數(shù)據(jù)包就穿透了防火墻,并從公網(wǎng)IP變成了一個對DMZ區(qū)的訪問了,。所以叫做DNAT,,基于目標的網(wǎng)絡(luò)地址轉(zhuǎn)換。 例如更改所有來自202.98.0.1/24的數(shù)據(jù)包的目的IP地址為192.168.0.1,,其iptables實現(xiàn)為:
(3)REDIRECT(重定向),。 REDIRECT是DNAT的特殊情況是重定向,也就是所謂的Redirection,,這時候就相當于將符合條件的數(shù)據(jù)包的目的IP地址改為數(shù)據(jù)包進入系統(tǒng)時的網(wǎng)絡(luò)接口的IP地址,。通常是在與squid配置形成透明代理時使用,假設(shè)squid的監(jiān)聽端口是3128,,我們可以通過以下語句來將來自192.168.0.1/24,,目的端口為80的數(shù)據(jù)包重定向到squid監(jiān)聽:
(4)MASQUERADE(地址偽裝)。 在iptables中有著和SNAT相近的效果,,但也有一些區(qū)別,。在使用SNAT的時候,出口IP的地址范圍可以是一個,,也可以是多個,,例如把所有192.168.0.0/24網(wǎng)段數(shù)據(jù)包SNAT成202.98.0.150/202.98.0.151/202.98.0.152等幾個IP然后發(fā)出去,其iptables實現(xiàn)為:
SNAT即可以NAT成一個地址,,也可以NAT成多個地址,。但是,對于SNAT來說不管是幾個地址,必須明確指定轉(zhuǎn)換的目標地址IP,。假如當前系統(tǒng)用的是ADSL動態(tài)撥號方式,,那么每次撥號,出口IP都會改變,,而且改變的幅度很大,,不一定是202.98.0.150到202.98.0.152范圍內(nèi)的地址,這個時候如果使用SNAT的方式來配置iptables就會出現(xiàn)麻煩了,,因為每次撥號后出口IP都會變化,,而iptables規(guī)則內(nèi)的IP是不會隨著自動變化的,每次地址變化后都必須手工修改一次iptables,,把規(guī)則里邊的固定的IP改成新的IP,,這樣是非常不好用的。 MASQUERADE就是針對這種場景而設(shè)計的,,它的作用是從防火墻外網(wǎng)接口上自動獲取當前IP地址來做NAT,,比如下邊的命令:
八.防火墻應(yīng)用代理 1.代理服務(wù)器概述 在TCP/IP網(wǎng)絡(luò)中,傳統(tǒng)的通信過程是這樣的:客戶端向服務(wù)器請求數(shù)據(jù),,服務(wù)器響應(yīng)該請求,,將數(shù)據(jù)傳送給客戶端,如圖21-2-3所示,。
圖21-2-3 直接訪問Internet
在引入了代理服務(wù)器以后,,這一過程變成了這樣:客戶端向服務(wù)器發(fā)起請求,該請求被送到代理服務(wù)器,;代理服務(wù)器分析該請求,,先查看自己緩存中是否有請求數(shù)據(jù),如果有就直接傳遞給客戶端,,如果沒有就代替客戶端向該服務(wù)器發(fā)出請求,。服務(wù)器響應(yīng)以后,代理服務(wù)將響應(yīng)的數(shù)據(jù)傳遞給客戶端,,同時在自己的緩存中保留一份該數(shù)據(jù)的拷貝,。這樣,再有客戶端請求相同的數(shù)據(jù)時,,代理服務(wù)器就可以直接將數(shù)據(jù)傳送給客戶端,,而不需要再向該服務(wù)器發(fā)起請求,如圖21-2-4所示,。
圖21-2-4 通過代理服務(wù)器訪問Internet
2.代理服務(wù)器功能 一般說來,,代理服務(wù)器具有以下的功能: (1)通過緩存增加訪問速度。 隨著Internet的迅猛發(fā)展,,網(wǎng)絡(luò)帶寬變得越來越珍貴,。所以為了提高訪問速度,好多ISP都提供代理服務(wù)器,通過代理服務(wù)器的緩存功能來加快網(wǎng)絡(luò)的訪問速度,。一般說來,,大多數(shù)的代理服務(wù)器都支持HTTP緩存,但是,,有的代理服務(wù)器也支持FTP緩存,。在選擇代理服務(wù)器時,對于大多數(shù)的組織,,只需要HTTP緩存功能就足夠了,。 通常,緩存有主動緩存被動緩存之分,。所謂被動緩存,指的是代理服務(wù)器只在客戶端請求數(shù)據(jù)時才將服務(wù)器返回的數(shù)據(jù)進行緩存,,如果數(shù)據(jù)過期了,,又有客戶端請求相同的數(shù)據(jù)時,代理服務(wù)器又必須重新發(fā)起新的數(shù)據(jù)請求,,在將響應(yīng)數(shù)據(jù)傳送給客戶端時又進行新的緩存,。所謂主動緩存,就是代理服務(wù)器不斷地檢查緩存中的數(shù)據(jù),,一旦有數(shù)據(jù)過期,,則代理服務(wù)器主動發(fā)起新的數(shù)據(jù)請求來更新數(shù)據(jù)。這樣,,當有客戶端請求該數(shù)據(jù)時就會大大縮短響應(yīng)時間,。對于數(shù)據(jù)中的認證信息,大多數(shù)的代理服務(wù)器都不會進行緩存的,。 (2)提供用私有IP訪問Internet的方法,。 IP地址是不可再生的寶貴資源,假如你只有有限的IP地址,,但是需要提供整個組織的Internet訪問能力,,那么,你可以通過使用代理服務(wù)器來實現(xiàn)這一點,。 (3)提高網(wǎng)絡(luò)的安全性,。 如果內(nèi)部用戶訪問Internet都是通過代理服務(wù)器,那么代理服務(wù)器就成為進入Internet的唯一通道,;反過來說,,代理服務(wù)器也是Internet訪問內(nèi)部網(wǎng)絡(luò)的唯一通道,如果你沒有做反向代理,,則對于Internet上的主機來說,,你的整個內(nèi)部網(wǎng)只有代理服務(wù)器是可見的,從而大大增強了網(wǎng)絡(luò)的安全性。 3.傳統(tǒng),、透明和反向代理服務(wù)器 (1)傳統(tǒng)代理服務(wù)器,。 傳統(tǒng)代理常被用于緩存靜態(tài)網(wǎng)頁(例如:html文件和圖片文件等)到本地網(wǎng)絡(luò)上的一臺主機上(即代理服務(wù)器)。不緩存的頁面被第二次訪問的時候,,瀏覽器將直接從本地代理服務(wù)器那里獲取請求數(shù)據(jù)而不再向原Web站點請求數(shù)據(jù),。這樣就節(jié)省了寶貴的網(wǎng)絡(luò)帶寬,而且提高了訪問速度,。但是,,要想實現(xiàn)這種方式,必須在每一個內(nèi)部主機的瀏覽器上明確指明代理服務(wù)器的IP地址和端口號,??蛻舳松暇W(wǎng)時,每次都把請求給代理服務(wù)器處理,,代理服務(wù)器根據(jù)請求確定是否連接到遠程Web服務(wù)器獲取數(shù)據(jù),。如果在本地緩存區(qū)有目標文件,則直接將文件傳給用戶即可,。如果沒有的話則先取回文件,,并在本地保存一份緩存,然后將文件發(fā)給客戶端瀏覽器,。 (2)透明代理服務(wù)器,。 透明代理與傳統(tǒng)代理的功能完全相同。但是,,代理操作對客戶端瀏覽器是透明的(即不需指明代理服務(wù)器的IP和端口),。透明代理服務(wù)器阻斷網(wǎng)絡(luò)通信,并且過濾出訪問外部的HTTP(80端口)流量,。如果客戶端的請求在本地有緩存則將緩存的數(shù)據(jù)直接發(fā)給用戶,,如果在本地沒有緩存則向遠程Web服務(wù)器發(fā)出請求,其余操作和傳統(tǒng)代理服務(wù)器完全相同,。對于Linux操作系統(tǒng)來說,,透明代理使用iptables實現(xiàn)。因為不需要對瀏覽器作任何設(shè)置,,所以,,透明代理對于ISP來說特別有用。 (3)反向代理服務(wù)器,。 反向代理是和前兩種代理完全不同的一種代理服務(wù),。使用它可以降低原始Web服務(wù)器的負載。反向代理服務(wù)器承擔了對原始Web服務(wù)器的靜態(tài)頁面的請求,,防止原始服務(wù)器過載,。如圖21-2-5所示,,它位于本地Web服務(wù)器和Internet之間,處理所有對Web服務(wù)器的請求,。如果互聯(lián)網(wǎng)用戶請求的頁面在代理器上有緩存的話,,代理服務(wù)器直接將緩存內(nèi)容發(fā)送給用戶。如果沒有緩存則先向Web服務(wù)器發(fā)出請求,,取回數(shù)據(jù),,本地緩存后再發(fā)送給用戶。這種方式通過降低了向Web服務(wù)器的請求數(shù)從而降低了Web服務(wù)器的負載,。
圖21-2-5 反向代理服務(wù)器位于Internet與組織服務(wù)器之間
4.代理服務(wù)器squid簡介 squid是一個緩存Internet數(shù)據(jù)的一個開源軟件,,它會接收用戶的下載申請,并自動處理所下載的數(shù)據(jù),。也就是說,,當一個用戶要下載一個主頁時,他向squid發(fā)出一個申請,,要求squid替它下載,,squid連接申請網(wǎng)站并請求該主頁,然后把該主頁傳給用戶同時保留一個備份,,當別的用戶申請同樣的頁面時,squid把保存的備份立即傳給用戶,,使用戶覺得速度相當快,。目前squid可以代理HTTP,、FTP,、GOPHER,、SSL和WAIS協(xié)議,,暫不能代理POP,、NNTP等協(xié)議,。但是已經(jīng)有人開始改進squid,,相信不久的將來,,squid將能夠代理這些協(xié)議,。 squid不是對任何數(shù)據(jù)都進行緩存,。像信用卡賬號、可以遠方執(zhí)行的Script,、經(jīng)常變換的主頁等是不適合緩存的,。squid可以根據(jù)用戶的需要進行設(shè)置,過濾掉不想要的東西,。 squid可用在很多操作系統(tǒng)中,,如Digital Unix,F(xiàn)reeBSD,,HP-UX,,Linux,,Solaris,OS/2等,,也有不少人在其他操作系統(tǒng)中重新編譯過squid,。 squid對內(nèi)存有一定的要求,一般不應(yīng)小于128M,,硬盤最好使用服務(wù)器專用SCSI硬盤,。 squid是一個高性能的代理緩存服務(wù)器,和一般的代理緩存軟件不同,,squid用一個單獨的,、非模塊化的、I/O驅(qū)動的進程來處理所有的客戶端請求,。 squid將數(shù)據(jù)元緩存在內(nèi)存中,,同時也緩存DNS查詢的結(jié)果。此外,,它還支持非模塊化的DNS查詢,,對失敗的請求進行消極緩存。squid支持SSL,,支持訪問控制,。由于使用了ICP(輕量Internet緩存協(xié)議),squid能夠?qū)崿F(xiàn)層疊的代理陣列,,從而最大限度地節(jié)約帶寬,。 squid由一個主要的服務(wù)程序squid,一個DNS查詢程序dnsserver,,幾個重寫請求和執(zhí)行認證的程序,,以及幾個管理工具組成。當squid啟動以后,,它可以派生出預(yù)先指定數(shù)目的dnsserver進程,,而每一個dnsserver進程都可以執(zhí)行單獨的DNS查詢,這樣就減少了服務(wù)器等待DNS查詢的時間,。 5.squid常用配置選項 因為缺省的配置文件不能使squid正常啟動服務(wù),,所以我們必須首先修改該配置文件的有關(guān)內(nèi)容,才能讓squid運行起來,。 下面是squid.conf文件的結(jié)構(gòu),。squid.conf配置文件的可以分為13個部分,這13個部分如表21-2-2所示,。
表21-2-2 squid常用配置選項
選項 |
說明 |
NETWORK OPTIONS |
有關(guān)的網(wǎng)絡(luò)選項 |
OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM |
作用于鄰居選擇算法的有關(guān)選項 |
OPTIONS WHICH AFFECT THE CACHE SIZE |
定義cache大小的有關(guān)選項 |
LOGFILE PATHNAMES AND CACHE DIRECTORIES |
定義日志文件的路徑及cache的目錄 |
OPTIONS FOR EXTERNAL SUPPORT PROGRAMS |
外部支持程序選項 |
OPTIONS FOR TUNING THE CACHE |
調(diào)整cache的選項 |
TIMEOUTS |
超時 |
ACCESS CONTROLS |
訪問控制 |
ADMINISTRATIVE PARAMETERS |
管理參數(shù) |
OPTIONS FOR THE CACHE REGISTRATION SERVICE |
cache注冊服務(wù)選項 |
HTTPD-ACCELERATOR OPTIONS |
HTTPD加速選項 |
MISCELLANEOUS |
雜項 |
DELAY POOL PARAMETERS |
延時池參數(shù) |
雖然squid的配置文件很龐大,,但是如果你只是為一個中小型網(wǎng)絡(luò)提供代理服務(wù),并且只準備使用一臺服務(wù)器,,則只需要修改配置文件中的幾個選項,。 6.squid常用命令選項 (1)端口號,。 http_port指令告訴squid在哪個端口偵聽HTTP請求。默認端口是3128:http_port 3128,,如果要squid作為加速器運行則應(yīng)將它設(shè)為80,。 你能使用附加http_port行來指定squid偵聽在多個端口上。例如,,來自某個部門的瀏覽器發(fā)送請求3128,,然而另一個部門使8080端口??梢詫蓚€端口號列舉出來: http_port 3128 http_port 8080 squid也可以使http_port指令偵聽在指定的接口地址上,。squid作為防火墻運行時,它有兩個網(wǎng)絡(luò)接口:一個內(nèi)部的和一個外部的,。你可能不想接受來自外部的http請求,。為了使squid僅僅偵聽在內(nèi)部接口上,簡單的將IP地址放在端口號前面: http_port 192.168.1.1:3128 (2)日志文件路徑,。 默認的日志目錄是squid安裝位置下的logs目錄,,其路徑是/usr/local/squid/var/logs。 你必須確認日志文件所存放的磁盤位置空間足夠,。squid想確認你不會丟失任何重要的日志信息,,特別是你的系統(tǒng)被濫用或者被攻擊時。 squid有三個主要的日志文件:cache.log,、access.log和store.log,。cache.log文件包含狀態(tài)性的和調(diào)試性的消息。access.log文件包含了對squid發(fā)起的每個客戶請求的單一行,。每行平均約150個字節(jié)。假如因為某些理由,,你不想squid記錄客戶端請求日志,,你能指定日志文件的路徑為/dev/null。store.log文件對大多數(shù)cache管理員來說并非很有用,。它包含了進入和離開緩存的每個目標的記錄,。平均記錄大小典型的是175-200字節(jié)。 如果squid的日志文件增加沒有限制,。某些操作系統(tǒng)對單個文件強制執(zhí)行2G的大小限制,,即使你有充足的磁盤空間。超過該限制會導(dǎo)致寫錯誤,,squid就會退出,。 (3)訪問控制。 squid默認的配置文件拒絕每一個客戶請求,。在任何人能使用代理之前,,你必須在squid.conf文件里加入附加的訪問控制規(guī)則,。最簡單的方法就是定義一個針對客戶IP地址的ACL和一個訪問規(guī)則,告訴squid允許來自這些地址的HTTP請求,。squid有許多不同的ACL類型,。src類型匹配客戶IP地址,squid會針對客戶HTTP請求檢查http_access規(guī)則,。 acl MyNetwork src 192.168.0.0/16 http_access allow MyNetwork 請將這些行放在正確的位置,。http_access的順序非常重要。在第一次編輯squid.conf文件時,,請看如下注釋:
在該注釋之后,,以及"http_access deny all"之前插入新規(guī)則。 (4)命令選項,。 這里的很多選項在實際應(yīng)用中從不會使用,,另外有些僅僅在調(diào)試問題時有用,如表21-2-3所示,。
表21-2-3 命令選項
選項 |
說明 |
-a port |
指定新的http_port 值,。該選項覆蓋了來自squid.conf 的值。注意,,你能在squid.conf里指定多個值,。-a 選項僅僅覆蓋配置文件里的第一個值。(該選項使用字母a 是因為在Harvest cache 里,,HTTP 端口被叫做ASCII 端口) |
-d level |
讓squid 將它的調(diào)試信息寫到標準錯誤(假如配置了,,就是cache.log和syslog)。level參數(shù)指定了顯示在標準錯誤里的消息的最大等級,。在多數(shù)情況下,,d1 工作良好。 |
-f file |
指定另一個配置文件,。 |
-h |
幫助 |
-k function |
指示squid 執(zhí)行不同的管理功能,。功能參數(shù)是下列之一:reconfigure,rotate,,shutdown,,interrupt,kill,,debug, check,,or parse。 |
-s |
激活將日志記錄到syslog 進程,。squid 使用LOCAL4 syslog 設(shè)備,。 級別調(diào)試信息以優(yōu)先級LOG_WARNING 被記錄,1 級別消息以LOG_NOTICE 被記錄,。更高級的調(diào)試信息不會被發(fā)送到syslogd.你可以在/etc/syslogd.conf 文件里使用如下接口: local4.warning /var/log/squid.log |
-u port |
指定另一個ICP 端口號,,覆蓋掉squid.conf 文件里的icp_port,。 |
-z |
初始化cache,或者交換,,目錄,。在首次運行squid,或者增加新的cache目錄時,,你必須使用該選項,。 |
-C |
阻止安裝某些信號句柄,它們捕獲特定的致命信號例如SIGBUS和SIGSEGV,。正常的,,這些信號被squid 捕獲,以便它能干凈的關(guān)閉,。然而,,捕獲這些信號可能讓以后調(diào)試問題困難。使用該選項,,致命的信號導(dǎo)致它們的默認動作,,通常是coredump。 |
-D |
禁止初始化DNS 測試,。正常情況下,,squid 直到驗證它的DNS 可用才能啟動。該選項阻止了這樣的檢測,。你也能在squid.conf 文件里改變或刪除dns_testnames 選項,。 |
-F |
讓squid 拒絕所有的請求,直到它重新建立起存儲元數(shù)據(jù),。假如你的系統(tǒng)很忙,,該選項可以減短重建存儲元數(shù)據(jù)的時間。然而,,如果你的cache 很大,,重建過程可能會花費很長的時間。 |
-N |
阻止squid變成后臺服務(wù)進程,。 |
-R |
阻止squid 在綁定HTTP 端口之前使用SO_REUSEADDR 選項。 |
-V |
激活虛擬主機加速模式,。類似于squid.conf 文件里的httpd_accel_host virtual 指令,。 |
-X |
強迫完整調(diào)試模式,如你在squid.conf 文件里指定debug_options ALL,9 一樣,。 |
-Y |
在重建存儲元數(shù)據(jù)時,,返回ICP_MISS_NOFETCH 代替ICP_MISS.忙碌的父cache 在重建時,該選項可以導(dǎo)致最少的負載,。 |
【實驗步驟】
本練習(xí)主機A,、B為一組,,C、D為一組,,E、F為一組。
首先使用“快照X”恢復(fù)Linux系統(tǒng)環(huán)境。
一.包過濾實驗
操作概述:為了應(yīng)用iptables的包過濾功能,,首先我們將filter鏈表的所有鏈規(guī)則清空,,并設(shè)置鏈表默認策略為DROP(禁止),。通過向INPUT規(guī)則鏈插入新規(guī)則,,依次允許同組主機icmp回顯請求,、Web請求,最后開放信任接口eth0。iptables操作期間需同組主機進行操作驗證,。
(1)清空filter鏈表所有規(guī)則鏈規(guī)則,。
iptables命令iptables -t filter -F
(2)同組主機使用/opt/ExpNIS/NetAD-Lab/Tools/portscan/nmap工具對當前主機進行端口掃描,。
(3)查看INPUT、FORWARD和OUTPUT鏈默認策略,。
iptables命令iptables -t filter -L
(4)將INPUT、FORWARD和OUTPUT鏈默認策略均設(shè)置為DROP。
iptables命令 iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
同組主機利用nmap對當前主機進行端口掃描,查看掃描結(jié)果,并利用ping命令進行連通性測試。
(5)利用功能擴展命令選項(ICMP)設(shè)置防火墻僅允許ICMP回顯請求及回顯應(yīng)答,。
ICMP回顯請求類型 8 ;代碼 。
ICMP回顯應(yīng)答類型 ,;代碼 ,。
iptables命令iptables -I INPUT -p icmp --icmp-type 8/0 -j ACCEPT
iptables -I OUTPUT -p icmp --icmp-type 0/0 -j ACCEPT
利用ping指令測試本機與同組主機的連通性,。
(6)對外開放Web服務(wù)(默認端口80/tcp)。
iptables命令iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT
同組主機利用nmap對當前主機進行端口掃描,,查看掃描結(jié)果,。
(7)設(shè)置防火墻允許來自eth0(假設(shè)eth0為內(nèi)部網(wǎng)絡(luò)接口)的任何數(shù)據(jù)通過。
iptables命令iptables -A INPUT -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT 同組主機利用nmap對當前主機進行端口掃描,,查看掃描結(jié)果,。
二.事件審計實驗
操作概述:利用iptables的日志功能檢測、記錄網(wǎng)絡(luò)端口掃描事件,日志路徑 /var/log/iptables.log。
(1)清空filter表所有規(guī)則鏈規(guī)則,。
iptables命令iptables -F
(2)根據(jù)實驗原理(TCP擴展)設(shè)計iptables包過濾規(guī)則,,并應(yīng)用日志生成工具ULOG對iptables捕獲的網(wǎng)絡(luò)事件進行響應(yīng),。
iptables命令iptables -I INPUT -p tcp --tcp-flag ALL SYN -j ULOG--ulog-prefix “SYN Request”
(3)同組主機應(yīng)用端口掃描工具對當前主機進行端口掃描,,并觀察掃描結(jié)果,。
(4)在同組主機端口掃描完成后,,當前主機查看iptables日志,,對端口掃描事件進行審計,,日志內(nèi)容如圖21-2-1所示,。
圖21-2-1 iptables日志內(nèi)容
三.狀態(tài)檢測實驗
操作概述:分別對新建和已建的網(wǎng)絡(luò)會話進行狀態(tài)檢測。
1.對新建的網(wǎng)絡(luò)會話進行狀態(tài)檢測
(1)清空filter規(guī)則鏈全部內(nèi)容,。
iptables命令 iptables -F
(2)設(shè)置全部鏈表默認規(guī)則為允許,。
iptables命令iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
(3)設(shè)置規(guī)則禁止任何新建連接通過。
iptables命令iptables -A INPUT -m state --state NEW -j DROP
(4)同組主機對當前主機防火墻規(guī)則進行測試,,驗證規(guī)則正確性,。
2.對已建的網(wǎng)絡(luò)會話進行狀態(tài)檢測
(1)清空filter規(guī)則鏈全部內(nèi)容,并設(shè)置默認規(guī)則為允許,。
(2)同組主機首先telnet遠程登錄當前主機,,當出現(xiàn)“l(fā)ogin:”界面時,暫停登錄操作,。
telnet登錄命令 telnet 同組主機IP
(3)iptables添加新規(guī)則(狀態(tài)檢測)——僅禁止新建網(wǎng)絡(luò)會話請求,。
iptables命令 iptables -A INPUT -m state --state NEW -j DROP
或 iptables -I INPUT -m state --state NEW -j DROP
同組主機續(xù)步驟(2)繼續(xù)執(zhí)行登錄操作,嘗試輸入登錄用戶名“guest”及口令“guestpass”,登錄是否成功,? 成功 ,。
同組主機啟動Web瀏覽器訪問當前主機Web服務(wù),訪問是否成功,? 不成功 ,。解釋上述現(xiàn)象添加的iptables命令僅對新建會話連接起到阻塞作用,對屬于已建立會話連接的數(shù)據(jù)包不起作用,,而telnet會話是已建連接 ,。
(4)刪除步驟(3)中添加的規(guī)則。
iptables命令 iptables -D INPUT -m state --state NEW -j DROP
或 iptables -D INPUT 1
(5)同組主機重新telnet遠程登錄當前主機,,當出現(xiàn)“l(fā)ogin:”界面時,,暫停登錄操作。
(6)iptables添加新規(guī)則(狀態(tài)檢測)——僅禁止已建網(wǎng)絡(luò)會話請求,。
iptables命令iptables -A INPUT -m state --state ESTABLISHED -j DROP
或 iptables -I INPUT -m state --state ESTABLISHED -j DROP
同組主機續(xù)步驟(5)繼續(xù)執(zhí)行登錄操作,,登錄是否成功? ,。
同組主機啟動Web瀏覽器訪問當前主機Web服務(wù),,訪問是否成功? ,。解釋上述現(xiàn)象 ,。
嘗試輸入登錄用戶名“guest”及口令“guestpass”,,登錄是否成功 不成功 ,。
同組主機啟動Web瀏覽器訪問當前主機Web服務(wù),訪問是否成功 不成功 ,。解釋上述現(xiàn)象 添加的iptables命令對已建會話連接起到阻塞作用 ,。
(7)當前主機再次清空filter鏈表規(guī)則,并設(shè)置默認策略為DROP,添加規(guī)則開放FTP服務(wù),,并允許遠程用戶上傳文件至FTP服務(wù)器,。
iptables命令iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED –j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
同組主機嘗試上傳文件,是否成功,?
四.NAT轉(zhuǎn)換實驗 實驗概述:圖21-2-2描述了NAT轉(zhuǎn)換實驗所應(yīng)用的網(wǎng)絡(luò)拓撲結(jié)構(gòu),。內(nèi)網(wǎng)主機與NAT服務(wù)器eth0接口位于同一網(wǎng)段(內(nèi)網(wǎng));外網(wǎng)主機與NAT服務(wù)器eth1接口位于同一網(wǎng)絡(luò)(外網(wǎng)),;NAT服務(wù)器提供NAT轉(zhuǎn)換,。通過設(shè)置nat服務(wù)器的iptables NAT規(guī)則,實現(xiàn)內(nèi),、外網(wǎng)主機間的通信數(shù)據(jù)包的地址轉(zhuǎn)換,,達到屏蔽內(nèi)部網(wǎng)絡(luò)拓撲結(jié)構(gòu)與轉(zhuǎn)發(fā)外網(wǎng)主機請求端口的目的(端口重定向)。
圖21-2-2 實驗網(wǎng)絡(luò)拓撲結(jié)
「說明」 本實驗是在Linux系統(tǒng)下完成,,Linux系統(tǒng)默認安裝了2塊以太網(wǎng)卡,,網(wǎng)絡(luò)接口分別為eth0和eth1,,在設(shè)置NAT服務(wù)前請激活eth1網(wǎng)絡(luò)接口,命令ifconfig eth1 up,。 本步驟由3人為一組進行,,其中主機A、C,、E為一組,,B、D,、F為一組,。實驗角色說明如下:
實驗主機 |
實驗角色 |
主機A、B |
內(nèi)網(wǎng)主機 |
主機C,、D |
NAT服務(wù)器 |
主機E,、F |
外網(wǎng)主機 |
實驗操作前,實驗主機需重置iptables,,具體命令如下:
1.確定各接口IP地址 (1)默認內(nèi)網(wǎng)IP地址192.168.0.0/24,、外網(wǎng)IP地址202.98.0.0/24。配置完成內(nèi)網(wǎng)主機eth0接口IP地址及默認網(wǎng)關(guān)(指向NAT服務(wù)器內(nèi)網(wǎng)接口),,NAT服務(wù)器eth0和eth1接口IP地址,,外網(wǎng)主機eth0接口IP地址,并完成下列問題的填寫: 內(nèi)網(wǎng)主機IP192.168.0.50/24,,其默認網(wǎng)關(guān)192.168.0.150,; 外網(wǎng)主機IP202.98.0.50/24; NAT服務(wù)器內(nèi)網(wǎng)接口IP192.168.0.150/24,、外網(wǎng)接口IP202.98.0.150/24 ,。 (2)內(nèi)網(wǎng)主機添加靜態(tài)ARP緩存表項目 NAT服務(wù)器作為內(nèi)網(wǎng)主機訪問外網(wǎng)的唯一的安全網(wǎng)關(guān),其IP與MAC地址應(yīng)被綁定到內(nèi)網(wǎng)主機的ARP緩存表中,,防止內(nèi)網(wǎng)主機遭受ARP欺騙,、IP欺騙等網(wǎng)絡(luò)行為,添加ARP靜態(tài)表項命令如下:
例如NAT服務(wù)器內(nèi)網(wǎng)接口的IP地址為192.168.0.50,,MAC地址為aa:bb:cc:dd:ee:ff,,則添加靜態(tài)表項的命令為arp -s 192.168.0.50 aa:bb:cc:dd:ee:ff。 (3)內(nèi)網(wǎng)主機對NAT服務(wù)器內(nèi)網(wǎng)接口進行連通性測試(ping),;外網(wǎng)主機對NAT服務(wù)器外網(wǎng)接口進行連通性測試(ping),。 2.設(shè)置iptables規(guī)則允許內(nèi)部網(wǎng)絡(luò)訪問外部網(wǎng)絡(luò) 操作流程:首先開啟NAT服務(wù)器的路由功能(開啟網(wǎng)絡(luò)接口間數(shù)據(jù)的轉(zhuǎn)發(fā)),清空filter鏈表全部規(guī)則,,并設(shè)置其默認策略為DROP,;繼續(xù)設(shè)置規(guī)則允許來自內(nèi)網(wǎng)的數(shù)據(jù)流進入外網(wǎng),并允許任何返回流量回到內(nèi)網(wǎng)(數(shù)據(jù)轉(zhuǎn)發(fā))。 (1)NAT服務(wù)器開啟路由功能,。 基于安全的考慮,,默認情況下Linux路由數(shù)據(jù)包的功能是關(guān)閉的,通過下述命令開啟系統(tǒng)路由功能:
(2)清空filter表規(guī)則鏈內(nèi)容,,并設(shè)置filter表INPUT,、FORWARD和OUTPUT規(guī)則鏈,默認策略為禁止,。 iptables命令iptables –F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
(3)添加filter表新規(guī)則,,允許來自內(nèi)網(wǎng)的數(shù)據(jù)流進入外網(wǎng),并允許任何返回流量回到內(nèi)網(wǎng)(即實現(xiàn)NAT服務(wù)器內(nèi)部網(wǎng)絡(luò)接口eth0與外部網(wǎng)絡(luò)接口eth1間的數(shù)據(jù)轉(zhuǎn)發(fā)),。 iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -d any/0 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT (4)外網(wǎng)主機啟動snort(/opt/ExpNIS/NetAD-Lab/Tools/ids/snort)以網(wǎng)絡(luò)嗅探方式運行(設(shè)置過濾器僅監(jiān)聽icmp數(shù)據(jù)包),,snort命令如下:
內(nèi)網(wǎng)主機ping探測外網(wǎng)主機,是否ping通未ping通,?描述snort捕獲數(shù)據(jù)現(xiàn)象捕獲到了源地址為內(nèi)網(wǎng)主機IP,、目的地址為外網(wǎng)主機IP的ICMP請求報文,但沒有捕獲到應(yīng)答報文 ,。 外網(wǎng)主機的默認網(wǎng)關(guān)指向NAT服務(wù)器的外網(wǎng)接口eth1,,內(nèi)網(wǎng)主機再次ping探測外網(wǎng)主機,是否ping通ping通,?外網(wǎng)主機停止snort監(jiān)聽(Ctrl C),,觀察捕獲到的ICMP請求數(shù)據(jù),其源IP地址是捕獲到的ICMP請求數(shù)據(jù)源IP地址是內(nèi)網(wǎng)主機IP地址 ,,結(jié)合先前實驗現(xiàn)象,,說明原因:外網(wǎng)主機在未指向默認網(wǎng)關(guān)的情況下(同時沒有相關(guān)路由信息),由于其回顯應(yīng)答的ICMP數(shù)據(jù)包目的地址為內(nèi)網(wǎng)主機IP,,與本地網(wǎng)絡(luò)不處于同一網(wǎng)段,,所以該數(shù)據(jù)包被丟棄,;相反指定了網(wǎng)關(guān),,外網(wǎng)主機會將該包發(fā)送給網(wǎng)關(guān),即NAT服務(wù)器,,NAT服務(wù)器將此包路由發(fā)送給內(nèi)網(wǎng)主機,。 3.設(shè)置iptables規(guī)則通過NAT屏蔽內(nèi)部網(wǎng)絡(luò)拓撲結(jié)構(gòu) 操作流程:在實現(xiàn)步驟2的操作基礎(chǔ)上,繼續(xù)添加nat表新規(guī)則,,實現(xiàn)數(shù)據(jù)包從內(nèi)網(wǎng)到外網(wǎng)的源地址轉(zhuǎn)換,。 (1)添加nat表新規(guī)則,通過網(wǎng)絡(luò)地址轉(zhuǎn)換實現(xiàn)內(nèi)網(wǎng)主機訪問外網(wǎng),。 iptables命令iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.0/24 -d any/0 -j SNAT --to-source 202.98.0.150 iptables -t nat -A POSTROUTING -m state --state ESTABLISHED,RELATED –j ACCEPT 由于步驟2中已經(jīng)添加了eth0到eth1的數(shù)據(jù)轉(zhuǎn)發(fā)規(guī)則,,所以此處不必再填寫。 (2)外網(wǎng)主機將默認網(wǎng)關(guān)指為空,并重新啟動snort捕獲ICMP數(shù)據(jù),。內(nèi)網(wǎng)主機對外網(wǎng)主機進行ping探測,,是否ping通ping 通?外網(wǎng)主機停止snort監(jiān)聽,,觀察所捕獲到ICMP請求數(shù)據(jù),,其源IP地址是NAT服務(wù)器外網(wǎng)接口IP?解釋實驗象由于NAT服務(wù)器對來自內(nèi)網(wǎng)主機的數(shù)據(jù)包做了SNAT,,即替換數(shù)據(jù)包源IP地址為外網(wǎng)接口IP,,然后再將轉(zhuǎn)換后的數(shù)據(jù)包發(fā)送到外網(wǎng)中。在接收到應(yīng)答包時,,對數(shù)據(jù)包進行反向轉(zhuǎn)換,,即替換數(shù)據(jù)包的目的IP地址為內(nèi)網(wǎng)主機IP,然后再將反向轉(zhuǎn)換后的數(shù)據(jù)包發(fā)送到內(nèi)網(wǎng)中,。 4.設(shè)置防火墻規(guī)則通過NAT實現(xiàn)端口重定向 操作流程:在實現(xiàn)步驟3的操作基礎(chǔ)上,,繼續(xù)添加nat表新規(guī)則,實現(xiàn)數(shù)據(jù)從外網(wǎng)到內(nèi)網(wǎng)的地址轉(zhuǎn)換,。 (1)添加nat表新規(guī)則,,實現(xiàn)80/tcp請求數(shù)據(jù)從外網(wǎng)到內(nèi)網(wǎng)的地址轉(zhuǎn)換。 iptables命令iptables -t nat -A PREROUTING -i eth1 –p tcp --dport 80 -s any/0 -d 202.98.0.150 -j DNAT --to-dest 192.168.0.50
iptables -t nat -A PREROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT
(2)完成NAT外網(wǎng)接口eth1到內(nèi)網(wǎng)接口eth0之間的數(shù)據(jù)轉(zhuǎn)發(fā),。 iptables命令iptables -A FORWARD -i eth1 -o eth0 -s any/0 -d 192.168.0.50 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
(3)NAT服務(wù)器停止本機Web服務(wù),,具體命令如下:
(4)確定外網(wǎng)主機默認網(wǎng)關(guān)指為空,內(nèi),、外網(wǎng)主機均啟動snort,,捕獲目的端口為80/tcp的數(shù)據(jù)包;外網(wǎng)主機啟動Web瀏覽器,,在地址欄中輸入:http://NAT服務(wù)器外網(wǎng)接口IP,,在成功訪問到Web頁面后,觀察snort捕獲數(shù)據(jù),,回答下列問題: 外網(wǎng)主機觀察80/tcp會話的源,、目的IP地址對是NAT服務(wù)器外網(wǎng)接口IP和外網(wǎng)主機IP內(nèi)網(wǎng)主機觀察80/tcp會話的源、目的IP地址對是外網(wǎng)主機IP和內(nèi)網(wǎng)主機IP,。 外網(wǎng)主機所訪問Web頁面來源哪臺主機? 外網(wǎng)主機所訪問Web頁面來自內(nèi)網(wǎng)主機,? 解釋上述實驗現(xiàn)象? 上述現(xiàn)象的原因是由于NAT服務(wù)器對來自外網(wǎng)主機的數(shù)據(jù)包做了DNAT,即替換數(shù)據(jù)包目的IP地址(也可替換目的端口)為內(nèi)網(wǎng)主機IP,,然后再將轉(zhuǎn)換后的數(shù)據(jù)包發(fā)送到內(nèi)網(wǎng)中,。在接收到應(yīng)答包時,對數(shù)據(jù)包進行反向轉(zhuǎn)換,,即替換數(shù)據(jù)包的源IP地址為NAT服務(wù)器外網(wǎng)接口IP,,然后再將反向轉(zhuǎn)換后的數(shù)據(jù)包發(fā)送到外網(wǎng)中,。 5.允許NAT服務(wù)器訪問外網(wǎng)主機提供的Web服務(wù) 回顧步驟1-4,思考下面的問題: 實驗期間表filter的INPUT和OUTPUT規(guī)則鏈默認策略始終為DROP(禁止數(shù)據(jù)包流入和流出),,而步驟中也沒有為這兩個鏈表進行任何操作,,為什么內(nèi)、外網(wǎng)主機間訪問還會成功呢,? (1)NAT服務(wù)器啟動Web瀏覽器,,訪問外網(wǎng)主機Web服務(wù),是否成功訪問不成功,? (2)添加filter表新規(guī)則,,僅允許NAT服務(wù)器本地數(shù)據(jù)訪問外網(wǎng)主機Web服務(wù)(80/tcp) iptables命令iptables -A OUTPUT -o eth1 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
(3)NAT服務(wù)器再次訪問外網(wǎng)主機Web服務(wù),是否成功訪問成功,?回答上面的思考問題,。
filter表INPUT和OUTPUT規(guī)則鏈僅對本地進程網(wǎng)絡(luò)通信起作用,換句話說,,轉(zhuǎn)發(fā)數(shù)據(jù)和NAT操作不受此規(guī)則鏈限制,,因為這時的數(shù)據(jù)包來源非本地進程。
五.應(yīng)用代理實驗 實驗概述:使用iptables squid方式來實現(xiàn)傳統(tǒng)代理,、透明代理和反向代理,。實驗角色說明如下:
實驗主機 |
實驗角色 |
系統(tǒng)環(huán)境 |
主機A、B |
內(nèi)網(wǎng)客戶端 |
Windows |
主機C,、D |
代理服務(wù)器 |
Linux |
主機E,、F |
外網(wǎng)Web服務(wù)器 |
Windows |
在進行實驗操作前,首先重啟iptables服務(wù),,并清空防火墻規(guī)則,。 1.傳統(tǒng)代理 (1)外網(wǎng)Web服務(wù)器手動分配IP地址,并確認本地Web服務(wù)已啟動,。 (2)代理服務(wù)器激活網(wǎng)絡(luò)接口eth1,,并手動分配IP地址,可通過以下兩種方式激活eth1: 通過“桌面”|“管理”|“網(wǎng)絡(luò)”激活eth1,,并手動分配IP地址,; 在控制臺中輸入命令ifconfig eth1 up激活eth1,輸入命令ifconfig eth1 202.98.X.Y/24為eth1分配IP地址。 (3)代理服務(wù)器配置squid,。 代理服務(wù)器進入目錄/usr/local/squid/etc/,,使用vim編輯器打開配置文件squid.conf,。 在squid.conf中配置如下選項:
(4)運行代理服務(wù)器 代理服務(wù)器進入目錄/usr/local/squid/sbin/,,輸入命令:./squid –NCd1啟動代理服務(wù)。 (5)通過代理訪問Web服務(wù)器 內(nèi)網(wǎng)客戶端打開IE瀏覽器,,通過“工具”|“Internet選項”|“連接”|“局域網(wǎng)設(shè)置”選中“為LAN使用代理服務(wù)器”,,在“地址”中輸入代理服務(wù)器的內(nèi)網(wǎng)IP,,在“端口”中輸入代理服務(wù)器的監(jiān)聽端口號,單擊“確定”按鈕,,完成瀏覽器設(shè)置,。 內(nèi)網(wǎng)客戶端在IE瀏覽器地址欄中輸入http://外網(wǎng)Web服務(wù)器IP地址,即可訪問到Web頁面,。 (6)驗證代理服務(wù)器的作用 內(nèi)網(wǎng)客戶訪問外網(wǎng)Web服務(wù),,是否可以訪問到頁面可以。 外網(wǎng)Web服務(wù)器關(guān)閉Web服務(wù),,代理服務(wù)器訪問外網(wǎng)Web服務(wù),,是否可以訪問到頁面 不可以。 內(nèi)網(wǎng)客戶端再次訪問外網(wǎng)Web服務(wù),,是否可以訪問到頁面可以,,為什么?雖然外網(wǎng)Web服務(wù)器已關(guān)閉,,但是代理服務(wù)器中還緩存有外網(wǎng)Web服務(wù)器的頁面,,所以內(nèi)網(wǎng)客戶端還可以訪問到外網(wǎng)Web服務(wù)器的頁面。 2.透明代理 (1)外網(wǎng)Web服務(wù)器開啟Web服務(wù),。 (2)代理服務(wù)器配置squid,。 代理服務(wù)器進入目錄/usr/local/squid/etc/,使用vim編輯器打開配置文件squid.conf,,配置如下選項:
(3)代理服務(wù)器添加iptables規(guī)則,。 對從代理服務(wù)器內(nèi)網(wǎng)接口進入的、基于tcp協(xié)議的,、目的端口是80的數(shù)據(jù)包,,做“端口重定向”。將數(shù)據(jù)包重定向到3128端口,,命令如下:
(4)運行代理服務(wù)器,。 (5)通過代理訪問Web服務(wù)器。 內(nèi)網(wǎng)客戶端將本地連接的“默認網(wǎng)關(guān)”設(shè)置為代理服務(wù)器的內(nèi)網(wǎng)IP,,即代理服務(wù)器的eth0網(wǎng)絡(luò)接口的IP,。 內(nèi)網(wǎng)客戶端打開IE瀏覽器,通過“工具”|“Internet選項”|“連接”|“局域網(wǎng)設(shè)置”,,取消“為LAN使用代理服務(wù)器”,。 內(nèi)網(wǎng)客戶端在IE瀏覽器地址欄輸入“http://外網(wǎng)Web服務(wù)器的IP”,即可訪問到外網(wǎng)Web服務(wù)器的Web頁面,。 3.反向代理 (1)內(nèi)網(wǎng)客戶端開啟Web服務(wù),。 (2)代理服務(wù)器配置squid。 代理服務(wù)器進入目錄/usr/local/squid/etc/,,使用vim編輯器打開配置文件squid.conf,,配置如下選項:
(3)停止代理服務(wù)器的Web服務(wù),。 在代理服務(wù)器的終端輸入命令:service httpd stop。 (4)刪除緩存文件,。 刪除目錄/usr/local/squid/var/cache/00/00下所有文件,。 (5)運行代理服務(wù)器。 (6)外網(wǎng)通過代理訪問內(nèi)網(wǎng)客戶端Web服務(wù) 外網(wǎng)Web服務(wù)器在IE瀏覽器地址欄中輸入“http://代理服務(wù)器外網(wǎng)IP”即可訪問到內(nèi)網(wǎng)客戶端的Web頁面,。
【實驗總結(jié)】
通過這次實驗使我熟悉了對iptables常用命令的認識,,對它進行包過濾事件處理的理解,以及如何利用iptables對網(wǎng)絡(luò)事件進行審計原理的理解,,為進一步的學(xué)習(xí)打下了基礎(chǔ),。
|