查看單個文章
舊 2003-12-01, 01:43 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 關於OpenBSD的寬帶上網共享和網路服務

關於OpenBSD的寬帶上網共享和網路服務

前言

隨著個人電腦的普及,對於家庭用戶來說,擁有一台以上PC的已經不少了,我們希望能夠方便地同時上網。一些規模較小的學校、科研服務機構、商業機構,由於難以負擔足夠IP位址的費用,對共享IP上網也有迫切的需要。

隨著寬帶上網的逐漸推廣,多台電腦共享一個Internet高帶寬的連接顯得越來越有意義。比較一般的做法一是購買專門的網路位址翻譯(下簡稱NAT)機,二是在一台網關電腦上安裝NAT軟體或者應用程式代理服務軟體1,其他電腦通過這個網關上網。第一種方法雖然安裝、維護比較簡便,效能好,但是需要進行一定的設備投資,並且NAT機的功能相對比較單一,難以實現其他Internet服務。第二種方法,網關機的操作系統如果使用Windows 95/98則穩定性不佳,不適合長期開機;使用Windows NT/2000則對作為硬體配置要求相對較高。

於是手頭有一台低配置PC機的用戶可能會想到Linux,但是本文要介紹的是BSD。與Linux不同,BSD是AT&T UNIX的「後代」,它不像Linux那樣發行版本眾多,卻有更好的效能、可靠性與安全性。

目前有3個源碼開放的BSD版本:FreeBSD,NetBSD和OpenBSD。FreeBSD是用戶數最多的版本,它的主要特點是效能好,Yahoo、ftp.cdrom.com等知名網站用的就是這個操作系統。NetBSD的特點是對各種硬體平台的廣泛支持,它支持從手持設備到大型伺服器的多種平台。OpenBSD的特點是安全性,在OpenBSD的網址,我們可以看到這樣一句話:「三年來沒有發現預設安裝的OpenBSD的一個遠端安全漏洞!」,另外它支持的硬體平台也不少,不過目前還不支持SMP(對稱多處理器)。

現在我們就以線纜(Cable)寬帶接入為例,談談如何利用關於OpenBSD操作系統的網關機,使多台電腦共享一個線纜調製解調器(Cable Modem,下稱CM)的Internet連接。

安裝OpenBSD

我們先準備一下硬體:Pentium133 CPU,16M記憶體,1G硬碟,2塊乙太網卡。其實OpenBSD可以在低得多的配置上執行得很好,不過既然我們會開通一些網路服務,配置還是不要太低了。另外如果共享上網的客戶端機很多,可以適當增加記憶體。顯示卡、顯示器、軟式磁碟機、CDROM和鍵盤,僅僅在安裝、配置的程序中需要,一旦系統投入執行,就都不需要了。

兩點建議:(1) OpenBSD的分區工具的功能強大,但是易用性不大好(不如Linux),所以建議將整個硬碟全部分配給OpenBSD使用,不要和其他操作系統混用--不是不可以,而是分區比較麻煩。(2)網路卡建議用一般的NE2000相容網路卡,比如Realtek RTL8029(AS)晶片的10M PCI卡。OpenBSD支持的網路卡並不是很多,用名牌的網路卡對於速度等方面並沒有太大的說明 ,萬一相容性有問題還要添麻煩。

OpenBSD有3種安裝方式:CDROM安裝,FTP安裝和硬碟安裝。如果PC的BIOS支持光碟啟動的話,那麼CDROM安裝是最方便的,我們來看一下安裝的主要程序。

從CDROM啟動後選項(I)nstall,對提示的「Specify terminal type」直接按Enter鍵採用預設值,系統會列出當前所有的硬碟並提問「Which disk is the root disk?」。注意對於IDE接頭的硬碟,BSD給它的設備名是 wd0,wd1,……;對於SCSI接頭的硬碟是 sd0,sd1,……。我們的PC有一個IDE硬碟,輸入wd0並Enter鍵。系統提問「Do you want to use the *entire* disk for OpenBSD?」,輸入yes並Enter鍵,系統會啟動fdisk並將整個硬碟空間都分給BSD系統。輸入write、quit,系統會儲存分區設定並啟動disklabel。Disklabel的作用是在fdisk建立的給BSD用的BIOS分區中,劃分出不同的BSD分區。我們可以在disklabel的命令提示字元「>」下,隨時使用?指令顯示說明 信息,使用p指令列印當前的BSD分區劃分情況。為了不搞得太複雜,我們僅把它劃分為一個「/」和一個swap分區。先用z指令把BSD分區清空,再用「a b」指令增加一個新分區,offset直接Enter鍵用預設值,size輸入「128M」(如果工作比較重而有足夠的磁牒空間,也可以大一些比如256M甚至512M),FS type用預設的「swap」。然後用「a a」指令增加一個新分區,offset用預設值,size輸入「*」使用全部剩餘空間,FS type用預設的「4.2BSD」。最後用w、q儲存並退出disklabel。接著系統會提示更改mount point信息,看看wd0a和wd0b是不是分別mount到了「/」和「swap」,完成後輸入done結束。如果一切正確就一直Enter鍵直到看到「Are you really sure that you're ready to proceed?」,輸入「y」Enter鍵,系統就開始格式化硬碟了。格式化完畢,先不要進行網路配置。接著是設定root用戶的密碼。下面問要不要執行X Window System,這個圖形用戶界面對我們沒有用,如果硬碟空間夠的話,選上也可以。下一步就是正式開始安裝了,系統會問從什麼地方安裝(我們這裡是CDROM)、CDROM設備名、文件系統種類以及安裝文件位置,全部用預設值。接著系統列出全部安裝包,可以輸入一個「*」全部選上,再輸入一個「done」開始安裝。安裝完畢後系統問「Extract more sets?」,直接Enter鍵跳過。下一步是設定時區,中國是在Asia下面,選項你所在的城市。最後系統會建立啟動訊息等等,直到看到「CONGRATULATIONS! You have successfully installed OpenBSD! 」說明安裝已經成功,系統返回命令提示字元下,輸入「reboot」並Enter鍵,重新啟動系統。

