- 相關(guān)推薦
基于LINUX操作系統 的防火墻技巧及其具體實(shí)現
摘要 本文介紹了LINUX下常用的防火墻規矩配置軟件Ipchains;從實(shí)現原理、配置法子 以及功效特性的角度描繪了LINUX防火墻的三種功效;并給出了一個(gè)LINUX防火墻實(shí)例作為參考。
要害字 LINUX防火墻 ipchains 包過(guò)濾 代理 IP裝作
1 前言
防火墻作為網(wǎng)絡(luò )安全措施 中的一個(gè)首要組成部分,一直受到人們的廣泛關(guān)注。LINUX是這幾年一款異軍崛起的操作系統 ,以其公開(kāi)的源代碼、強大穩固的網(wǎng)絡(luò )功效和大宗的免費資源受到業(yè)界的廣泛贊美 。LINUX防火墻其實(shí)是操作系統 本身所自帶的一個(gè)功效模塊。通過(guò)安裝特定的防火墻內核,LINUX操作系統 會(huì )對接管到的數據包按必然的策略進(jìn)行處理 。而用戶(hù)所要做的,就是應用特定的配置軟件(如ipchains)去定制適宜自己的“數據包處理 策略”。
2 LINUX防火墻配置軟件—Ipchains
Ipchains是LINUX 2.1及其以上版本中所帶的一個(gè)防火墻規矩管理程序。用戶(hù)可以應用
它來(lái)建立 、編輯 、刪除系統 的防火墻規矩。但通常,需要 自己創(chuàng )立一個(gè)防火墻規矩腳本 /etc/rc.d/rc.firewall,并使系統 啟動(dòng)時(shí)主動(dòng)運行這個(gè)腳本。
一個(gè)LINUX防火墻系統 的安全機制是通過(guò)Input、Output、Forward這三個(gè)“防火鏈”來(lái)實(shí)現的。而用戶(hù)正是應用 ipchains在這三個(gè)“鏈”上分辨 創(chuàng )立一套“防火規矩 ”,來(lái)完成對到來(lái)數據包層層限制的目標,其組織結構 如圖1所示。
其中,每個(gè)鏈都包孕一組由用戶(hù)創(chuàng )立的過(guò)濾規矩,數據包依次達到每個(gè)鏈,并對比其中的每條規矩,直到找出匹配規矩并履行相應策略(如通過(guò)、回絕等),否則履行默認策略。實(shí)際中,數據包在達到 Input鏈之前還要進(jìn)行測試和正常性反省,在到路由表之前還要被確定 是否被裝作,這些,在本圖中都被省略了。
Ipchains 經(jīng)常應用的命令行款式如下:
Ipchains –A chain [–i interface] [–p protocol] [[!] -y]
[–s source-ip [port]] [-d destination-ip [port]] –j policy [-l]
對各選項的闡明如下表:
-A <chain> 添加一規矩到鏈尾。chain可為input、output、forward。
-i <interface> 指定本規矩實(shí)用的網(wǎng)絡(luò )接口。通常有eth0、eth1、lo、ppp0等。
-p <protocol> 指定本規矩實(shí)用的IP協(xié)議 ,如tcp、udp、icmp等。
[!] –y -y表明tcp握手中的連接 懇求標記位SYN; ! –y 表現對該懇求的響應。
-s src-ip [port] 指明數據包的源IP地址,port表現本規矩實(shí)用的端口號。
-d dst-ip [port] 指明數據包的目標 IP地址及端口號。
-j policy 指定本規矩對匹配數據包的處理 策略:ACCEPT、DENY或REJECT。
-l 在系統 日志/var/log/messages中記載 與該規矩匹配的數據包。
3 LINUX防火墻的幾種常見(jiàn)功效
由于每一個(gè)用戶(hù)的請求和所處的環(huán)境都不一樣,LINUX防火墻會(huì )根據 用戶(hù)的設置實(shí)現各種不同的功效。但一般說(shuō)來(lái),以下三種功效是大多數用戶(hù)最常用到的。
3.1 包過(guò)濾
對數據包進(jìn)行過(guò)濾可以說(shuō)是任何防火墻所具備的最根基的功效,而LINUX防火墻本身從某個(gè)角度也可以說(shuō)是一種“包過(guò)濾防火墻”。在LINUX防火墻中,操作系統 內核對到來(lái)的每一個(gè)數據包進(jìn)行反省,從它們的包頭中提取出所需要 的信息,如源IP地址、目標 IP地址、源端口號、目標端口號等,再與已建立 的防火規矩逐條進(jìn)行對比,并履行所匹配規矩的策略,或履行默認策略,這個(gè)歷程在圖1中已經(jīng)形象的表現 出來(lái)。
值得注意的是,在制定 防火墻過(guò)濾規矩時(shí)通常有兩個(gè)根基的策略法子 可供選擇:一個(gè)是默認容許一切,即在接管所有數據包的根基上明確 地阻撓那些特別的、不盼望收到的數據包;還有一個(gè)策略就是默認阻撓一切,即首先阻撓所有的數據包通過(guò),然后再根據 所盼望供給的服務(wù)去一項項容許需要 的數據包通過(guò)。一般說(shuō)來(lái),前者使啟動(dòng)和運行防火墻變得更加容易,但卻更容易為自己留下安全隱患。
通過(guò)在防火墻外部接口處對進(jìn)來(lái)的數據包進(jìn)行過(guò)濾,可以有效地禁止絕大多數有意或無(wú)意地網(wǎng)絡(luò )攻擊,同時(shí),對發(fā)出的數據包進(jìn)行限制,可以明確 地指定內部網(wǎng)中哪些主機可以造訪(fǎng)互聯(lián)網(wǎng),哪些主機只能享用哪些服務(wù)或登陸哪些站點(diǎn),從而實(shí)現對內部主機的管理?梢哉f(shuō),在對一些小型內部局域網(wǎng)進(jìn)行安全保護和網(wǎng)絡(luò )管理時(shí),包過(guò)濾確鑿是一種簡(jiǎn)略而有效的手法。
3.2 代理
LINUX防火墻的代理功效是通過(guò)安裝相應的****實(shí)現的。它使那些不具備公共IP的內部主機也能造訪(fǎng)互聯(lián)網(wǎng),并且很好地屏蔽了內部網(wǎng),從而有效保障了內部主機的安全。為了明確地描繪這一首要功效的實(shí)現歷程,特假設以下范例情況 ,如圖2所示:
steven為內部網(wǎng)中一臺IP是192.168.0.2的主機,其上安裝有IE5.0涉獵器,并配置為應用防火墻主機192.168.0.1:8080作為代理。firewall就是我們討論的LINUX防火墻,有兩個(gè)網(wǎng)絡(luò )接口,分辨 是內部接口eth1=192.168.0.1、外部接口eth0=202.117.120.1。在firewall主機上安裝有Web****“squid”,并配置其代理端口為8080。www.263.net為263網(wǎng)站的Web服務(wù)器,IP為211.100.31.131,Web服務(wù)端口80。
如果要從steven主機造訪(fǎng) 263的主頁(yè),其具體的通信 歷程如圖中所示:
(1)IE通過(guò)steven的非專(zhuān)用端口1110 (在1024~65535之間隨機產(chǎn)生 )與防火墻的代理
端口8080建立 連接 ,懇求 “http://www.263.net”頁(yè)面。
(2)squid代理接管到懇求后,先查找域名“www.263.net”,得到地址211.100.31.131(該
步驟圖中省略),然后通過(guò)防火墻端口1050與該地址的80端口建立 一個(gè)連接 ,懇求頁(yè)面。
(3)www.263.net服務(wù)器接到懇求后將頁(yè)面傳給squid代理。
(4)防火墻代理得到頁(yè)面后,把數據復制到(1)中所建立 的連接 上,IE得到數據并
將“www.263.net”頁(yè)面顯示出來(lái)。
通過(guò)以上描繪,可以明確地領(lǐng)會(huì ) 到內部主機、LINUX代理防火墻以及外部服務(wù)器之間是如何進(jìn)行數據傳輸的,那么,在LINUX防火墻內部,那些“防火鏈”又是如何工作的呢?其工作歷程如圖3所示:
steven主機發(fā)來(lái)的數據包經(jīng)由內部接口eth1進(jìn)來(lái)后,首先接管INPUT鏈的“反省 ”:系統 內核從包頭中提取出信息,與INPUT鏈中所有實(shí)用于eth1接口的過(guò)濾規矩逐個(gè)對比,直到匹配通過(guò)。之后,該數據包被轉發(fā)給本地的代理歷程。同樣,代理歷程發(fā)送給遠程Web服務(wù)器的數據包在從防火墻外部接口發(fā)送出去之前,也要經(jīng)過(guò)OUTPUT鏈的“反省 ”,即與OUTPUT鏈中所有實(shí)用于eth0接口的規矩一一對比。返回的歷程正好與上述相反,在此就不再贅述
為了實(shí)現以上歷程,我們必須 在防火墻規矩腳本中添加以下規矩:
ipchains –A input –i eth1 –p tcp –s 192.168.0.2 1110 –d 192.168.0.1 8080 –j ACCEPT
ipchains –A output –i eth0 –p tcp –s 202.117.120.1 1050 –d 211.100.31.131 80 –j ACCEPT
ipchains –A input –i eth0 –p tcp !-y –s 211.100.31.131 80 –d 202.117.120.1 1050 –j ACCEPT
ipchains –A output –i eth1 –p tcp ! –y –s 192.168.0.1 8080 –d 192.168.0.2 1110 –j ACCEPT
從上文對代理功效的原理和實(shí)現的敘述中,我們可以看出,LINUX防火墻實(shí)際上扮演了一個(gè)“代理網(wǎng)關(guān)”的角色。內部主機和遠程服務(wù)器分辨 都只與防火墻進(jìn)行連接 ,而真正的“起點(diǎn)”和“終點(diǎn)”之間卻毫無(wú)接洽。
3.3 IP裝作
IP裝作(IP Masquerade)是LINUX操作系統 自帶的又一個(gè)首要功效。通過(guò)在系統 內核增長(cháng)相應的裝作模塊,內核可以主動(dòng)地對經(jīng)過(guò)的數據包進(jìn)行“裝作”,即修正包頭中的源目標 IP信息,以使外部主機誤覺(jué)得該包是由防火墻主機發(fā)出來(lái)的。這樣做,可以有效解決應用內部保存 IP的主機不能造訪(fǎng)互聯(lián)網(wǎng)的問(wèn)題,同時(shí)屏蔽了內部局域網(wǎng)。這一點(diǎn),與前面所講的代理所達到 的目標是很類(lèi)似 的。
關(guān)于IP裝作在LINUX防火墻內部的具體實(shí)現歷程,請看圖4。
仍以圖2中所示的范例情況 為例,steven主機的IE歷程直接與遠程的Web服務(wù)器建立 一個(gè)連接 。當數據包達到防火墻的內部接口后,照樣要例行INPUT鏈的反省。之后,數據包被送到FORWARD鏈,接管系統 內核的“裝作處理 ”,即將包頭中的源IP地址改為防火墻外部接口eth0的地址,并在系統 中做下記載 ,以便一會(huì )兒對其回應包的目標 IP進(jìn)行“恢復”。這樣,當該數據包順利從外部接口出來(lái)時(shí),其包頭中源IP已被改為202.117.120.1。遠程服務(wù)器會(huì )覺(jué)得這是從防火墻的合法地址發(fā)來(lái)的,從而對其做出響應。當遠程服務(wù)器返回的回應包達到防火墻時(shí),先經(jīng)過(guò)INPUT鏈,然后會(huì )根據 系統 關(guān)于IP裝作的記載 對數據包的目標 IP進(jìn)行恢復,即將202.117.120.1改為192.168.0.2,最后再經(jīng)過(guò)OUTPUT鏈返回到steven主機。
為了實(shí)現這個(gè)歷程,我們必須 在防火墻規矩腳本中添加以下規矩:
ipchains –A input –i eth1 –p tcp –s 192.168.0.2 1110 –d 211.100.31.131 80 –j ACCEPT
ipchains –A output –i eth0 –p tcp –s 202.117.120.1 1050 –d 211.100.31.131 80 –j ACCEPT
ipchains –A input –i eth0 –p tcp !-y –s 211.100.31.131 80 –d 202.117.120.1 1050 –j ACCEPT
ipchains –A output –i eth1 –p tcp ! –y –s 211.100.31.131 80 –d 192.168.0.2 1110 –j ACCEPT
ipchains –A forward –i eth0 –s 192.168.0.2 1110 –d 211.100.31.131 80 –j MASQ
與代理功效對比而言,IP裝作不需要 安裝相應的****,數據包的裝作對用戶(hù)來(lái)說(shuō)都是“透明”的,并且全部歷程都是在IP層實(shí)現,因此實(shí)現速度較快。錯誤是不能對經(jīng)過(guò)的數據包作詳細的記載 。
以上介紹了LINUX防火墻在實(shí)際的設置中常用到的三種功效。但一般說(shuō)來(lái),用戶(hù)在創(chuàng )立自己的防火墻規矩腳本時(shí),可以根據 自己的需要 將這三種功效組合起來(lái)實(shí)現。
4 一個(gè)LINUX防火墻實(shí)例
以下是我前一段光陰為某辦公室搭建的LINUX防火墻的實(shí)際配置,給出以供參考。
有兩個(gè)局域網(wǎng),LAN1地址:202.117.120.65/255.255.255.248
為公共網(wǎng)絡(luò )IP,LAN2地址為192.168.0.0/255.255.255.0,為內部保存地址。LINUX防火墻有兩個(gè)內部接口:202.117.120.70接LAN1;192.168.0.1接LAN2。
現對防火墻進(jìn)行配置,使LAN2的主機通過(guò)IP裝作造訪(fǎng)互聯(lián)網(wǎng),但只容許應用外部Web*****202.117.112.34的1252端口。LAN1中的主機被限制應用幾種常用的互聯(lián)網(wǎng)服務(wù)(DNS、SMTP、POP3、HTTP和FTP)。
下面就是創(chuàng )立的防火墻規矩腳本:
#/etc/rc.d/rc.firewall
#!/bin/sh
# eth0---External_interface
# eth1---LAN1_interface
# eth2---LAN2_interface
echo "Starting firewalling . . ."
#Flush any existing rules from all chains
ipchains -F
#Set the default policy to deny
ipchains -P input DENY
ipchains -P output REJECT
ipchains -P forward REJECT
#Enable traffic on the loopback interface
ipchains -A input -i lo -j ACCEPT
ipchains -A output -i lo -j ACCEPT
#Enable the traffic on the eth1
ipchains -A input -i eth1 -j ACCEPT
ipchains -A output -i eth1 -j ACCEPT
#the traffic on the eth2 only enablling using the WEB PROXY
ipchains -A input -i eth2 -p tcp -s 192.168.0.0/24 1024:65535 -d 202.117.112.34 1252 -j ACCEPT
ipchains -A output -i eth2 -p tcp ! -y -s 202.117.112.34 1252 -d 192.168.0.0/24 1024:65535 -j ACCEPT
#Forwarding rules
ipchains -A forward -i eth0 -s 202.117.120.64/29 -j ACCEPT
ipchains -A forward -i eth0 -s 192.168.0.0/24 -j MASQ
ipchains -A forward -i eth1 -d 202.117.120.64/29 -j ACCEPT
#Enable outgoing the packets from LAN on the External_Interface
ipchains -A output -i eth0 -j ACCEPT
#Enable incoming some ICMP messages on eth
# 1.Dest_Unreachable,Service_Unavailable
ipchains -A input -i eth0 -p icmp -s any/0 3 -d 202.117.120.64/29 -j ACCEPT
# 2.Time_Exceeded
ipchains -A input -i eth0 -p icmp -s any/0 11 -d 202.117.120.64/29 -j ACCEPT
# 3.Allow outgoing pings to anywhere
ipchains -A input -i eth0 -p icmp -s any/0 0 -d 202.117.120.64/29 -j ACCEPT
#Enable Proxy of 202.117.112.34:1252
ipchains -A input -i eth0 -p tcp ! -y -s 202.117.112.34 1252 -j ACCEPT
#DNS (53) (DNS:202.117.112.3)—client modes
ipchains -A input -i eth0 -p udp -s 202.117.112.3 53 -d 202.117.120.64/29 1024:65535 -j ACCEPT
ipchains -A input -i eth0 -p tcp ! -y -s 202.117.112.3 53 -d 202.117.120.64/29 1024:65535 -j ACCEPT
#SMTP(25)Enable sending mail through a remote SMTP gateway
ipchains -A input -i eth0 -p tcp ! -y -s any/0 25 -d 202.117.120.64/29 1024:65535 -j ACCEPT
#POP(110)--Enable receiving mail from a remote POP server
ipchains -A input -i eth0 -p tcp ! -y -s any/0 110 -d 202.117.120.64/29 1024:65535 -j ACCEPT
#HTTP(80) --Enable accessing remote WEB sites as a client
ipchains -A input -i eth0 -p tcp ! -y -s any/0 80 -d 202.117.120.64/29 1024:65535 -j ACCEPT
#FTP(20,21) --Enable accessing remote FTP servers
ipchains -A input -i eth0 -p tcp ! -y -s any/0 21 -d 202.117.120.64/29 1024:65535 -j ACCEPT
ipchains -A input -i eth0 -p tcp -s any/0 20 -d 202.117.120.64/29 1024:65535 -j ACCEPT
ipchains -A input -i eth0 -p tcp ! -y -s any/0 1024:65535 -d 202.117.120.64/29 1024:65535 -j ACCEPT
echo "done"
exit 0
5 收場(chǎng)語(yǔ)
本文偏重從防火墻內部工作歷程的角度分辨 對LINUX防火墻的包過(guò)濾、代理以及IP裝作功效進(jìn)行了分析,同時(shí)涉及到了一些網(wǎng)絡(luò )配置、用ipchains具體實(shí)現等方面的內容。文末給出的實(shí)例已在實(shí)際中調試通過(guò)。
參考文獻
1 Robert L.Ziegler,《Linux防火墻》國民郵電出版社,2000.10
2 W.Richard Stevens,《TCP/IP詳解 卷一:協(xié)議 》機械工業(yè)出版社,2000.4.1
3 Rusty Russell,“Linux IPCHAINS-HOWTO”,netfilter.samba.org,Jul 4,2000
5 Rawn Shah,“Using your old Pentiums and Linux to create a Firewall”,Independent
6 technologist and freelance journalist,September,1999
【基于LINUX操作系統 的防火墻技巧及其具體實(shí)現】相關(guān)文章:
基于linux的網(wǎng)絡(luò )對講機的研究與實(shí)現03-07
基于Vxworks實(shí)時(shí)操作系統的串口通信程序設計與實(shí)現03-18
基于嵌入式Linux的終端AVI視頻編碼器的實(shí)現03-07
基于A(yíng)RM9微處理器與Linux操作系統的SD驅動(dòng)開(kāi)發(fā)03-07
組件機制與操作系統的實(shí)現03-18
基于模糊控制的遲早門(mén)同步器及其FPGA實(shí)現03-20