聯合天文學中心在夏威夷島的Manua Kea的14,000英尺高的山頂上擁有兩個天文望遠鏡,還在Hilo市有自己的辦公室及其他設施,該組織是是通過夏威夷大學連接到Internet上的,夏威夷大學在自己的B類IP地址范圍內給天文中心分配了三個子網。以前天文中心的網絡安全性是由出口路由器的ACL(訪問控制列表)連同Soloris或Linux系統的主機訪問控制(tcpwrappers)來實現的。最近天文中心的一個主要英國資助基金會在一次審核後強烈推薦安裝防火牆來增強網絡的安全性。在對幾種商業和免費的防火牆產品進行調研以後,發現它們都需要對內部網絡的三個不同子網地址都重新進行分配,分配為192.168的內部地址。內部網絡的在三個子網上共有超過200個節點,某些嵌入式微處理器系統甚至需要重新燒制EEPROM以實現IP變換,這是一個非常麻煩和龐雜的任務。因此就開始尋找透明防火牆解決方案,實現即能保持原有的地址分配,又能實現對內部網絡的防護。
Linux 2.2以上版本都支持以太網橋接方式。一個網橋的一個接口接收到數據報以後,通過檢查目的MAC地址以後被轉發到另外一個接口上,而不去檢查源或目的IP地址。一個名為AC2I的法國公司發布了一個內核補丁實現在網橋化的接口上使用ipchains進行數據報過濾。這種解決方案能實現透明的防火牆,同時保證對內部網絡提供上層的保護和訪問控制。下面我們就討論如何架設一個網橋式防火牆。
硬件配置
為了實現高效的防火牆和網絡檢測,系統CPU必須足夠的強大和快速。該系統架設在一台擁有256M內存和500MHz的賽揚CPU系統之上。測試顯示橋能滿足一個10M以太網的速度要求,而不會出現丟包現象。系統需要三塊網卡,其中兩塊網卡支持網橋的實現,另外一塊用來實現對防火牆的管理。
磁盤容量並不是很重要,但是所有的log信息應該被保存下來。若希望維護某些本地logging(用於某些配置和檢測工具),則需要確保擁有足夠的免費空間-防火牆和入侵檢測記錄往往非常龐大。
安裝Linux
下面的討論都基於Linux2.2.16(redhat7.0)版本內核,若使用2.4內核,iptables將會替代ipchains實現內核防火牆。
首先進行標准的Linux安裝,但是基本上不要選擇任何應用軟件包,甚至包括xinet/inetd,因為在該系統上不需要運行任何服務。不要安裝編譯/開發工具,因為若系統被攻破則入侵者就不那麼容易編譯任何程序。但是需要安裝Perl(某些報告工具是需要的)和OpenSSH(用於遠程管理)。確保安裝ipchains軟件包-這對於就防火牆設置是必須的。一個web浏覽器也許會很有用處。若你僅僅接收來自內部網絡的時間更新那麼安裝NTP則不會有多大壞處。你可以選擇安裝某些X11應用,tcpwrapper及某些網絡監控包(whois,finger,tcpdump,traceroute,nc等等)。創建一個非root賬號,使用該賬號登錄系統。
安裝時,僅僅配置一個主以太接口-該接口將是被保護網絡的一個節點-為其配置一個固定的網絡地址,此時應該將其連接到一個空的HUB上,在進行安全設置以後再將其連接到網絡中。當系統安裝完畢並重新啟動時,在lilo引導系統時鍵入linux single以單用戶模式引導進入系統,編輯/etc/hosts.allow來只允許管理機通過SSH來連接進入系統,然後重新啟動按照正常模式引導進入系統。然後再將主以太接口連接到內部網絡中。
創建支持網橋方式的內核
按照基本的內核編譯步驟進行,只不過需要關閉大多數的選項開關,而僅僅打開一些必須的內核編譯開關。
進入到/usr/src目錄下,拷貝內核源代碼到一個新創建的linux-fw目錄下:
# cd /usr/src;mkdir linux-fw;cp -r linux-2.2.16 ./linux-fw
# rm linux;ln -s ./linux-fw linux
對linux源代碼打linux_brfw2補丁,該補丁為ipchains添加了一個名為bridgein的缺省規則鏈。該鏈將被用來存放網橋式防火牆規則,但是該規則鏈中的規則只能使用ACCEPT或DENY目標,使用REJECT及MASQ是沒有意義的。可以從http://ac2i.tzo.com/bridge_filter/處得到該補丁。
# patch -p0
進入/usr/src/linux目錄,配置內核(這裡假設你已經有編譯內核的經驗),和網橋式防火牆相關的配置選項開關為:
CONFIG_MODVERSIONS=N
CONFIG_FIREWALL=Y
CONFIG_FILTER=Y
CONFIG_IP_FIREWALL=Y
CONFIG_IP_FIREWALL_NETLINK=Y
CONFIG_IP_ROUTE_FWMARK=Y
CONFIG_BRIDGE=Y
然後編譯內核:
# make dep;make clean;make bzImage;make install
使用新生成的內核啟動系統。
設置網橋
登錄進入防火牆系統,假設是使用eth0作為管理接口,ifconfig -a將顯示系統接口情況:
brg0 Link encap:Ethernet HWaddr FE:FD:04:E0:13:B5
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
eth0 Link encap:Ethernet HWaddr 00:90:27:B3:17:5C
inet addr:NNN.NNN.NNN.253 Bcast:NNN.NNN.NNN.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2242346 errors:0 dropped:0 overruns:0 frame:0
TX packets:3616430 errors:0 dropped:0 overruns:0 carrier:0
collisions:589902 txqueuelen:100
Interrupt:9 Base address:0xde80
eth1 Link encap:Ethernet HWaddr 00:01:02:CD:55:38
BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:65714 errors:0 dropped:0 overruns:0 frame:0
TX packets:1832954 errors:0 dropped:0 overruns:0 carrier:1
collisions:500 txqueuelen:100
Interrupt:10 Base address:0xdc00
eth2 Link encap:Ethernet HWaddr 00:01:02:C1:14:F1
BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2011596 errors:0 dropped:0 overruns:0 frame:0
TX packets:238126 errors:0 dropped:0 overruns:0 carrier:2
collisions:666 txqueuelen:100
Interrupt:11 Base address:0xd880
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:1676447 errors:0 dropped:0 overruns:0 frame:0
TX packets:1676447 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
為了使網橋工作,需要安裝brcfg應用。可以從Matthew Grant的linux路由器項目地址http://lrp.plain.co.nz/tarballs/bridgex_0.30.tar.gz得到源代碼。編譯生成二進制可執行程序,並將其拷貝到/usr/sbin/brcfg下,然後執行下面的命令來使網橋啟動運行:
# ifconfig eth1 promisc up
# ifconfig eth2 promisc up
# brcfg start
# brcfg device eth1 enable
# brcfg device eth2 enable
幾分鐘以後,當網橋學習得到了兩端網端的mac地址范圍以後,將能實現在兩塊網卡之間透明地轉發數據報。
防火牆配置
防火牆本身是由ipchains軟件包來實現的,上面的內核補丁添加了一個新的缺省規則鏈-bridgein,該鏈的規則作用於通過充當網橋的接口的數據報。由於該鏈屬於輸入鏈,每個規則必須指定接口,也就是數據報是從哪個接口進入系統的。每條鏈的缺省規則都被設置為ACCEPT,多條規則被加進bridgein鏈來實現訪問策略,最後一條規則應該是DENY來限制沒有明確指定允許的數據報。
防火牆的訪問策略被設計為適用在如下的網絡拓樸中:
該設計的突出特色是:
* 所有的公共服務器(HTTPD, FTP, SMTP, SSH)位於防火牆之外;
* 所有從Internet到內部網絡的數據流均經過防火牆;
* 從受保護的內部網到公共服務器的數據流不做限制;
* 內部受保護的網絡到Internet的數據流都被允許;
* 從公共服務器到受保護的內部網絡的數據流進行了一定的限制,只有那些實際需要的服務數據流才允許通過(輸出到內部網絡的NFS、從公共郵件服務器到內部網絡的SMTP數據、SSH);
* 從Internet發起到內部網絡的數據連接被禁止。
下面就是一個按照上面的原則生成ipchians規則的腳本:
Listing 2. Annotated Script for Bridging Firewall Setup
#!/bin/sh
#####################################################################
# firewall.sh - set up ipchains rules for a bridging firewall
#
# Copyright (c) 2000 UK/Canada/Netherlands Joint Astronomy Centre
#
# Permission to use, copy, modify, distribute,
# and sell this software and its documentation
# for any purpose is hereby granted without fee,
# provided that the above copyright notice appear
# in all copies and that both that copyright notice
# and this permission notice appear in
# supporting documentation, and that the name
# Joint Astronomy Centre not
# be used in advertising or publicity pertaining
* 從Internet發起到內部網絡的數據連接被禁止。
下面就是一個按照上面的原則生成ipchians規則的腳本:
Listing 2. Annotated Script for Bridging Firewall Setup
#!/bin/sh
#####################################################################
# firewall.sh - set up ipchains rules for a bridging firewall
#
# Copyright (c) 2000 UK/Canada/Netherlands Joint Astronomy Centre
#
# Permission to use, copy, modify, distribute,
# and sell this software and its documentation
# for any purpose is hereby granted without fee,
# provided that the above copyright notice appear
# in all copies and that both that copyright notice
# and this permission notice appear in
# supporting documentation, and that the name
# Joint Astronomy Centre not
# be used in advertising or publicity pertaining