配置網路

重新啟動後,用root用戶和剛才設定的密碼進入系統,鍵入「ifconfig -a」檢視所有網路接頭,我們會看到有諸如「ne3: …… media: Ethernet ……」這樣的顯示,針對不同的網路卡OpenBSD會有不同的接頭名,這裡假設用的的是NE2000相容網路卡,命名為「ne」,後面的數字表示它插在第幾號PCI槽(從AGP槽的那面開始數)。現在假設我們的兩塊網路卡分別插在3號、4號PCI槽裡,則它們的接頭名分別是ne3、ne4。現在我們打算把ne4接到CM上,把ne3接到內部LAN的HUB上。

由於CM是通過DHCP來獲得IP位址的,我們先把ne4設定成通過DHCP獲得IP位址:

# echo dhcp > /etc/hostname.ne4

OpenBSD啟動的時候發現hostname.ne4中的內容是「dhcp」,就會啟動dhcp client去請求IP位址、子網掩碼、網關位址、DNS位址等設定。可以手工調整dhcp client的配置,但是這裡沒有必要了。

然後我們設定連接內部LAN的ne3的網路設定(假設內部網路使用的是保留的IP位址192.168.0.x,子網掩碼是255.255.255.0):

# echo "inet 192.168.0.1 255.255.255.0 NONE" > /etc/hostname.ne3

將ne3的IP位址設定為192.168.0.1,最後的那個NONE表示不指定網路卡的media option。

為了在NAT機上可以正確進行DNS解析,我們還需要配置一下/etc/resolv.conf文件,舉例來說:

# cat /etc/resolv.conf

nameserver 210.52.149.2

nameserver 202.96.209.133

lookup file bind

第一、二行列出了兩個不同的DNS伺服器的IP,第三行表示先從/etc/hosts文件中搜尋,如果失敗再到DNS伺服器搜尋。

NAT大概的運作方式是這樣的:假設內部網路上的電腦A需要訪問Internet,則A把資料包傳送到網關機N,N收到A的資料包後,把請求者的IP位址換成自己,然後傳送到目的地去。收到目的地發來的回答後,N再把它轉發到A機。NAT是在低層次起作用的,與在高層次起作用的代理比如套用層代理(一般的有HTTP proxy等)相比,對於A機來說,它不用將自己的應用程式設定成使用代理(有的應用程式並不支持代理),除了無法從外部直接連線到A機之外,所有的使用都和直接連接Internet一樣。

下面我們來配置NAT:

修改 /etc/rc.conf

ipfilter=YES

ipnat=YES

修改 /etc/sysctl.conf

net.inet.ip.forwarding=1

再修改配置防火牆規則,現在我們先不設定任何複雜規則,僅僅允許所有的信息通過:

# cat /etc/ipf.rules

pass in from any to any

pass out from any to any

然後是NAT規則:

# cat /etc/ipnat.rules

map ne4 192.168.0.0/24 -> ne4/32 portmap tcp/udp 10000:60000

map ne4 192.168.0.0/24 -> ne4/32

這些規則表示將內部網的IP位址192.168.0.x 、子網掩碼為255.255.255.0,映射到ne4網路接頭上去。第一行是映射TCP和UDP的,第二行是映射其他傳輸協定的。

現在所有的配置都完成了,把CM和ne4連接好,並把內部LAN的HUB連線到ne3上,鍵入reboot重啟動。將內部LAN上的電腦的網路卡接頭的IP設定成 192.168.0.2,192.168.0.3……,子網掩碼為255.255.255.0,網關為192.168.0.1,DNS伺服器為ISP提供的DNS伺服器的IP(比如210.52.149.2,202.96.209.133),根據需要可能需要重啟動。試試看是不是已經可以上Internet了?

