基於Linux的路由器和防火牆配置
作者:何立強
隨著Internet應用的日益普及,免費網路作業系統Linux受到越來越多的網路愛好者的關注。通過簡單的安裝,人們就可以獲得Linux提供的多項網路服務,諸如網域名稱服務 (DNS)、電子郵件、匿名FTP服務等。同時,它還提供了圖形工作站所具有的Xwindows系統。可以說,Linux已經具備了網路伺服器的所有功能。在此,筆者想結合自己的工作經驗,談談Linux在另一方面的用途,即將Linux作為路由器串連兩個不同的網段,並在其上配置防火牆,以實現網路的存取存取控制和流量統計的功能。
要想使一台裝有Linux的PC具有路由器的功能,首先要進行硬體設定。名為Router的PC上裝有Linux系統,並配有兩塊網卡,每塊網卡串連一個不同的網段,該機作為路由器在兩個網段間轉寄IP資料包。為了防止兩塊網卡的中斷髮生衝突,需要網路卡驅動程式將中斷分別設為不同值。筆者在實踐時將其中斷號和I/O地址分別設定為:3,0x300H 和4,0x320H。
硬體設定完畢,還需要在軟體上做相應的配置。在通常的安裝模式下,Linux系統不具備路由器的功能,因此,必須重新安裝Linux核心。以Slackware版的Linux為例,其重新設定核心的過程為:
1. #cd/usr/src/linux
/*進入Linux的原始碼目標*/
2. #make config
/*進行編譯選項的配置*/
在該步中,系統會提供編譯過程中的一些選項,供使用者根據自己的實際情況進行選擇。對於無法確定的選項,使用者可選擇系統預設值。在網路部分編譯的詢問中,會出現如下的提示:
network firewall[y/n/N]?
/*核心是否支援防火牆*/
……
TCP/IP networking[n/y/Y]?
/*主機是否串連TCP/IP網路*/
IP: forwarding/gatewaying [n/y/Y]?
/*主機是否轉寄資料庫或作為網關*/
……
IP:firewalling[y/n/N]?
/*是否在TCP/IP網路內設定防火牆*/
IP:firewall packet logging[y/n/N]?
/*是否在防火牆上登記資料包*/
……
IP:accounting[y/n/N]?
/*是否對資料包計帳*/
IP:optimize as router not host[y/n/N]?
/*是否將主機設定為路由器*/
……
IP:multicats routig [y/n/N]?
/*路由器是否向外廣播路由資訊*/
因為我們要將此主機配置為路由器,並在其上設定防火牆,故對這些選項統一選"y"。
3.#make dep
/*根據編譯選項做編譯前的準備工作*/
4.#make zlmage
/*開始編譯核心並命名編譯後的核心檔案名稱為zlmage*/
編譯後的核心存於"/usr/src/linux/arch/i386/boot"目錄。在系統原核心備份後, 使用者可將該檔案拷貝到根目錄下,並改名為"vmlinuz",運行"lilo",使其在下次啟動時生效。
重構核心後,需對兩塊網卡的TCP/IP部分進行設定,使其能有效地串連兩個不同的網段,並能在兩個網段進行IP資料包的轉寄。設定步驟為:
1.對於NE2000相容的網卡,修改"/etc/rc.d/rc.modules"檔案;
/sbin/modprobe ne io=0x300,0x320
/*識別兩塊網卡*/
2.修改"/etc/rc.d/rc.inetl"檔案,設定兩網卡的IP地址、掩碼及到兩網卡的路由
資訊;
IPADDR="202.207.0.27"
NETWORK="202.207.0.0"
BROADCAST="202.207.0.255"
IPADDR1="202.207.7.2"
NETWORK1="202.207.7.0"
BROADCAST1="202.207.7.255"
NETMASK="255.255.255.0"
/sbin/ifconfig eth0 ${IPADDR} broadcast${BROADCAST} netmask${NETMASK}
/sbin/ifconfig eth1 ${IPADDR1} broadcast${BROADCAST1} netmask${NETMASK}
/sbin/route add-net ${NETWORK} netmask${NETMASK} eth0
/sbin/route add-net ${NETWORK1} netmask ${NETMASK} eth1
3.修改"/etc/rc.d/rc.inet2"檔案,開啟關於"Routed Server"的注釋,使其可以與其它路由器交換路由資訊,並轉寄IP資料包。
## Start the Routed server
if[-f ${NET}/routed];then
echo -n"routed"
${NET}/routed -g -s
/*啟動程式*/
fi
4.在"/etc/lilo.conf"檔案中增加一行,使其在啟動時識別第二塊網卡。
append="ether=0,0x320,ethl"
完成上面的設定後,應重新啟動電腦,系統會識別到兩塊網卡,並按照"/etc/rc.d/ rc.intel"檔案中的說明對網卡的IP地址、掩碼進行設定。啟動完成後,以超級使用者root的身份進入系統,鍵入下面的命令即可看到關於網卡和路由的資訊。
#ifconfig /*顯示網卡的詳細資料*/
#route
/*顯示系統的路由表*/
筆者曾將學生機房區域網路內的PC通過Linux路由器與校園網相接,並進一步通過校園網進入Internet。此外,筆者又在Linux路由器上配置了防火牆。實踐證明,防火牆有效地控制住了學生對非法IP地址的訪問,並成功地記錄下每個IP地址的網路流量,為計費和網 管提供了依據。Linux的防火牆配置可以通過簡單的命令逐條進行,也可編寫shell程式放 到系統的啟動目錄下自動執行。其命令格式非常簡單,現舉例如下:
#ipfwadm -A
/*對通過路由器的所有資料包進行計帳*/
#ipfwadm -I -a accept -S 162.105.0.0/16
/*接受來自162.105.0.0網路的所有資料包*/
#ipfwadm -I -a deny -S 159.226.0.0/16
/*丟掉來自159.226.0.0網路的所有資料包/
#ipfwadm -O -a reject -S 210.32.0.0/12
/*丟掉發往210.32.0.0網路的所有資料包,並發送拒絕資訊包給要求者*/
讀者可根據實際需要進行防火牆的配置,以達到期望的效果。