隨著Internet應用的日益普及,免費網絡操作系統Linux受到越來越多的網絡愛好者 的關注。通過簡單的安裝,人們就可以獲得Linux提供的多項網絡服務,諸如域名服務、電 子郵件、匿名FTP服務等。同時,它還提供了圖形工作站所具有的Xwindows系統??梢哉f ,Linux已經具備了網絡服務器的所有功能。在此,筆者想結合自己的工作經驗,談談Linu x在另一方面的用途,即將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:aclearcase/" target="_blank" >ccounting[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網絡的所有數據包,并發送拒絕信息包給請求者*/
讀者可根據實際需要進行防火墻的配置,以達到期望的效果。