進一步的配置

下面介紹一下在我們剛才構築的關於OpenBSD的NAT網關機的基礎上,進一步設定一些網路服務的方法。值得注意的是:從安全性考慮,不是必要的服務就不要開!

1. 遠端登入

OpenBSD預設安裝後,啟動的服務很少。telnet服務是預設關閉的,因為telnet是明文的傳輸協定,有被竊聽的危險。OpenBSD開啟了ssh服務,這是一個加密的遠端登入服務。為了使用這個服務,必須在客戶端機上安裝支持ssh傳輸協定的終端軟體。在Windows操作系統下,可以用SecureCRT。安裝完終端軟體後,建立到伺服器192.168.0.1的連接,注意使用standard SSH。

2. 串列阜終端

對於這個NAT伺服器來說,我們可以不要顯示卡、顯示器和鍵盤。但是如果配置網路出了問題,遠端登入無法連線到伺服器就比較麻煩了--因為我們已經把伺服器的顯示系統和鍵盤都去掉了。所以有必要建立一個比較保險的連接途徑。我們可以通過串列阜終端的方式,連線到伺服器。

a) echo -P > /boot.config 這個目的是告訴boot模組,如果發現鍵盤不存在,就進入serial console模式;

b) 修改 /etc/ttys,將tty00的status改為on,後面可以加上secure(允許root從serial console登入)--這裡假設你用的是COM1口;如果你沒有那種標準的null modem線,而只有那種RX、TX、地三根線的串列阜電纜,就再加上一個 softcar;

c) 在COM1上接終端,或者接到另一台電腦,比如執行Windows的PC,隨便安裝一個支持串列阜終端方式的軟體,比如Hypertermial、Netterm、SecureCRT,新增立一個session,用串列阜傳輸協定,速率9600,data 8, parity none, stopbit 1,flow control XON/XOFF(假設用的是softcar);

d) 重啟OpenBSD的機器,不要忘記拔掉鍵盤!

如果覺得9600bps的速率太慢,可以在 /etc/ttys中設定,並且將終端或者終端仿真軟體的速率設定成相同的就可以了。舉個例子:

tty00 "/usr/libexec/getty std.57600" vt100 on secure softcar

3. WEB服務

將/etc/rc.conf中,找到httpd_flags=NO,將NO去掉,下次啟動的時候WEB服務就開啟了。WEB服務的預設根目錄是/var/www,配置文件是/var/www/conf/httpd.conf。

4. 匿名FTP服務

首先要增加一個用戶名ftp,但是為了安全原因,這個用戶不允許登入,僅僅作為匿名FTP使用:

a) echo /usr/bin/false >> /etc/shells

這是允許/usr/bin/false作為用戶的shell

b) 增加一個用戶ftp,屬於ftp組,HOME為/home/ftp,注意將該用戶的shell設定為/usr/bin/false,這樣ftp用戶就不能登入到系統了。

再建立一些目錄:

c) mkdir /home/ftp/pub

chmod 555 /home/ftp/pub

這個目錄對所有人都是只讀的,提供下載。

d) mkdir /home/ftp/incoming

chmod 777 /home/ftp/incoming

這個目錄對所有人都是可寫的2,提供上傳和下載。

然後是設定ftpd的啟動:

e) 編輯/etc/rc.conf,找到ftpd_flags,修改為ftpd_flags="-DllUSA"。

這些參數將使得ftpd作為守護工作啟動,只允許匿名FTP,並且會將詳細的連接、使用情況記錄到/var/log/ftpd和/var/log/xferlog中。

最後,還有一些信息文件可以修改:

f) /etc/ftpwelcome

當用戶使用ftp客戶端軟體連線到伺服器後,顯示的歡迎信息。

g) .message

/home/ftp下面的任何目錄裡都可以有這個文件,用戶進入這個目錄後就會顯示這個文件的內容。

5. 動態域名解析

一般寬帶接入商不一定提供類BIOSIP給用戶,每次開機動態分配的IP都有可能不同。為了方便外界連接,最好有一個動態的域名解析。Internet上提供免費域名解析的服務商很多,這裡我們以hammernode為例介紹一下如何配置動態域名解析。

首先是申請一個免費的域名。訪問hammernode的主頁http://www.hn.org,點擊Create an Account申請一個帳號。具體程序並不複雜,這裡從略。假設申請到的用戶名是someuser,那麼我們就有了一個someuser.hn.org的域名。

然後我們要設定OpenBSD在啟動獲得DHCP分配的IP位址後,自動去更新someuser.hn.org對應的IP位址,我們可以在/etc/rc.local的末尾執行一個程序來完成這個更新。

