Chinaunix首页 | 论坛 | 博客
  • 博客访问: 785115
  • 博文数量: 201
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 2391
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-06 22:16
文章分类

全部博文(201)

文章存档

2011年(1)

2010年(2)

2009年(57)

2008年(141)

我的朋友

分类: LINUX

2008-03-22 14:27:26

ShoreWall 簡介
ShoreWall 是一套功能強大的防火牆軟體,是一套很棒的 Netfilter 整合工具,它把iptables, ip, tc...等一堆常見的 netfilter 指令都整合起來,把原本複雜難懂的的指令集通通變成設定檔,再搭配一些規則的語法,可以讓Linux的系統管理人員不再需要去查詢一 堆很難懂的指令,只要會設定規則,並且搭配ShoreWall的設定檔,就可以輕易的完成那些商業防火牆套件的功能。
另外,在使用 ShoreWall的時候也具有很高的彈性,管理者可以在設定檔中依喜好設定各種規則,因此,ShoreWall這套軟體可以用在一台同時擁有路由器/防 火牆/閘道器的Linux伺服器中,而且幾乎netfilter所支援的功能,ShoreWall都可以做到。
除了將指令整合到設定 檔之外,ShoreWall也可以定義介面的代號,比方說一個內部網路192.168.1.0/24就可以定義為一個loc的變數,那麼就可以用很簡單的 變數來代表內部網路的實際設定,這樣子的話,設定的規則就會更加的滐@易懂,詳細的設定會在以後的電子報內容進行說明。
ShoreWall 功能說明
除了設定上的便利性之外,ShoreWall也支援以下的功能,列表如下所示:
1. 使用Netfilter的連線記錄的能力,用在標準封包過濾的功能上。
2. 可以使用在路由器/防火牆/閘道器的應用上。
3. 可以完整的自訂設定檔的內容。
4. 沒有限制網路介面的數目(ISA Server 2000只允許三個網路介面)。
5. 除了文字介面外,在Webmin1.060版之後,也可以使用圖形介面來管理。
6. 支援許多位置管理/路由協定,列表如下。
Masquerading/SNAT
Port Forwarding(DNAT)
One-to-One NAT
Proxy ARP
NETMAP(核心2.4版本需修補或是在版本2.6以上)
7. 可以將單一的IP或是整個子網路列入黑名單中。
8. 可以使用指令來啟動、停止或是清除防火牆規則。
9. 支援狀態監控,針對較特別的封包發出提示的訊息。
10.支援VPN,列表如下。
IPSEC
GRE
IPIP
Open VPN Tunnels
PPTP
11.可支援頻寬整合的機制,但是需要外加的設置。
12.支援各種GNU/Linux的套件。
13.支援MAC(Media Access Control)位址的確認機制。
14.流量統計
15.支援Bridge(核心2.4版本需修補或是在版本2.6以上)
結論
總 體來說,ShoreWall可以解決許多Linux網管人員心中的痛苦,因為管理一個Linux的防火牆是一件很惱人的事情,就算規則寫的再好,也是有一 大串的指令必需自已親自撰寫,就算寫好了,在修正的時候也是件大工程,如果是小規模的就還好,但是如果同時擁有數個介面..然後每個介面都要寫上數十行的 指令的話,那麼就不是件簡單的事了,重點是,使用ShoreWall這套Open Source的防火牆軟體,完全不用受制於商業套件的限制,這對企業主 來說,也是一個很不錯的選擇。
下載及安裝
1、下載
ShoreWall的官方網址為http: //,在安裝之前先要去下載它的原始碼程式,位址在http: ///download.htm這個頁面,您可以選擇一個Mirror站台來下載,筆者是選擇USA的站點來下載,進 入畫面之後,選擇一個您想要使用的版本,筆者在撰寫此編文件時,最新的版本已經出到了2.1.5,它的更新速度非常的快速,每隔一、二星期就會有新的版本 出現,不過沒有關係,shorewall在更新的同時,也可以直接進行版本的更新,在稍後筆者會進行介紹。
在點選進入2.1.5(2004/8/19)版之後,應該會看見兩種版本,一種是RPM形式的套件,另一個則是tarball形式的原始碼,選擇一個您要使用的版本下載即可,接下來進行到安裝的步驟。
2、tarball安裝過程
將shorewall-2.1.5.gz上傳到主機上,並且使用下列的指令進行安裝即可:
# tar zxvf shorewall-2.1.5.gz
# cd shorewall-2.1.5
# ./install.sh
3、RPM安裝過程
將shorewall-2.1.5-1.noarch.rpm上傳到主機上,並且使用下列的指令進行安裝即可:
# rpm -ivh shorewall-2.1.5-1.noarch.rpm
4、反安裝過程
Tarball:
請在原來的安裝目錄中輸入以下的指令:
# ./uninstall.sh
這個指令會將shorewall的所有設定檔給移除掉。
RPM:
# rpm -e shorewall
5、升級方式
Tarball:
# tar zxvf 最新版本編號.gz
# cd 最新版本編號
# ./install.sh
# shorewall check
# shorewall restart
RPM:
# rpm -Uvh --nodeps 最新版本編號.rpm
#shorewall check
#shorewall restart
以上兩個方式就是升級shorewall的方法。
編輯設定檔
安裝完畢後,必需先要設定各個設定檔才能啟動shorewall,在這邊請要特別注意,shorewall不是一個daemon的程式,它是一個載入指令的套件,所以請別指望使用ps -ax這類的指令來查詢它的行程,接下來的部份就分別說明各個設定檔的功能及格式。
1、/etc/shorewall/shorewall.conf
shorewall.conf這個設定檔是整個軟體配置中最重要的一個檔案,裡面有許多的設定,若是搞錯的話,很可能會造成shorewall的啟動失敗或是咦鞑徽?#?P者在此就介紹幾個較常更改的設定參數給讀者參考:
STARTUP_ENABLED=Yes
預設是為No,如果您決定要使用shorewall來管理您的防火牆的話,那麼強烈的建議您將這個選項設定為Yes。
LOGFILE=/var/log/messages
設定記錄檔的位置,預設的記錄檔是messages這個檔案,您也可以指定另外的檔案,以區分防火牆及一般訊息,便於除錯時較能快速掌握狀況。
LOGNEWNOTSYN=info
設定記錄檔的等級,一般來說shorewall的記錄是由syslog這隻程式來進行,一共有八級,而shorewall預設的記錄等級為info,您可以參考/etc/syslog.conf來瞭解其他等級的記錄內容為何。
CONFIG_PATH=/etc/shorewall:/usr/share/shorewall
設定shorewall的所有配置檔所存放的目錄位置為何,如果您的設定檔不是放在這個位置的話,請自行修改至正確的路徑。
FW=fw
預設的防火牆介面名稱,在shorewall中,會內定一個防火牆的Zone名稱,這個名稱不需要在/etc/shorewall/zones中定義,直接可以在各個設定檔中使用。
IP_FORWARDING=On
預設是打開的,這個選項代表是開啟IP Forward的功能,如果您的Linux主機是獨立型的主機,並不需要使用到NAT或者是DNAT等功能的話,那麼這個選項就可以把它給關閉。
完成設定後就可以存檔離開了。
接 著下來筆者就以一個最簡單的網路架構來做為設定的例子,以一台Linux主機為主要單位,有兩張乙太網路卡,eth0是對外部的網路卡,而eth1則是對 內的網路卡,內部區域網路透過NAT連結到外部網路,而這台Linux主機同時具備有簡易防火牆的功能,針對下面的各個設定檔案做說明。
2、/etc/shorewall/zones
在zones這個檔案中,您可以定義您的網路區域代碼,限制在5個或5個字元之下,總共有三個欄位,分別說明如下:
ZONE:定義的名稱,限制在5個或5個字元以下。
DISPLAY:這個介面所顯示的名稱,通常和ZONE設定是一樣的。
COMMENTS:對這個介面的簡略說明。
那麼在這個例子中,筆者就定義了二個介面,在zones的設定內容如下所示:
#ZONE DISPLAY COMMENTS
loc Local Localhost
net Net Internet
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
其中loc就是對內的網路介面,而net就是對外部網路的網路介面。
3、/etc/shorewall/interfaces
接下來就要建立網路介面及ZONE的對照表了,前面說過eth0是對網際網路的介面,而eth1是對內部區域網路的介面,那麼設定的內容如下所示:
#ZONE INTERFACE BROADCAST OPTIONS
net eth0 xxx.xxx.xxx.128
loc eth1 192.168.1.255 dhcp
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
其 中第一個欄位就是對應到/etc/shorewall/zones的ZONE名稱,而第二個欄位就是對應到在Linux系統中的介面名稱,在這個例子中, eth0是對外部網路的介面,所以對應到net,而eth1是對內部區域網路的介面,所以對應到loc,第三個欄位是設定該網路介面的 BROADCAST,如果是C class的話,就是設定成x.x.x.255,以此類推,筆者不再此詳述,對外的介面, ISP公司都會提供一個設定的 清單,只要照著上面的記錄填寫即可,而最後一個OPTIPNS的欄位就是這個介面要用什麼樣的功能,比方說在這個例子中,eth1介面還要負責DHCP配 發的動作,所以就在OPTIONS的欄位上加入dhcp的記錄,其他的功能請參照interfaces的註解,在此不做太多的說明。
4、/etc/shorewall/policy
這個檔案是設定整個大方向的防火牆政策,通常建議較安全的方案是先將所有由外而內的政策都設定成為拒絕,然後再一個一個的打開可用的port號,所以policy的設定內容如下:
#SOURCE DEST POLICY LOG LIMIT:BURST
loc net ACCEPT
net all DROP info
all all REJECT info
#LAST LINE -- DO NOT REMOVE
其中第一行是允許由內部區域網路連到外部網路,第二行是將所有外部來的封包都丟棄,並記錄到記錄檔中,第三行的功能也是一樣。
5、/etc/shorewall/masq
這個檔案是設定讓內部的虛擬IP可以偽造真實的IP連線出去,也就是NAT的功能,設定內容如下:
#INTERFACE SUBNET ADDRESS
eth0 eth1 xxx.xxx.xxx.xxx
#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE
其中INTERFACE是對外的網路卡,而SUBNET則是對內部虛擬網路的網路卡,最後的欄位ADDRESS則是對外網卡的真實IP,輸入完後就存檔離開。
最後再重新啟動shorewall的防火牆,請依照下列指令重新啟動
# shorewall check
# shorewall restart
# chkconfig --level 2345 shorewall on
完成!
結論
怎 麼樣,很簡單吧!雖然這樣子就完成了最基本的防火牆建置,所有由外部對內部的服務全部都被關閉,只讓內部的虛擬IP以NAT的方式連線到外部網路,這樣子 就算是成功的建立一座防火牆了,可是對於大部份的企業來說,這樣的設定還是不夠的,所以筆者在下一期的電子報中還會為各位讀者介紹更進階的使用,讓各位讀 者能夠輕易的就架設起自已的防火牆。
進階元件
上一篇電子報的內容中,筆者只介紹了幾個一定用到的檔案來做說明,其實shorewall還有很多其他的設定檔,在此就再做一次說明,根據不同的需求,還有下面幾個常用的設定檔案:
1、params
這 是用來設定shell變數的一個檔案,這個檔案有點像是C語言中的include功能一樣,把include進來的檔案的變數放到現在這個檔案中,只是在 shorewall的設定檔中,並不需要再使用include來引入,params這個檔案的目的在於將所有相關的變數都統一設定在裡面,當您的規則全都 設定好了之後,只要變更params的內容就可以套用在別的網路狀態,管理起來非常的方便,以下就是一個例子:
在/etc/shorewall/params中的設定:
NET_IF=eth0 NET_BCAST=130.252.100.255
NET_OPTIONS=blacklist,norfc1918
在/etc/shorewall/interfaces中的設定:
net $NET_IF $NET_BCAST $NET_OPTIONS
這樣子的話,其他的規則就都可以使用變數的方式來寫,所以說規則只要寫一次,就可以重覆的使用囉!
2、rules
這 個檔案是整個shorewall的重點檔案,有看過前一篇電子報的讀者應該還記得一個叫做policy的檔案吧?policy檔案的目的在於制定整個防火 牆政策的大方向,比方說loc這個介面對dmz這個介面的政策是REJECT或是ACCEPT等,通常由防火牆外至內部網路的政策都是全部先設定為關閉 的,當然也有全設定為開放再一個個關起來的,不過安全的防火牆政策應該是屬於前者,而rules這個檔案則是在制定一些【例外】的狀況,比方說,您的防火 牆將所有的port都給關閉了,以至於從外不能由ssh連結進來,那麼這個時候就可以在rules這個檔案中來定義,它的格式如下所示:
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL
# PORT PORT(S) DEST
DNAT fw loc:192.168.1.3 tcp ssh,http
以上的設定是指轉送所有fw防火牆介面的ssh及http的請求至loc的介面,而IP為192.168.1.3的機器上。
在這個檔案中有幾個較常用到的欄位,分別說明如下,其他較少用的欄位在此筆者就不多加說明了:
  
