作者: in2 (中秋玉兔 *^^*) 看板: in2
標題: [隨意] 關於架設一個 z6ibbs (隨筆篇)
時間: Tue Oct 22 21:59:12 2002

只是剛剛好想到一些事情, 隨手寫了下來 ;d
不過我想某些東西, 也許可以提供大家在某些地方上面用.

我們先來說整個系統的架構.
尤其像是 bbs這種不是很容易分散到多台機器跑的系統,
 (也就是要用一台強力的機器硬撐的)
最好要再多準備一台電腦,
幫忙把一些其餘的服務分掉.
像是郵件 (尤其加上擋信) , 轉信,  make world 以及一些後面會描述到的東西.
我們姑且將這台機器稱為後援機好了,
他主要的目的只是想要幫前端機分掉一點事情,
8像是郵件, 就由後援機去對外收 (並進行擋信) 以及替前端機發信.
好處是, 信件並不是太須要即時 (妳大概不會要求按下 send 後 100ms內要送到)
可是有的時候可能會花掉大量的資源,
像是要擋信, 或是和對方網路上的問題一直重送,
又或是 queue一大堆信件在硬碟裡面, 每過一些時候又一直要 retry一次.
又或是妳大概不會想要在一台 load > 30的機器上 make world or ports
於是我們在前端機旁加一台後援, 讓這種煩人的事情由後援機去做,
於是前端機就可以更 focus在他的服務上.
像這種情況, 兩台機器最好串在很近的地方,
像是同一個 switch 上, 又或是直接用 cross-over 線互聯.

要怎麼來備份一個足夠龐大又會不斷亂長的系統?
我想應該不會有人想要把 bbs丟到 cvs裡面, 雖然 cvs很好用 :X
bbs 一般可以考慮直接把她整個 tar + gz 起來,
就算爆炸了要還原應該也不會算是什麼大困難.
好像有某長輩是用 dump 的 @_@;;;;
備份最好兩地備份,
當然妳可以考慮直接備份在妳的後援機上,
這決對會比妳備份在前端機要好的太多了.
當然若妳可以再備份到另外一地 (像是備份到美國)
醬子會大大增加爆炸時的損失.

一般應該是會把 bbs架在 i386 上,
自然用的是 FreeBSD或是 Solaris(i386)
我當然不會告訴妳我們用的是什麼,
不過據說我們頗崇尚 berkeley A_AY
另外我還可以偷偷的告訴妳一些小道消息,
像是據說某間很大的動物園, 她們好像也是用 FreeBSD ,
某個喀喀城市, 用的也是 FreeBSD,
另外有一個神祕據說叫做天火的 bbs, 用的是 Solaris(i386)
曾經有位 I零  大大, 說他都直接跟客戶說:
        Linux, no tech support
因為他不會用 Linux, 然後如果人家硬要用的話,
他就會拿 RedHat 光碟把他 install all :PP
 (要用什麼是個人信仰, 請不要找我來吵架 ;p )

在 FreeBSD分成三個主要的 branch(es): stable, release, current,
除非妳心臟很夠力或很年輕或是夠大,
一般情況下並不會拿 current的版本在正式的 server 上玩.
雖然 current有些強力的功能, 不過正如 handbook 說的:
21.2.1.3 What Is FreeBSD-CURRENT Not?
1. A fast-track to getting pre-release bits because you heard there
   is some cool new feature in there and you want to be the first on
   your block to have it. Being the first on the block to get the new
   feature means that you're the first on the block to get the new bugs.
2. A quick way of getting bug fixes. Any given version of FreeBSD-CURRENT
   is just as likely to introduce new bugs as to fix existing ones.
 (引自 http://www.freebsd.org/doc/en_US.ISO8859-1/
       books/handbook/current-stable.html          )
不過不管你用哪一個, 記得時時要注意一下,
看看有沒有什麼 security hole又被爆破.
通常 follow release 是比較保險的做法,
不過這項事情好像在最近並不成立.
我自然不會告訴妳我到底是不是偷偷昇級到 current了 A"A

關於 security 上的問題,
一般的通訊顯然應該要走 ssh一類的通道,
而至於 telnetd, rsh 等等, 請直接拿去馬桶沖掉 @_@;;;;
另外建議設簡單的 firewall ,
在發生火災的時候會有比較高的存活率~ ;d
通常至少會有
        allow ip from any to any via lo0
        deny ip from any to 127.0.0.0/8
        deny ip from 127.0.0.0/8 to any
就正常的情況下來說, 127.0.0.0/8 應該是不可能會從非 lo0來.
而對於 < 1024 的 resvered port ,
通常會只 allow幾個有開 service的 port , 其他全擋.
像是:
        allow tcp from any to me 22,23,25 in
        deny tcp from any to me 1-1023 in
若機器並不須要提供大家 ssh的 login
 (像是妳的 bbs只開放 port 23, 並沒有開放由 ssh轉到 bbs)
事實上可以考慮直接把 port 22 (ssh)設死在只有某個 ip 可以連進來,
像是上面改成:
        allow tcp from 140.112.30.142 to me 22 in
                                        # 只給 140.112.30.142 連到本機 port 22
        allow tcp from any to me 23,25 in
                                        # 大家都可以連本機 port 23,25
        deny tcp from any to me 1-1023 in
                                        # 其他每個 port 的 tcp都不給連
