歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

怎樣用ipchains構建防火牆


防火牆是提供網絡安全性的重要手段之一,RedHat6.1提供了用於實現過濾型防火牆的工具包--ipchains。實現防火牆的策略一般有兩種:在第一種方式下,首先允許所有的包,然後在禁止有危險的包通過防火牆;第二種方式則相反,首先禁止所有的包,然後再根據所需要的服務允許特定的包通過防火牆。相比較而言,第二種方式更能保證網絡的安全性。但對於第二種方式,要求使用者知道Server/Client交互的基本原理和特定服務所對應的具體端口。本文將從一個具體的實列出發,討論怎樣采用第二種方式構建企業的防火牆系統。

一、Server/Client的交互原理

首先讓我們看一下服務器/客戶機的交互原理。服務器提供某特定功能的服務總是由特定的後台程序提供的。在TCP/IP網絡中,常常把這個特定的服務綁定到特定的TCP或UDP端口。之後,該後台程序就不斷地監聽(listen)該端口,一旦接收到符合條件的客戶端請求,該服務進行TCP握手後就同客戶端建立一個連接,響應客戶請求。與此同時,再產生一個該綁定的拷貝,繼續監聽客戶端的請求。

舉一個具體的例子:假設網絡中有一台服務器A(IP地址為a.b.c.1)提供WWW服務,另有客戶機B(a.b.c.4)、C(a.b.c.7)。首先,服務器A運行提供WWW服務的後台程序(比如Apache)並且把該服務綁定到端口80,也就是說,在端口80進行監聽。當B發起一個連接請求時,B將打開一個大於1024的連接端口(1024內為已定義端口),假設為1037。A在接收到請求後,用80端口與B建立連接以響應B的請求,同時產生一個80端口綁定的拷貝,繼續監聽客戶端的請求。假如A又接收到C的連接請求(設連接請求端口為1071),則A在與C建立連接的同時又產生一個80端口綁定的拷貝繼續監聽客戶端的請求。如下所示,每個連接都是唯一的。


服務器 客戶端
連接1:a.b.c.1:80 < = > a.b.c.4:1037
連接2:a.b.c.1:80 < = > a.b.c.7:1071

二、服務端口

每一種特定的服務都有自己特定的端口,一般說來小於1024的端口多為保留端口,或者說是已定義端口,低端口分配給眾所周知的服務(如WWW、FTP等等),從512到1024的端口通常保留給特殊的UNIX TCP/IP應用程序,具體情況請參考/etc/services文件或RFC1700。

三、網絡環境

假設網絡環境如下:某一單位,租用DDN專線上網,網絡拓撲如下:


+--+
| 內部網段 |eth1 ++eth0 DDN
| +--|firewall|Internet
| 198.168.80.0 | +---+
+--+
eth0: 198.199.37.254
eth1: 198.168.80.254

以上的IP地址都是Internet上真實的IP,故沒有用到IP欺騙。並且,我們假設在內部網中存在以下服務器:

dns服務器:dns.yourdomain.com 由firewall兼任
www服務器: www.yourdomain.com < http://www.yourdomain.com >
198.168.80.11
ftp服務器: ftp.yourdomain.com < ftp://ftp.yourdomain.com >
198.168.80.12
bbs服務器:bbs.yourdomain.com 198.168.80.13
email服務器:mail.yourdomain.com 198.168.80.14

下面我們將用ipchains一步一步來建立我們的包過濾防火牆。

四、實現步驟

說明:有關ipchains的詳細命令用法,請參考有關HOWTO文檔。在本例中,我們將在eth0和eth1的input chain設置過濾規則。

1. 在/etc/rc.d/目錄下用touch命令建立firewall文件,執行chmod u+x firewll以更改文件屬性 ,編輯/etc/rc.d/rc.local文件,在末尾加上/etc/rc.d/firewall 以確保開機時能自動執行該腳本。

2. 刷新所有的ipchains

#!/bin/sh

echo "Starting ipchains rules..."
#Refresh all chains
/sbin/ipchains -F

3.設置WWW包過濾
說明:WWW端口為80,采用tcp或udp協議。規則為:eth1= >允許所有來自Intranet的WWW包;eth0= >僅允許目的為內部網WWW服務器的包。


#Define HTTP packets