欄位名稱 設定項目 說明
ACTION ACCEPT 允許這個連線的要求。
ACCEPT+ 和ACCETP一樣,但是會排除之後有關REDIRECT-及DNAT- 的規則。
DROP 忽略這個連線的請求。
REJECT 不接受這連線的請求,並回覆一個icmp-unreachable或是RST的封包給對方。
DNAT 轉送這個封包至另一個系統(或是其他的port號)。
DNAT- 只有進階的使用才會用到,這和DNAT的規則一樣,但是只產生DNAT的iptables的規則而且也不是ACCEPT成對的規則。
REDIRECT 重導這個連線的請求到local的另一個埠號中。
REDIRECT- 只有進階的使用才會用到,這和REDIRECT的規則一樣,但是只產生REDIRECT的iptables的規則而且也不是ACCEPT成對的規則。
CONTINUE 專家模式專用,對於這裡所定義的來源及目的端的請求就會被pass通過。
LOG 簡單的記錄封包資訊
QUEUE 將這個封包佇放在使用者的應用程式中。
; 定義在/etc/shorewall/actions或是/usr/share/shorewall/actions.std中的動作。
SOURCE   來源位址,格式可設定以下幾種樣式:loc、net(在zones檔案中所定義的介面)192.168.1.1(IP格式)192.168.1.0/24 (子網路格式)loc:192.168.1.1loc:192.168.1.0/24loc:192.168.1.1,192.168.1.2loc:  ~00-A0-C9-15-39-78(MAC Address)
DEST   目的位址,設定的方式和SOURCE一樣,但是如果SOURCE設定為all時,則有以下的限制:並不允許使用MAC Address在DNAT的規則中只允許使用IP Address不可同時使用interface及IP
PROTO   必需是tcp、udp、icmp或是all,或者是數字。
DEST PORT(S)   目的端的埠號,可用數字或名稱,在設定這個欄位時,可以用逗號(,)來建立多個埠號清單,也可以用一整個範圍的埠號(1024:2048->;意思是從1024到2048之中所有的埠號)來建立清單。
CLIENT PORT(S)   客戶端的埠號,這個欄位可以忽略掉。
3、nat
這 個檔案主要是用來定義one-to-one型式的NAT,所謂的"one-to-one"是代表說一個真實IP將所有的服務都轉向內部的一個虛擬IP,所 以通常是一個真實的IP就【只能】指向一個虛擬的IP,這通常是用在當這台NAT主機是只有跑防火牆服務,然後所有提供外部服務的主機都是藏在內部虛擬 IP的狀況下,在一般的情況下比較少用到這個檔案,如果想要使用forward或是DNAT的功能的話,就不能使用這個檔案來設定,必需去設定rules 這個檔案才行,有關於nat的設定內容如下所示:
#EXTERNAL INTERFACE INTERNAL ALL LOCAL
# INTERFACES
x.x.x.x eth0 192.168.1.23 
  
EXTERNAL 設定此台伺服器所要對外的【真實IP】。
INTERFACE 設定此台伺服器的對外網路網卡介面名稱。
INTERNAL 設定想將此真實IP轉向內部的虛擬IP位址。
ALL INTERFACES 如果不想同時套用到其他的網路介面時,請在此設定為no,如果為空白的話,就只會套用到這個介面。
LOCAL 如果這個選項設定為Yes或yes,還有ALL INTERFACES也被設定為Yes或yes的話,那麼由EXTERNAL傳送至INTERNAL的封 包就會被限制在內部,要開啟這個功能的話,核心版本必需要在2.4.19以上,並且要確認開啟CONFIG_IP_NF_NAT_LOCAL的功能,而且 iptables的版本要在1.2.6a以上才行�
 
阅读(1019) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~