FreeBSD handbook中文版 2 開(kāi)始安裝FreeBSD(2)
2024-07-26 00:29:07
供稿:網(wǎng)友
作者:iceblood
E-Mail: iceblood@163.com
寫(xiě)作日期:2002-03-03
FreeBSD在網(wǎng)絡(luò)服務(wù)器的領(lǐng)域里占有一席之地,不管是在高端應(yīng)用,還是小型企業(yè)里,
使用FreeBSD做服務(wù)器都是不錯(cuò)的選擇,但是如何才能建立一個(gè)安全的網(wǎng)絡(luò)呢?
首先我們來(lái)做一個(gè)這樣的假設(shè),某公司有兩臺(tái)服務(wù)器,需要建立一個(gè)以FreeBSD為平臺(tái)
的網(wǎng)關(guān),并且還能提供電子郵件、DNS、WEB等服務(wù),看起來(lái)好象這是一個(gè)很簡(jiǎn)單的事情,
然而要建立一個(gè)安全性高的卻不簡(jiǎn)單,在此我將為大家介紹如何去做,首先我憑著自己
對(duì)FreeBSD的熟練程度,做了以下設(shè)計(jì):
Internet
____|____
| |
| Gateway |
---------
|
____________|______________
___|____ ____|____
| | | |
| LAN | | WWW |
---------- ----------
以上是我為該公司設(shè)計(jì)的網(wǎng)絡(luò)結(jié)構(gòu)圖,首先我們來(lái)分析一下這個(gè)圖,由于Gateway是一個(gè)
與Internet直接連接的服務(wù)器,糟受的攻擊自然也是最多的,所以也是最危險(xiǎn)了。而且
由于該服務(wù)器擔(dān)任著公司的網(wǎng)關(guān),該服務(wù)器只要一出問(wèn)題,也將影響到全公司。為了穩(wěn)
定性、安全性,我考慮該服務(wù)器要跑的服務(wù)越少越好。服務(wù)越少,那么漏洞出現(xiàn)的可能
性也越少。而WWW服務(wù)器由于放在了Gateway里面,受Gateway的保護(hù),所以一般來(lái)說(shuō)遭受
的攻擊比較少,所以一般可以滿足足夠多的服務(wù),但是這些服務(wù)怎么樣才能讓Internet
上的人訪問(wèn)呢?這就會(huì)在下面我們?cè)敿?xì)介紹了。
首先我們來(lái)安裝Gateway,Gateway要使用的Internet的ip為x.x.x.x網(wǎng)卡為xl0,內(nèi)部IP
為192.168.0.1網(wǎng)卡為xl1,由于Gateway起到網(wǎng)關(guān)的作用,所以為了安全性,在該服務(wù)器
上做安全是非常重要的,F(xiàn)reeBSD有自帶了一個(gè)ipfirewall防火墻,既然有,我們當(dāng)然要
利用上了,首先編譯內(nèi)核:
cd /sys/i386/conf
cp GENERIC ./kernel_IPFW
用編輯器打開(kāi)kernel_IPFW這個(gè)文本文件,在該文件里加入以下內(nèi)容:
optionsIPFIREWALL //通知操作系統(tǒng)的內(nèi)核檢查每個(gè)IP數(shù)據(jù)包,將它們與規(guī)則
集進(jìn)行比較
optionsIPDIVERT //啟用由ipfw divert使用的轉(zhuǎn)向IP套接字。這一選項(xiàng)需要
與natd聯(lián)合使用。
optionsIPFIREWALL_VERBOSE //向系統(tǒng)的注冊(cè)程序發(fā)送注冊(cè)信息包。
optionsIPFIREWALL_VERBOSE_LIMIT=100 //限制一臺(tái)機(jī)器注冊(cè)的次數(shù)。
optionsIPSTEALTH //啟動(dòng)支持秘密轉(zhuǎn)發(fā)的代碼,這一選項(xiàng)在使防火墻不被
traceroute和類(lèi)似工具發(fā)現(xiàn)時(shí)很有用。
optionsACCEPT_FILTER_DATA
optionsACCEPT_FILTER_HTTP //接受過(guò)濾器中的靜態(tài)連接
optionsICMP_BANDLIM //ICMP_BANDLIM根據(jù)帶寬限制產(chǎn)生icmp錯(cuò)誤。一般情況
下我們需要這個(gè)選項(xiàng),它有助于你的系統(tǒng)免受D.O.S.攻擊。
把以上參數(shù)加入以后保存kernel_IPFW文件。
make depend
cd ../../compile/kernel_IPFW
make
make install
(注意?。。。?!請(qǐng)不要使用遠(yuǎn)程方式來(lái)設(shè)置服務(wù)器!為什么?等下你就能知道了。)
以上完成以后,你就可以重新啟動(dòng)系統(tǒng)使用新的內(nèi)核了。
使用新內(nèi)核以后,如果該系統(tǒng)本來(lái)是連在網(wǎng)絡(luò)上的,那么這時(shí)他的網(wǎng)絡(luò)部分已經(jīng)完全
喪失,這表示系統(tǒng)新的內(nèi)核已經(jīng)起作用了,防火墻也起作用了,但由于FreeBSD的防火
墻默認(rèn)情況下是不允許任何機(jī)器訪問(wèn),所以該機(jī)器的任何網(wǎng)絡(luò)功能都暫時(shí)喪失。不過(guò)不
要著急,接著往下看,你就會(huì)覺(jué)得非常有意思了。
既然該服務(wù)器擔(dān)當(dāng)是的網(wǎng)關(guān),那么讓網(wǎng)關(guān)啟動(dòng)起來(lái)是必須的。我們現(xiàn)在再:
cd /etc
用編譯器編譯rc.conf
加入如下參數(shù):
gateway_enable="YES" //啟動(dòng)網(wǎng)關(guān)
##########IP-firewall#################
firewall_enable="YES" //激活firewall防火墻
firewall_script="/etc/rc.firewall" //firewall防火墻的默認(rèn)腳本
firewall_type="/etc/ipfw.conf" //firewall自定義腳本
firewall_quiet="NO" //起用腳本時(shí),是否顯示規(guī)則信息?,F(xiàn)在為“NO”假如你的
防火墻腳本已經(jīng)定型,那么就可以把這里設(shè)置成“YES”了。
firewall_logging_enable="YES" //啟用firewall的log記錄。
##########NATD#######################
natd_interface="xl0" //NATD服務(wù)啟用在哪塊網(wǎng)卡。
natd_enable="YES" //激活NATD服務(wù)
natd_flags="-config /etc/natd.conf" //NATD服務(wù)參數(shù)設(shè)置文件。
設(shè)置完成后我們?cè)倬幾g/etc/syslog.conf文件。
加入以下行:
!ipfw
*.* /var/log/ipfw.log
好了rc.conf文件設(shè)置完畢,然后就是其他文件了。
新建/etc/ipfw.conf 文件,在文件里寫(xiě)入以下內(nèi)容:
add 00400 divert natd ip from any to any via xl0 //natd服務(wù)啟動(dòng)設(shè)置
add 00001 deny log ip from any to any ipopt rr
add 00002 deny log ip from any to any ipopt ts
add 00003 deny log ip from any to any ipopt ssrr
add 00004 deny log ip from any to any ipopt lsrr
add 00005 deny tcp from any to any in tcpflags syn,fin //這5行是過(guò)濾各種掃描包
#######tcp#########
add 10000 allow tcp from xx.xx.xx.xx to x.x.x.x 22 in //向Internet
的xx.xx.xx.xx這個(gè)IP開(kāi)放SSH服務(wù)。也就是只信任這個(gè)IP的SSH登陸。
add 10001 allow tcp from any to x.x.x.x 80 in //向整個(gè)Internet開(kāi)放HTTP服務(wù)。
add 10002 allow tcp from any to x.x.x.x 25 in //向整個(gè)Internet開(kāi)放smtp服務(wù)。
add 10003 allow tcp from any to x.x.x.x 110 in //向整個(gè)Internet開(kāi)放pop3服務(wù)。
add 19997 check-state
add 19998 allow tcp from any to any out keep-state setup
add 19999 allow tcp from any to any out //這三個(gè)組合起來(lái)是允許內(nèi)部網(wǎng)
絡(luò)訪問(wèn)出去,如果想服務(wù)器自己不和Internet進(jìn)行tcp連接出去,可以把19997和19998去
掉。(不影響Internet對(duì)服務(wù)器的訪問(wèn))
######udp##########
add 20001 allow udp from any 53 to me in recv xl0 //允許其他DNS服務(wù)器的
信息進(jìn)入該服務(wù)器,因?yàn)樽约阂M(jìn)行DNS解析嘛~
add 20002 allow udp from any to x.x.x.x 53 in recv xl0 //向整個(gè)Internet開(kāi)
放DNS服務(wù)。
add 29999 allow udp from any to any out //允許自己的UDP包往外發(fā)送。
######icmp#########
add 30000 allow icmp from any to any icmptypes 3
add 30001 allow icmp from any to any icmptypes 4
add 30002 allow icmp from any to any icmptypes 8 out
add 30003 allow icmp from any to any icmptypes 0 in
add 30004 allow icmp from any to any icmptypes 11 in //允許自己ping別人的
服務(wù)器。也允許內(nèi)部網(wǎng)絡(luò)用router命令進(jìn)行路由跟蹤。
#######lan##########
add 40000 allow all from 192.168.0.0/16 to any
add 40001 allow all from any to 192.168.0.0/16 //允許內(nèi)部網(wǎng)絡(luò)訪問(wèn)Internet。
好了,還有natd沒(méi)設(shè)置了,我們?cè)俅翁砑?etc/natd.conf這個(gè)文件,其內(nèi)容如下:
log yes //啟動(dòng)natd的log記錄。
redirect_port tcp 192.168.0.2:25 x.x.x.x:25 //把對(duì)服務(wù)器IP為x.x.x.x的smtp
訪問(wèn)轉(zhuǎn)到192.168.0.2的25上去。
redirect_port tcp 192.168.0.2:80 x.x.x.x:80 //把對(duì)服務(wù)器IP為x.x.x.x的http
訪問(wèn)轉(zhuǎn)到192.168.0.2的80上去。
redirect_port tcp 192.168.0.2:110 x.x.x.x:110 //把對(duì)服務(wù)器IP為x.x.x.x的pop3
訪問(wèn)轉(zhuǎn)到192.168.0.2的110上去。
好了,natd也設(shè)置完了~重新啟動(dòng)一下系統(tǒng)讓防火墻和natd生效,現(xiàn)在就是該裝的服務(wù)沒(méi)
裝了,雖然防火墻已經(jīng)讓這些服務(wù)通行。
我們現(xiàn)在在Gateway上安裝DNS服務(wù),我現(xiàn)在選擇的是bind 9.2.0,安裝過(guò)程不是我們的
重點(diǎn),所以這里就不詳細(xì)介紹了,我這里只對(duì)bind的安全設(shè)置做一個(gè)說(shuō)明,假設(shè)bind的
工作目錄是/etc/namedb現(xiàn)在我們對(duì)bind設(shè)置一下,因?yàn)閎ind的大多數(shù)版本都存在問(wèn)題,
這個(gè)版本雖然目前沒(méi)有,但還是提防為好,我在這里建議使用chroot技術(shù)來(lái)增強(qiáng)bind的
安全,假設(shè)我們把chroot目錄設(shè)在/chroot,我們做以下事情:
pw useradd bind -g 53 -u 53 -d /nologin -s /nologin
mkdir /chroot
mkdir /chroot/etc
mkdir /chroot/var
mkdir /chroot/var/run
cp -rp /etc/namedb /chroot/etc/namedb //建立bind的工作環(huán)境和目錄。
然后再運(yùn)行
$PATH/sbin/named -t /chroot -u bind
這樣做了后運(yùn)行ps -ax |grep named會(huì)發(fā)現(xiàn)bind是以bind這個(gè)權(quán)限很底的身份運(yùn)行,
我們到/chroot/var/run目錄下看,會(huì)發(fā)現(xiàn)有named.pid這個(gè)文件,表示bind已經(jīng)很成
功的被chroot在/chroot這個(gè)目錄里了,就算被“黑客”利用bind入侵了,由于權(quán)限很底,
而且被限制在/chroot這個(gè)目錄里,并且里面沒(méi)有任何的shell,不給“黑客”任何的破
壞條件。所以說(shuō)bind這時(shí)已經(jīng)相當(dāng)安全了。
到此整個(gè)Gateway服務(wù)器就已經(jīng)完全設(shè)置完畢。
現(xiàn)在就是內(nèi)部服務(wù)器了,而內(nèi)部服務(wù)器受到Gateway以及防火墻的保護(hù),所以在安裝上
沒(méi)有多大的問(wèn)題,只要注意一下郵件服務(wù)軟件以及HTTP服務(wù)軟件是否有漏洞就行了,
比如不要使用老版本的sendmail,因?yàn)閟endmail的每個(gè)版本都存在一定的安全問(wèn)題,
我這里建議使用Qmail,關(guān)于Qmail的安裝可以下載我提供的Qmail安裝包
http://www.linuxaid.com.cn/training/tips/showtip.jsp?i=245 ,而在HTTP上就
要注意不要使用帶漏洞的新聞發(fā)布系統(tǒng),論壇等。
好了,整個(gè)服務(wù)器都已經(jīng)安裝完了,以上本人已經(jīng)在兩臺(tái)FreeBSD 4.5的機(jī)器上測(cè)試
通過(guò)。使用FreeBSD4.5的朋友們,如果按以上方法去設(shè)置自己的服務(wù)器的話,基本
能保證正常工作。
聲明:該文章由iceblood本人原創(chuàng),如有什么問(wèn)題歡迎大家與我交流經(jīng)驗(yàn),文章如
要轉(zhuǎn)載,請(qǐng)保持文章的完整性,包括“聲名”部分