#Allow www request packets from
Internet clients to www servers
/sbin/ipchains -A input -p tcp
-s 0.0.0.0/0 1024: -d 198.168.80.11/32
www -i eth0 -j ACCEPT
/sbin/ipchains -A input -p udp
-s 0.0.0.0/0 1024: -d 198.168.80.11/32
www -i eth0 -j ACCEPT

#Allow response from Intranet www
servers to request Internet clients

/sbin/ipchains -A input -p tcp -s
198.168.80.11/32 www -d 0.0.0.0/0
1024: -i eth1 -j ACCEPT
/sbin/ipchains -A input -p udp -s
198.168.80.11/32 www -d 0.0.0.0/0
1024: -i eth1 -j ACCEPT

#Allow www request packets from
Intranet clients to Internet www
servers
/sbin/ipchains -A input -p tcp -
s 198.168.80.0/24 1024: -d 0.0.0.0/0 www
-i eth1 -j ACCEPT
/sbin/ipchains -A input -p udp -s
198.168.80.0/24 1024: -d 0.0.0.0/0 www
-i eth1 -j ACCEPT

#Allow www response packets from
Internet www servers to Intranet
clients
/sbin/ipchains -A input -p tcp -s 0.0.0.0/0
www -d 198.168.80.0/24 1024:
-i eth0 -j ACCEPT
/sbin/ipchains -A input -p udp -s 0.0.0.0/0
www -d 198.168.80.0/24 1024:
-i eth0 -j ACCEPT

4.設置ftp包過濾
說明:ftp端口為21,ftp-data端口為20,均采用tcp協議。規則為:eth1= >允 許所有來自Intranet的ftp、ftp-data包;eth0=>僅允許目的為內部網ftp服務器的 包。

#Define FTP packets

#Allow ftp request packets from Internet
clients to Intranet ftp server
/sbin/ipchains -A input -p tcp -s 0.0.0.0/0
1024: -d 198.168.80.12/32
ftp -i eth0 -j ACCEPT
/sbin/ipchains -A input -p tcp -s 0.0.0.0/0
1024: -d 198.168.80.12/32
ftp-data -i eth0 -j ACCEPT

#Allow ftp response packets from Intranet
ftp server to Internet
clients
/sbin/ipchains -A input -p tcp -s
198.168.80.12/32 ftp -d 0.0.0.0/0
1024: -i eth1 -j ACCEPT
/sbin/ipchains -A input -p tcp -s
198.168.80.12/32 ftp-data -d 0.0.0.0/0
1024: -i eth1 -j ACCEPT

#Allow ftp request packets from Intranet
clients to Internet ftp servers
/sbin/ipchains -A input -p tcp -s 198.
168.80.0/24 1024: -d 0.0.0.0/0 ftp
-i eth1 -j ACCEPT
/sbin/ipchains -A input -p tcp -s 198.
168.80.0/24 1024: -d 0.0.0.0/0
ftp-data -i eth1 -j ACCEPT

#Allow ftp response packets from Internet
ftp servers to Intranet clients
/sbin/ipchains -A input -p tcp -s 0.0.0.0/0
ftp -d 198.168.80.0/24 1024:
-i eth0 -j ACCEPT
/sbin/ipchains -A input -p tcp -s 0.0.0.0/0
ftp-data -d 198.168.80.0/24
1024: -i eth0 -j ACCEPT

5.設置telnet包過濾
說明:telnet端口為21,采用tcp協議。規則為:eth1=>允許所有來自 Intranet的telnet包;eth0=>僅允許目的為bbs服務器的包;為了提高網絡安全 性,禁止所有對firewall的telnet請求。


#Define telnet packets

#Allow telnet request packets from
Internet clients to Intranet bbs server
/sbin/ipchains -A input -p tcp -s 0.0.0.0/0
1024: -d 198.168.80.13/32
telnet -i eth0 -j ACCEPT

#Allow telnet response packets from bbs
server to Internet clients
/sbin/ipchains -A input -p tcp -s
198.168.80.13/32 telnet -d 0.0.0.0/0
1024: -i eth1 -j ACCEPT

#Allow telnet request packets from
Intranet clients to Internet telnet servers
/sbin/ipchains -A input -p tcp -s
198.168.80.0/24 1024: -d 0.0.0.0/0
telnet -i eth1 -j ACCEPT

#Allow telent response packets from
Internet telnet servers to Intranet clients
/sbin/ipchains -A input -p tcp -s 0.0.0.0/0
telnet -d 198.168.80.0/24
1024: -i eth0 -j ACCEPT

