By James T. Dennis,
[email protected]
Starshine Technical Services, http://www.starshine.org/
翻譯:gaia
From Nilesh M.
Hi,
我有幾個問題.我想把Linux設置成我的家用電腦的服務器,讓它們共享一條 Internet連接,還想把它用做Internet服務器.
O.K.那是三種不同的角色:
網絡服務器 (要提供哪些服務)
Internet網關 (代理(proxy) 和/或 偽裝(masquerading))
Internet主機/服務器 (要提供哪些服務)
Linux可以同時扮演這三種角色---盡管就安全和風險評估而言"把所有的蛋放進一個籃子"未必是個好主意.
按常規,你還要考慮機器性能---不過擁有200+Pentium處理器,32M到256M RAM,4Gb到12Gb磁盤空間的典型的現代PC比起5到10年前的Unix已經是相當強大了 .
你知道不知道我能否用一個用於modem的10mbs以太網和一個用於家庭網絡的100mbs以太網來設置Linux?應該從哪著手,怎麼去做?
我猜想你指的是設一個10Mbps以太網用於cable modem,ISDN路由器(router)(如 Trancell/WebRamp,或Ascend Pipeline系列),或者DSL路由器.這些設備的功能是作 為你購買的cable,ISDN或xDSL服務的路由器,一般提供10Mbps接口.
你完全可以在Linux系統中安裝兩個或更多以太網卡.若你把任何標准的現代 100Mbps網卡用於10Mbps的局域網,它們會自動處理10Mbps的速率.所以你只管為你的系統安裝兩塊這樣的網卡,一塊接路由器,另一塊接高速HUB.
你通常要把以下這行加進/etc/lilo.conf文件裡好讓內核識別第二塊網卡:
append="ether=0,0,eth1"
... 0,0,表示自動檢測這個設備的 IRQ 及I/O基地址.否則你就需要像下面這樣指定參數:
append="ether=10,0x300,eth0 ether=11,0x280,eth1"
這一行必須出現在/etc/lilo.conf的每一個Linux"段"中(即每一組引導Linux的選項,分別指向不同的Linux kernel,相應的root文件系統及其它設置).
當然了,你必須運行 /sbin/lilo命令以讀入 /etc/lilo.conf 文件中的任何改變,並把它們"編譯"進新的引導區和映 像("maps").
如果你的系統安裝了普通的modem---照樣可以用.你可以用PPP(使用pppd程序)通過普通電話線建立Internet連接.Linux還提供了對內置ISDN, T1 "FRADs" (frame relay Access devices)和 CSU/DSU (即Codecs --- coder decoder units)的支持.
我還聽說用於控制一些類型的內置ISDN卡的ipppd.我想多數其它設備都有相應的驅 動程序使它們"看似"Linux的 modem或以太網設備.
我只想買兩塊100mbs網卡互相連接...所以我想我並不需要集線器,對嗎?我只想讓兩台機器連在這個簡單網絡上.
你要麼需要一個HUB,要麼需要一個"十字交叉"的ethernet patch cord.普通的5個接頭(? cat 5)的ethernet patch cord沒法正確直接連接兩塊網卡.
感謝你的每一點幫助,特別是像一些站點鏈接之類的信息,能讓我找到教我怎樣一步步設置的資料.
我不知道這樣的鏈接.正如你可能已經知道的,Linux有一百多個HOWTO文件,其中許多和設置各種服務有關.
現在我們回到前面列出的幾種不同的角色:
網絡服務器(要提供哪些服務) Internet網關(代理(proxy)和/或IP偽裝(masquerading)) Internet主機/服務器(要提供哪些服務)
從第一項開始說吧.你有一個平時不連在Internet上的小網絡(即沒有永久的Internet專線連接).所以你會希望你的系統使用"私人網絡地址".這就是指保留的IP地址 ---它們不會被分配給任何Internet上的主機(所以,使用它們不會導致你的系統在選擇路由時產生歧義).
有三類這樣的地址:
192.168.*.* --- 255個C類網絡 172.16.*.* 到 172.31.*.* --- 15個B類網絡 10.*.*.* --- 1個A類網絡
... 我為我家裡的網絡分配了 192.168.42.*
... 這些地址還可以被防火牆和Internet網關(gateways)後面的系統使用.
就Linux而言,我們可以把一個Linux系統設置成本地服務器和Internet網關.我們的網關的實現可以通過"代理"(使用SOCKS或其它應用層工具在我們的私人網絡和 Internet之間轉發數據),或者通過IP偽裝(在數據包被轉發時,使用內建於內核的網絡地址翻譯代碼重寫數據包---一種網絡層透明的代理方式).
不過,我們說得太遠了點.
首先我們要設置Linux LAN服務器.所以,安裝好Linux並設置好其網卡的IP地址,如 192.168.5.1.內核路由表裡應該有指向我們的內部網絡的路由,就像下面這樣:
route add -net 192.168.5.0 eth0
... 這就告訴內核所有地址是 192.168.5.* 的主機位於與eth0相連的網段.
現在,想想你希望為你的其它機器提供什麼服務.
Linux在缺省安裝時就為任何能訪問你的系統的機器提供了一些常見服務 (telnet, NFS, FTP, rsh, rlogin, sendmail/SMTP, web,samba/SMB, POP和 IMAP等等).多數這些服務要通過名叫inetd的"internet服務分派程序 "才能得到.這些服務的清單在 /etc/inetd.conf裡.一些其它服務,如 mail傳送及轉發(sendmail),和web (Apache httpd)以"standalone"模式啟動 ---即由 /etc/rc.d/*/S* 腳本啟動而不需要inetd.NFS是一個特殊服務,需要幾個不同的守護進程參與完成---特別是 portmapper和 mountd.因為NFS是基於"RPC"(遠端過程調用)的服務.
既然所有能送數據包給你的系統都可以請求你的系統提供的服務,既然多數Unix和 Linux系統提供全套服務,這就出現了一個嚴重的安全問題.任何服務的守護進程的任何bug會導致整個系統的不可靠,從而可能被世界任何一個角落的人利用.這就導致了TCP包裝程序(TCP Wrappers)的產生.(所有主要Linux發布都缺省安裝了它---但缺省設置成提供全部權限).也就是為什麼我們有"防火牆"和"包過濾".
你容易以為你很隱蔽,誰也不會闖進來.然而,如今有很多cracker和script kiddies,他們花費大量時間在"端口掃描"("portscanning")上---尋找脆弱的系統 ---把他們叫過來,利用他們做進一步的portscanning sniffing, 破解口令 ,spamming,破解軟件,及其它活動.
我最近安裝了一條DSL線路.所以我現在可以一直連在Internet上.我裝上它還不足一個月,還沒有指向我的IP地址的DNS記錄.但我已經做了至少三次掃描尋找一些常見的 IMAP的bug,還有一次尋找一個mountd 的bug.所以,我敢說你並沒有隱避得能高枕無憂.
當你通過ISDN或POTS(plain old telephone service)線路使用撥號PPP時,你仍有些風險.當你做這些時,風險仍在你這邊.然而,設置你的系統以避免這類問題還是 值得的.
所以,你有必要如下編輯兩個文件:
/etc/hosts.allow
ALL:LOCAL
/etc/hosts.deny
ALL:ALL
... 這絕對是你最低限度要考慮的.這樣設置意味著tcpd程序(TCP Wrappers)允許 "local"系統訪問(相對於你的域名,其主機名中沒有"點"的那些主機),並且拒絕其它所有主機對一切服務的訪問.
為了讓這項措施正常工作,你要確認所有你的本地主機在/etc/hosts文件裡正確地有自己的一項,且/或你已經正確設置了你自己的DNS服務的 forward 和reverse區.你還有必要確認你的/etc/host.conf (libc5)文 件和/或 /etc/nsswitch.conf (glibc2,即libc6)設置成首先搜索 /etc/hosts文件.
我的host.conf文件是這樣的:
# /etc/host.conf
order hosts bind
multi on
我的/etc/nsswitch.conf是這樣:
passwd: db files nis
shadow: db files nis
group: db files nis
hosts: files dns
networks: files dns
services: db files
protocols: db files
rpc: db files
ethers: db files
netmasks: files
netgroup: files
bootparams: files
automount: files
aliases: files
glibc2提供了一些鉤函數,所以使用模塊化的服務庫(service libraries)對上面文件裡每一種數據庫的搜索和處理是可擴展的.所以很快我們將可以看到在這個服務調度文件(services switch file)中加入 LDAP服務---那樣主機(hosts)用戶(passwd或shadow?),用戶組 (group)等信息就可以用名為nss_ldap的模塊庫來查詢和處理,而nss_ldap模塊與 LDAP服務器打交道.我們還可能看到用某種nss_hesiod模塊對一些用戶和用戶組信息提供"Hesiod"服務(通過DNS或secureDNS協議).甚至我們會看到用一個 nss_nds模塊來提供NDS(Novell/Netware目錄服務).
不過話說得遠了點.
一旦你做完這些,你就可以為你的LAN提供普通服務了.簡單地說你如何設置你的客戶系統取決於它們運行什麼OS,和你想讓它們得到什麼服務.
比如,如果你想通過NFS讓你的Linux或其它Unix客戶共享文件,你要編輯你的 Linux服務器上的/etc/eXPorts文件指定哪些目錄樹對哪些客戶系統是可訪問的.
以我自己的系統上的exports文件為例:
-+
# / *.starshine.org(ro,insecure,no_root_squash)
# / 192.168.5.*(ro,insecure,no_root_squash)
/etc/ (noaccess)
/root/ (noaccess)
/mnt/cdrom 192.168.5.*(insecure,ro,no_root_squash)
... 注意我在向我的LAN輸出根目錄時把兩個目錄標記為noaccess".這樣做是為了防止我的網絡上其它系統讀我的設置文件和passwd/shadow文件.我只用 read-only模式輸出我的根目錄,並且只是偶爾才暫時地輸出根目錄(這就是為什麼你看到時這幾行是被注釋掉的).我的CDROM設為可訪問的,因為我並不擔心屋子裡的任何人讀我的任何CD上的數據.
牢牢記住NFS就是 "no flippin security"(不堪一擊的安全性) --- 任何能控制你的網絡上任何系統的人都能夠變成非root用戶身份執行操作,並以那個用戶的"名義"訪問
不過話說得遠了點.
一旦你做完這些,你就可以為你的LAN提供普通服務了.簡單地說你如何設置你的客戶系統取決於它們運行什麼OS,和你想讓它們得到什麼服務.
比如,如果你想通過NFS讓你的Linux或其它Unix客戶共享文件,你要編輯你的 Linux服務器上的/etc/eXPorts文件指定哪些目錄樹對哪些客戶系統是可訪問的.
以我自己的系統上的exports文件為例:
-+
# / *.starshine.org(ro,insecure,no_root_squash)
# / 192.168.5.*(ro,insecure,no_root_squash)
/etc/ (noaccess)
/root/ (noaccess)
/mnt/cdrom 192.168.5.*(insecure,ro,no_root_squash)
... 注意我在向我的LAN輸出根目錄時把兩個目錄標記為noaccess".這樣做是為了防止我的網絡上其它系統讀我的設置文件和passwd/shadow文件.我只用 read-only模式輸出我的根目錄,並且只是偶爾才暫時地輸出根目錄(這就是為什麼你看到時這幾行是被注釋掉的).我的CDROM設為可訪問的,因為我並不擔心屋子裡的任何人讀我的任何CD上的數據.
牢牢記住NFS就是 "no flippin security"(不堪一擊的安全性) --- 任何能控制你的網絡上任何系統的人都能夠變成非root用戶身份執行操作,並以那個用戶的"名義"訪問