# Register someuser.hn.org with IP address of ne4 interface

if [ -x /usr/local/sbin/hn-register.pl ]; then

/usr/local/sbin/hn-register.pl &

fi

在伺服器關機的時候,有必要將someuser.hn.org動態域名關閉,不知情的使用者連線到別的主機上去,修改/etc/rc.shutdown,在末尾加上:

# Turn off someuser.hn.org IP address

if [ -x /usr/local/sbin/hn-turnoff.pl ]; then

/usr/local/sbin/hn-turnoff.pl

fi

上面的hn-register.pl和hn-turnoff.pl是根據

http://www.technopagan.org/software/hammernode.pl

改寫的,這是一段用perl寫的簡單程序(必須先安裝perl的package)。 hn-register.pl是連線到伺服器,提供用戶名和密碼後,伺服器會根據探測到的IP位址,自動進行註冊,5分鐘之內會生效。Hn-turnoff.pl是將IP位址註冊為指定的0.0.0.0。

6. 電子郵件服務sendmail

一般來說sendmail服務需要一個類BIOS的IP,但是由於伺服器一般是常開的,所以我們還是可以執行sendmail服務的。這裡有一個難點,就是一般免費的動態域名註冊服務都是進行域名->IP的正向解析,而IP->域名的反向解析不能實現。但是sendmail服務啟動的程序中卻會使用gethostbyaddr取得域名,才能正常使用。為此我們必須做一點手腳:

a) 再次訪問hammernode的主頁,點擊Modify your Account,輸入someuser和用戶名,在Primary MX前面打鉤。

b) 檢查/etc/rc.conf中,sendmail_flag=NO。因為我們不能在ne4通過DHCP得到IP之前啟動sendmail。

c) 將原先的/etc/hosts儲存到另一個文件中

cp /etc/hosts /etc/hosts.fixed

d) 在/etc/rc.local的末尾增加這些內容:

# Set hosts

if [ -e /etc/hosts.fixed ]; then

cp /etc/hosts.fixed /etc/hosts

/sbin/ifconfig ne4|grep "inet "|awk '{print($2," someuser someuser.hn.org");}' >> /etc/hosts

fi

# Start sendmail

/usr/sbin/sendmail -bd -q15m

第一部分是將ne4的IP和域名加hosts中。前文說到,在resolv.conf裡我們有

lookup file bind

這一句,所以系統會先到hosts文件去進行域名解析。這樣,gethostbyaddr就能夠成功了。

e) 在/etc/rc.shutdown的末尾增加這些內容:

# Set hosts back

if [ -e /etc/hosts.fixed ]; then

cp /etc/hosts.fixed /etc/hosts

fi

這樣做是在關機前恢復原來的hosts文件,這一步不是必需的。

f) 在/etc/mail/sendmail.cf中找到這樣一行:

#Dj$w.Foo.COM

在這行的後面加一行:

Djsomeuser.hn.org

這樣設定以後,下一次重啟的時候,sendmail就可以工作了。從其他地方發一封email到root@someuser.hn.org,過一段時間看看,是不是root用戶收到了一封信?

7. IP防火牆

在這台網關機上,我們可以設定關於IP過濾的防火牆,規則配置文件是/etc/ipf.rules。比如我們如果修改一下這個文件:

# cat /etc/ipf.rules

pass in quick on ne4 proto icmp from any to any icmp-type echorep

block in quick on ne4 proto icmp from any to any icmp-type redir

block in quick on ne4 proto icmp from any to any

block in quick on ne4 proto icmp from any to any icmp-type echo

pass in from any to any

pass out from any to any

第一行是允許內部LAN上的機器ping外部的IP得到的回應進入,第二到第四行是禁止其它的ICMP包進入,這樣Internet上的機器就無法ping通OpenBSD機的IP位址了。最後的兩行是允許其它的信息包進出。

上面的規則只是舉例說明防火牆的設定,它並不是一個很嚴格的規則,對這方面有興趣的朋友可以參考http://www.obfuscation.org/ipf/,那裡有詳細的IP過濾的資料。

關於OpenBSD的寬帶上網共享和網路服務就介紹這些,OpenBSD的官方網站是www.openbsd.org,配置、使用中有什麼問題可以去那裡尋找答案,也歡迎探討:huxley@kali.com.cn,請不要發廣告郵件給我!

註:

1 NAT與應用程式代理工作在TCP/IP的不同層次上,前者的好處是對應用程式基本透明,後者的好處是能夠進行關於內容的過濾,但是需要應用程式支持代理並進行正確的設定,並且系統預先配置比較大,對伺服器的配置要求比較高。

2 OpenBSD 2.8的發行版中,ftpd有一個漏洞,如果匿名FTP提供可寫的目錄,必須打一個修正檔,否則有被黑掉的可能性
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次