■ 河南 劉京義
提到服務(wù)器架構(gòu),我們必須注意的問題是,服務(wù)器一定要做到“獨立自主”。也就是說,不要將各種服務(wù)組件一股腦地安裝到一臺服務(wù)器上,而一定要將不同的服務(wù)組件安裝到不同的主機上,即提供Web服務(wù)的服務(wù)組件安裝到一臺服務(wù)器上,提供FTP服務(wù)的組件安裝到另外一臺服務(wù)器上等。
這樣,每臺服務(wù)器只提供一種服務(wù),不僅可以有效節(jié)省服務(wù)器資源,而且一旦某個服務(wù)組件(例如提供Web服務(wù)的Apache)出現(xiàn)了漏洞,黑客也只能攻擊該Web服務(wù)器,而無法直接攻擊其它服務(wù)器(例如提供數(shù)據(jù)服務(wù)的MySQL數(shù)據(jù)庫服務(wù)器等)。
所以,讓服務(wù)器獨立自主的優(yōu)點就體現(xiàn)出來了,當(dāng)遇到黑客攻擊時,可以將危害和損失降低到最小。
當(dāng)然,僅僅將服務(wù)器分開架設(shè)還是不夠的,因為每臺服務(wù)器除了運行各自的服務(wù)組件外,Linux系統(tǒng)自身還默認(rèn)開放了必要的服務(wù),對應(yīng)的也就開啟了與之關(guān)聯(lián)的網(wǎng)絡(luò)端口。
為了能讓Linux正常運行,我們不能簡單的將這些服務(wù)和端口全部關(guān)閉。因此,想讓服務(wù)器更加安全地運行,就必須留用有用的端口,而將其它無關(guān)的端口徹底屏蔽掉。
這就需要設(shè)計一個過濾器,將沒用的端口全部屏蔽。例如,對一個典型的網(wǎng)絡(luò)來說可以在網(wǎng)關(guān)主機上設(shè)置兩塊網(wǎng)卡,其中的eth0網(wǎng)卡用于連接Internet,eth1網(wǎng)卡用來連接內(nèi)網(wǎng)各服務(wù)器。在網(wǎng)絡(luò)拓?fù)鋱D中可以看到,提供各種網(wǎng)絡(luò)服務(wù)的服務(wù)器全部使用內(nèi)網(wǎng)地址,其目的是不將其暴露在Internet上,而將需要的服務(wù)所對應(yīng)的端口通過NAT映射出去,這樣就可以把所需的網(wǎng)絡(luò)服務(wù)提供給外網(wǎng)用戶使用,如圖1所示。
接下來就簡單講解一下這種安全性較高的服務(wù)器架設(shè)方法,為了簡單起見,在這里就以Web服務(wù)器為例進行說明。