醬子就算 ssh暴出 security hole ,
只要唯一(s) 可以連到的幾台機器都沒有被攻破,
或是跟本就沒有人知道只有那一(s) 台電腦可以連到該台的 port 22 ,
至少又比大家都可以連到妳的 ssh安全許多.

我相信在一般情況下,
或多或少妳都會碰到那種非到 console解決的事情不可,
像是 fsck 失敗了,  console提示要妳打入 root's passsword ,
然後問妳 shell, 要妳手動 fsck ,
通常發生這種 (或其他) 的情況的時候,
網路並還沒有起來, 妳並是 ping 不到, 更別說要 ssh進去了.
如果這個時候妳妳人就在機器旁的話自然還好,
不過如果妳人不在機器旁 (ex妳在北京, 機器在台灣) 呢?
我建議如果妳有這種考量 or 吃過大苦頭 or 不想吃大苦頭的,
最好使用 serial console.
 serial console 差不多是把 console的訊息,
透過 serial (也就是 com port) 導到另外一台機器上 (假設接到後援機)
啟動 serial console 是在相當早的,
在 BIOS 等等開機程序完成把 loader 載進來後,
就會把所有的 console訊息導到 serial 上
 (這部份我並不是很確定, 若有錯誤請指正 ^^" )
也就是,  serial console 可以看到完整的開機畫面,
就算是 kernel panic , 也可以在 serial console 進 kdb.
於是, 一旦前端機 crash掉, 連網路都 ping 不到的時候,
只要這個時候後援機還活著, 就可以透過網路連進後援機,
透過 serial console 看看前端機目前的情況,
在大多數的情況下, 透過 serial console 都可以把問題解決掉.
 (當然, 如果像是硬碟爆炸,  CPU燒掉的話, 顯然就沒辦法了 ^^" )
我會建議在後援機開隻 screen 把前端機的 console ALWAYS attach.
如此一旦出問題的話, 妳可以看到最後到底發生什麼事情.

自然也許有朋友會有疑問, 如果後援機 crash的話怎麼辦 @"@
唔, 我們當然只會在後援機上找外星人和做一些簡單的事情,
一般的情況下醬子要把機器搞爆應該不是很容易的.
當然妳可以把後援機的 console接到前端機上,
醬如果後援機 crash而前端機沒有的話就可以用的到.....
雖然這應該是很奇怪的事情 -____-!#

如果 serial console 還是不能解決妳的問題的話,
也許妳可以考慮接一個遠端 reboot 的裝置.
我說的是妳可以下指令給後援機,
當她去 short前端機 motherboard上的 reset pin(s)
醬子當然是很暴力的做法,
不過在某些情況下確實有醬子惡搞的必要就是了~ ;p
我當然不會告訴妳我們到底有沒有遠端 reboot 的系統,
不過我可以偷偷告訴妳, 我們有用 serial console.

唔 @"@
我當然不會把這篇寫的很好笑或是一點都一正經,
不過我可以偷偷告訴妳,
竟然有人說我上次寫的那篇很好玩 -_______________-!#

--
    [44m  [30m▂▅▇▇▅ [;44m [m  [1;37;44m╚╩╯╭○ ╔═══╗[;37;40m [1;33m[;37;40m                  [m  [44m   ▃   ◢[35;47m◢[;44m  [m
   [44m [34;40m▊[;30m     [37m／ [m   [44m  [m [1;37;44m╔═╗╬╦ ╠═══╣[34;40m╔╦ ╔╦╗╠══╣[m [44m ◢[35;47m ▃ [;44m  █[35m█[;44m   [m
  [44m  [34;40m▎[;30m  [43m◤◢█◤[m [44m   [1;37m╚╦╝║║ ╚═══╝[34;40m╯/╗╔╬╗╯╭═╣[;44m  ◥◤[35;47m▌[;44m◢[35;47m◢[34;45m◢[;44m    [m
  [44m  [34;40m▌[;30m  [43m▎◣  ◢[33;44m▎[;44m  [1;34;40m║║║║║ ══╦═╯[37;44m／ ║╠╬╣╔╬═╗[;44m  [34m  [37m◢[47m      [44m◣[34m  [;44m  [m
   [44m   [;1;33m◣[;30;43m  [47m [40m [43m  [47m [;40m [44m   [m [1;34;40m╯╝╯╯╚ ╯═╩╩╯[37;44m ║║╚╬╝╚╬═○[m [44m   [30;47m_ [1;31;40m'[;30;47m_ [1;31;40m'[;30;47m _  [;44m   [m
    [30;44m◢█[43m＼[4m  ¯[;33;44m◤  [m  [37;40m                     [1;44m ╚╝╰╯╯╰╯╰╯[m  [44m  [37m◥[30;47m ▼  \[37;44m◤[;44m  [m

--
※ 發信站: 新批踢踢(ptt2.cc) 
◆ From: 140.112.30.143
[1;31m→ [33mwindsheep[m[33m:看到最後才發現好像比第一篇還好笑..^^[m      推140.112.182.151 10/22