6.設置smtp包過濾
說明:smtp端口為21,采用tcp協議。規則為:eth1= >允許所有來自Intranet的smtp包;eth0=>僅允許目的為email服務器的smtp請求。

#Define smtp packets

#Allow smtp request packets from Internet
smtp servers to Intranet email server
/sbin/ipchains -A input -p tcp -s 0.0.0.0/0
1024: -d 198.168.80.14/32
smtp -i eth0 -j ACCEPT

#Allow smtp response packets from
Intranet email
server to Internet smtp servers
/sbin/ipchains -A input -p tcp -s
198.168.80.14/32 smtp -d 0.0.0.0/0
1024: -i eth1 -j ACCEPT

#Allow smtp request packets from Intranet
clients to Internet smtp servers
/sbin/ipchains -A input -p tcp -s
198.168.80.0/24 1024: -d 0.0.0.0/0
smtp -i eth1 -j ACCEPT

#Allow smtp response packets from Internet
smtp servers to Intranet clients
/sbin/ipchains -A input -p tcp -s
0.0.0.0/0 smtp -d 198.168.80.0/24
1024: -i eth0 -j ACCEPT

7.設置POP-3包過濾
說明:POP-3端口為110,采用tcp或udp協議。規則為:eth1=>允許所有來自Intranet的POP-3包;eth0=>允許所有目的為Intranet(email server 除外)的POP-3包。

#Define pop-3 packets

#Allow pop-3 request packets from
Intranet clients to Internet pop-3 servers
/sbin/ipchains -A input -p tcp -s
198.168.80.0/24 1024: -d 0.0.0.0/0
pop-3 -i eth1 -j ACCEPT
/sbin/ipchains -A input -p udp -s
198.168.80.0/24 1024: -d 0.0.0.0/0
pop-3 -i eth1 -j ACCEPT

#Allow pop-3 response packets from Internet pop-3
servers to Intranet clients (except email server)
/sbin/ipchains -A input -p tcp -s 0.0.0.0/0
pop-3 -d 198.168.80.0/24
1024: -i eth0 -j ACCEPT
/sbin/ipchains -A input -p udp -s 0.0.0.0/0
pop-3 -d 198.168.80.0/24
1024: -i eth0 -j ACCEPT

8.設置domain包過濾
說明:domain端口為53,采用tcp或udp協議。規則為:允許所有來自Intranet和Internet的domain請求。筆者在用網絡監視軟件測試時,發現domain的請求端口都是大於1100的,但是找不到相關的解釋。


#Donmain name server

#Allow domain request packets from
Intranet clients to Internet domain servers
/sbin/ipchains -A input -p tcp -s
198.168.80.0/24 1100: -d 0.0.0.0/0
domain -i eth1 -j ACCEPT
/sbin/ipchains -A input -p udp -s
198.168.80.0/24 1100: -d 0.0.0.0/0
domain -i eth1 -j ACCEPT

#Allow domain response packets from Internet
domain servers to Intranet clients
/sbin/ipchains -A input -p tcp -s 0.0.0.0/0
domain -d 198.168.80.0/24
1100: -i eth0 -j ACCEPT
/sbin/ipchains -A input -p udp -s 0.0.0.0/0
domain -d 198.168.80.0/24
1100: -i eth0 -j ACCEPT

9.設置icmp包過濾
說明:icmp包通常用於網絡測試等,故允許所有的icmp包通過。(另:icmp包通常帶來的危害為ping of death,但是高版本的linux內核已經包含了相應的措施來避免ping of death)

#Define icmp packets

/sbin/ipchains -A input -p icmp -j ACCEPT

10.設置缺省包過濾規則
說明:除了以上所允許通過的包以外,禁止其他包通過。

#Define all rules on input chain
/sbin/ipchains -A input -j DENY -l

通過以上個步驟,我們建立了一個相對完整的防火牆。該防火牆禁止除了提供基本服務以外的包通過。但是該防火牆還有不完善的地方,比如,某些搜索引擎會打開一個小於1024的但不常用的端口的連接,這樣的包就無法通過該防火牆,從而使用戶不能使用該搜索引擎。但是提高了網絡的安全性,消除了安全隱患,所謂魚與熊掌不可兼得,安全性重要還是服務重要就要看不同的情況了。


雲南玉溪師專計算機系 白雲炜


摘自:Linux技術論壇


Copyright © Linux教程網 All Rights Reserved