圖1 架設(shè)服務(wù)器組的示例網(wǎng)絡(luò)拓?fù)鋱D
因為不同的網(wǎng)絡(luò)服務(wù)器雖然使用的端口各異,但是映射的方法卻大體相同。您可以根據(jù)不同的網(wǎng)絡(luò)服務(wù),修改對應(yīng)到的端口就行了。
這里使用的系統(tǒng)為Red Hat Enterprise Linux 4,虛擬機為Vmware。
在Linux中安裝虛擬機的操作比較簡單,一般來說,Linux版的Vmware提供了兩個安裝文件,一個Tar壓縮包格式,一個為RPM包格式。可以根據(jù)需要選擇,如果想快速安裝,可以打開終端,執(zhí)行“su-”命令切換到Root賬戶環(huán)境。注意這里使用了“su-”命令而不是“su”命令,其本質(zhì)是“su”命令只是切換了root身份,但Shell環(huán)境仍然是普通用戶身份,而“su -”連用戶和Shell環(huán)境一起切換成root身份。
之后執(zhí)行 “rpm -ivh VMwareZTools-x.x.xxxxxx.i386.rpm”命令,就可以執(zhí)行安裝操作了(“x.x.x-xxxxx”代表具體的版本號)。當(dāng)然,也可以在命令行中執(zhí)行“tar -zxvf VMwareTools-x.x.x-xxxxx.tar.gz -c/tmp”命令,對其解壓縮到“/tmp”路徑中。接著執(zhí)行“cd/tmp/vmwaretools-distrib”和“./vmware-install.pl”命令,執(zhí)行VMware的安裝腳本,這個腳本是用Perl編寫的,安裝完成后,需要對其進行配置,先進入“/usr/bin”目錄,執(zhí)行“l(fā)s/usr/bin/*.pl”命令查找“vmware-configtools.pl”文件,找到后執(zhí)行“./vmware-config-tools.pl”運行該腳本,之后按照提示進行配置。
當(dāng)然,如果在KDE桌面環(huán)境下安裝和配置Vmware,那么操作起來就更加簡單。
執(zhí)行“service vmware start”和“service vmware stop”命令,可以啟動或關(guān)閉Vmware服務(wù)。之后在Vmware配置環(huán)境中添加兩塊虛擬網(wǎng)卡,具體操作這里不再贅述。
注意,在添加虛擬網(wǎng)卡前,必須停止Wmware服務(wù)。
如前所述,我們在虛擬機中虛擬出兩塊網(wǎng)卡,分別是eth0和eth1。虛擬完成后重新啟動系統(tǒng)。因為虛擬了兩塊網(wǎng)卡,分別連接兩個不同的網(wǎng)段,需要對其分別進行配置,執(zhí)行如圖2所示的指令。

圖2 配置虛擬機兩塊網(wǎng)卡的不同網(wǎng)段
可以看到,兩個虛擬網(wǎng)卡配置文件分別為“ifcfgeth0”和“ifcfg-eth1”。我們先編輯“ifcfg-eth0”,使其地址為“192.168.62.2”,具體命令為:


之后再執(zhí)行“[root@router~]# vi ifcfg-eth1”命令,對“ifcfg-eth1”文件進行編輯,將其地址設(shè)置為“192.168.0.1”,具體方法與上述完全一樣。之后執(zhí)行“[root@router~]# service network restart”命令,重啟網(wǎng)絡(luò)服務(wù),使上述配置信息生效。
配置好虛擬網(wǎng)卡后,執(zhí)行“ifconfig”命令,結(jié)果如下:





執(zhí)行“route”命令查看路由表,內(nèi)容如圖4所示。

圖3 查看路由表內(nèi)容
因為我們要提供路由轉(zhuǎn)發(fā)功能,所以需要在命令行中執(zhí)行“# vi/etc/sysctl.conf”命令,使用VI編輯器將該文件中的“net.ipv4.ip_forward=0”修改為“net.ipv4.ip_forward=1”,這樣在每次開機后即可自動轉(zhuǎn)發(fā)。
完成關(guān)于網(wǎng)關(guān)的設(shè)置后,接下來配置Web服務(wù)器。
和上面談到的設(shè)置網(wǎng)關(guān)IP一樣,同樣需要設(shè)置好內(nèi)網(wǎng)Web服務(wù)器的IP,具體方法基本相同。在命令行中來查看其配置信息。


之后執(zhí)行“# more/etc/resolv.conf”命令,將該文件中的“nameserver”的值設(shè)置為“192.168.0.1”,使其指向網(wǎng)關(guān)地址。之后執(zhí)行“[root@router~]# cd/var/www/html/”命令,進入該路徑中,在其下創(chuàng)建一個HTML文件,內(nèi)容可以隨意,主要用來測試Web服務(wù)是否可用。執(zhí)行“#service httpd start”命令,開啟Apache服務(wù)。在其它主機上打開瀏覽器,訪問“http://192.168.62.2”,對該網(wǎng)頁進行訪問,但是卻沒有成功。原因在于還沒有將內(nèi)網(wǎng)Web服務(wù)器的80端口映射出去,接下來需要在網(wǎng)關(guān)主機上設(shè)置NAT映射。
在Linux中,使用iptables語句,就可以設(shè)置所需的NAT映射,其功能是讓外界用戶可以訪問我們的內(nèi)網(wǎng)Web服務(wù)器。iptables的語法比較復(fù)雜,這里不能逐一解釋。
因為iptables語句的特點是逐條以此執(zhí)行,為了提高效率,在這里筆者設(shè)計了一個名為“webviste.sh”的腳本,來提高執(zhí)行效率,執(zhí)行“# vi webviste.sh”,其內(nèi)容如下:


該腳本首先定義了“router”和“www”兩個變量,分別表示網(wǎng)關(guān)地址和內(nèi)網(wǎng)Web服務(wù)器地址。這其中最重要的是最后兩條指令,其中第一條的作用是將內(nèi)網(wǎng)Web服務(wù)器地址偽裝成外網(wǎng)IP地址,讓內(nèi)網(wǎng)的Web服務(wù)器可以為外網(wǎng)用戶提供服務(wù)。第二條的作用是允許任何外網(wǎng)的主機訪問內(nèi)網(wǎng)Web服務(wù)器的80端口。
這樣,外網(wǎng)用戶就可以自由的訪問內(nèi)網(wǎng)的Web服務(wù)器了。這里我們僅僅提供80端口接受外部連接請求,而內(nèi)網(wǎng)Web服務(wù)器的其它端口是禁止外網(wǎng)用戶訪問的,因為其根本沒有通過網(wǎng)關(guān)主機映射出去。
這樣就可以有效提高內(nèi)網(wǎng)Web服務(wù)器的安全性。
執(zhí)行“# chmod +x webviste.sh”命令,將該腳本設(shè)置為可執(zhí)行狀態(tài)。執(zhí)行“# ./test.sh”命令,來執(zhí)行該腳本。
這樣,針對內(nèi)網(wǎng)Web主機的80端口映射操作就完成了,之后在其它主機上打開瀏覽器,訪問網(wǎng)址“http://192.168.62.2”,就可以看到我們之前預(yù)設(shè)的測試網(wǎng)頁了。
當(dāng)然,如果內(nèi)網(wǎng)其它主機還提供了FTP,郵件收發(fā)等服務(wù),也可以按照同樣的方法進行端口映射,來安全有效的提供各種網(wǎng)絡(luò)服務(wù)。