■ 河南 劉京義
提到服務(wù)器架構(gòu),我們必須注意的問(wèn)題是,服務(wù)器一定要做到“獨(dú)立自主”。也就是說(shuō),不要將各種服務(wù)組件一股腦地安裝到一臺(tái)服務(wù)器上,而一定要將不同的服務(wù)組件安裝到不同的主機(jī)上,即提供Web服務(wù)的服務(wù)組件安裝到一臺(tái)服務(wù)器上,提供FTP服務(wù)的組件安裝到另外一臺(tái)服務(wù)器上等。
這樣,每臺(tái)服務(wù)器只提供一種服務(wù),不僅可以有效節(jié)省服務(wù)器資源,而且一旦某個(gè)服務(wù)組件(例如提供Web服務(wù)的Apache)出現(xiàn)了漏洞,黑客也只能攻擊該Web服務(wù)器,而無(wú)法直接攻擊其它服務(wù)器(例如提供數(shù)據(jù)服務(wù)的MySQL數(shù)據(jù)庫(kù)服務(wù)器等)。
所以,讓服務(wù)器獨(dú)立自主的優(yōu)點(diǎn)就體現(xiàn)出來(lái)了,當(dāng)遇到黑客攻擊時(shí),可以將危害和損失降低到最小。
當(dāng)然,僅僅將服務(wù)器分開(kāi)架設(shè)還是不夠的,因?yàn)槊颗_(tái)服務(wù)器除了運(yùn)行各自的服務(wù)組件外,Linux系統(tǒng)自身還默認(rèn)開(kāi)放了必要的服務(wù),對(duì)應(yīng)的也就開(kāi)啟了與之關(guān)聯(lián)的網(wǎng)絡(luò)端口。
為了能讓Linux正常運(yùn)行,我們不能簡(jiǎn)單的將這些服務(wù)和端口全部關(guān)閉。因此,想讓服務(wù)器更加安全地運(yùn)行,就必須留用有用的端口,而將其它無(wú)關(guān)的端口徹底屏蔽掉。
這就需要設(shè)計(jì)一個(gè)過(guò)濾器,將沒(méi)用的端口全部屏蔽。例如,對(duì)一個(gè)典型的網(wǎng)絡(luò)來(lái)說(shuō)可以在網(wǎng)關(guān)主機(jī)上設(shè)置兩塊網(wǎng)卡,其中的eth0網(wǎng)卡用于連接Internet,eth1網(wǎng)卡用來(lái)連接內(nèi)網(wǎng)各服務(wù)器。在網(wǎng)絡(luò)拓?fù)鋱D中可以看到,提供各種網(wǎng)絡(luò)服務(wù)的服務(wù)器全部使用內(nèi)網(wǎng)地址,其目的是不將其暴露在Internet上,而將需要的服務(wù)所對(duì)應(yīng)的端口通過(guò)NAT映射出去,這樣就可以把所需的網(wǎng)絡(luò)服務(wù)提供給外網(wǎng)用戶使用,如圖1所示。
接下來(lái)就簡(jiǎn)單講解一下這種安全性較高的服務(wù)器架設(shè)方法,為了簡(jiǎn)單起見(jiàn),在這里就以Web服務(wù)器為例進(jìn)行說(shuō)明。
圖1 架設(shè)服務(wù)器組的示例網(wǎng)絡(luò)拓?fù)鋱D
因?yàn)椴煌木W(wǎng)絡(luò)服務(wù)器雖然使用的端口各異,但是映射的方法卻大體相同。您可以根據(jù)不同的網(wǎng)絡(luò)服務(wù),修改對(duì)應(yīng)到的端口就行了。
這里使用的系統(tǒng)為Red Hat Enterprise Linux 4,虛擬機(jī)為Vmware。
在Linux中安裝虛擬機(jī)的操作比較簡(jiǎn)單,一般來(lái)說(shuō),Linux版的Vmware提供了兩個(gè)安裝文件,一個(gè)Tar壓縮包格式,一個(gè)為RPM包格式??梢愿鶕?jù)需要選擇,如果想快速安裝,可以打開(kāi)終端,執(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”代表具體的版本號(hào))。當(dāng)然,也可以在命令行中執(zhí)行“tar -zxvf VMwareTools-x.x.x-xxxxx.tar.gz -c/tmp”命令,對(duì)其解壓縮到“/tmp”路徑中。接著執(zhí)行“cd/tmp/vmwaretools-distrib”和“./vmware-install.pl”命令,執(zhí)行VMware的安裝腳本,這個(gè)腳本是用Perl編寫的,安裝完成后,需要對(duì)其進(jìn)行配置,先進(jìn)入“/usr/bin”目錄,執(zhí)行“l(fā)s/usr/bin/*.pl”命令查找“vmware-configtools.pl”文件,找到后執(zhí)行“./vmware-config-tools.pl”運(yùn)行該腳本,之后按照提示進(jìn)行配置。
當(dāng)然,如果在KDE桌面環(huán)境下安裝和配置Vmware,那么操作起來(lái)就更加簡(jiǎn)單。
執(zhí)行“service vmware start”和“service vmware stop”命令,可以啟動(dòng)或關(guān)閉Vmware服務(wù)。之后在Vmware配置環(huán)境中添加兩塊虛擬網(wǎng)卡,具體操作這里不再贅述。
注意,在添加虛擬網(wǎng)卡前,必須停止Wmware服務(wù)。
如前所述,我們?cè)谔摂M機(jī)中虛擬出兩塊網(wǎng)卡,分別是eth0和eth1。虛擬完成后重新啟動(dòng)系統(tǒng)。因?yàn)樘摂M了兩塊網(wǎng)卡,分別連接兩個(gè)不同的網(wǎng)段,需要對(duì)其分別進(jìn)行配置,執(zhí)行如圖2所示的指令。
圖2 配置虛擬機(jī)兩塊網(wǎng)卡的不同網(wǎng)段
可以看到,兩個(gè)虛擬網(wǎng)卡配置文件分別為“ifcfgeth0”和“ifcfg-eth1”。我們先編輯“ifcfg-eth0”,使其地址為“192.168.62.2”,具體命令為:
之后再執(zhí)行“[root@router~]# vi ifcfg-eth1”命令,對(duì)“ifcfg-eth1”文件進(jìn)行編輯,將其地址設(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)容
因?yàn)槲覀円峁┞酚赊D(zhuǎn)發(fā)功能,所以需要在命令行中執(zhí)行“# vi/etc/sysctl.conf”命令,使用VI編輯器將該文件中的“net.ipv4.ip_forward=0”修改為“net.ipv4.ip_forward=1”,這樣在每次開(kāi)機(jī)后即可自動(dòng)轉(zhuǎn)發(fā)。
完成關(guān)于網(wǎng)關(guān)的設(shè)置后,接下來(lái)配置Web服務(wù)器。
和上面談到的設(shè)置網(wǎng)關(guān)IP一樣,同樣需要設(shè)置好內(nèi)網(wǎng)Web服務(wù)器的IP,具體方法基本相同。在命令行中來(lái)查看其配置信息。
之后執(zhí)行“# more/etc/resolv.conf”命令,將該文件中的“nameserver”的值設(shè)置為“192.168.0.1”,使其指向網(wǎng)關(guān)地址。之后執(zhí)行“[root@router~]# cd/var/www/html/”命令,進(jìn)入該路徑中,在其下創(chuàng)建一個(gè)HTML文件,內(nèi)容可以隨意,主要用來(lái)測(cè)試Web服務(wù)是否可用。執(zhí)行“#service httpd start”命令,開(kāi)啟Apache服務(wù)。在其它主機(jī)上打開(kāi)瀏覽器,訪問(wèn)“http://192.168.62.2”,對(duì)該網(wǎng)頁(yè)進(jìn)行訪問(wèn),但是卻沒(méi)有成功。原因在于還沒(méi)有將內(nèi)網(wǎng)Web服務(wù)器的80端口映射出去,接下來(lái)需要在網(wǎng)關(guān)主機(jī)上設(shè)置NAT映射。
在Linux中,使用iptables語(yǔ)句,就可以設(shè)置所需的NAT映射,其功能是讓外界用戶可以訪問(wèn)我們的內(nèi)網(wǎng)Web服務(wù)器。iptables的語(yǔ)法比較復(fù)雜,這里不能逐一解釋。
因?yàn)閕ptables語(yǔ)句的特點(diǎn)是逐條以此執(zhí)行,為了提高效率,在這里筆者設(shè)計(jì)了一個(gè)名為“webviste.sh”的腳本,來(lái)提高執(zhí)行效率,執(zhí)行“# vi webviste.sh”,其內(nèi)容如下:
該腳本首先定義了“router”和“www”兩個(gè)變量,分別表示網(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)的主機(jī)訪問(wèn)內(nèi)網(wǎng)Web服務(wù)器的80端口。
這樣,外網(wǎng)用戶就可以自由的訪問(wèn)內(nèi)網(wǎng)的Web服務(wù)器了。這里我們僅僅提供80端口接受外部連接請(qǐng)求,而內(nèi)網(wǎng)Web服務(wù)器的其它端口是禁止外網(wǎng)用戶訪問(wèn)的,因?yàn)槠涓緵](méi)有通過(guò)網(wǎng)關(guān)主機(jī)映射出去。
這樣就可以有效提高內(nèi)網(wǎng)Web服務(wù)器的安全性。
執(zhí)行“# chmod +x webviste.sh”命令,將該腳本設(shè)置為可執(zhí)行狀態(tài)。執(zhí)行“# ./test.sh”命令,來(lái)執(zhí)行該腳本。
這樣,針對(duì)內(nèi)網(wǎng)Web主機(jī)的80端口映射操作就完成了,之后在其它主機(jī)上打開(kāi)瀏覽器,訪問(wèn)網(wǎng)址“http://192.168.62.2”,就可以看到我們之前預(yù)設(shè)的測(cè)試網(wǎng)頁(yè)了。
當(dāng)然,如果內(nèi)網(wǎng)其它主機(jī)還提供了FTP,郵件收發(fā)等服務(wù),也可以按照同樣的方法進(jìn)行端口映射,來(lái)安全有效的提供各種網(wǎng)絡(luò)服務(wù)。