藍天浮雲

This is our world… Nothing changes. It’s here, that we are going to live on…

glabel

leave a comment »

其實 glabel 在 FreeBSD 上是一個很實用的程式,不過平常可能很少聽到他。之前灌 FreeBSD 有提過 glabel

當硬碟、隨身碟插在不同的 port,名稱會變來變去。硬碟可能從 /dev/ad0 變成 /dev/ad1,隨身碟可能從 /dev/da3 變成 /dev/da7。原因是作業系統通常指認得硬體插在主機板上那一個 port。

如果插在不同電腦或 port 上名稱會改變是一件非常麻煩的事。因此,就會想給他一個固定的名稱。此時,glabel 就可以發揮公用。

因為 glabel 會將資料寫入硬體當中,因此必須先卸載裝置才能 label 上去。最簡單的方式就是重新開機,然後進入「single user mode」。

使用 glabel 前請先確認 kernel 是否有加 GEOM_LABEL 這個選項(GENERIC 預設有)或有 geom_label.ko 這個模組。沒有的話,請先重新編譯 kernel。

進入 single user mode 之後就可以開始下 # glabel label -v name dev-v 會增加訊息的詳細程度)。

之前灌新的 mail server 的時候,我就開始用 glabel 了(主要原因其實是建 RAID-Z)。按照 /etc/fstab 的順序 label 比較不會搞混或漏掉:

# glabel label -v swap /dev/ad4s1b
# glabel label -v root /dev/ad4s1a
# glabel label -v home /dev/ad4s1g
# glabel label -v tmp /dev/ad4s1e
# glabel label -v usr /dev/ad4s1f
# glabel label -v var /dev/ad4s1d

標完後可以用 # glabel status# glabel list 看結果:

# glabel status
       Name  Status  Components
 label/root     N/A  ad4s1a
 label/swap     N/A  ad4s1b
  label/var     N/A  ad4s1d
  label/tmp     N/A  ad4s1e
  label/usr     N/A  ad4s1f
 label/home     N/A  ad4s1g

確定 label 成功後就更新一下 /etc/fstab

# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/label/swap         none            swap    sw              0       0
/dev/label/root         /               ufs     rw              1       1
/dev/label/home         /home           ufs     rw              2       2
/dev/label/tmp          /tmp            ufs     rw              2       2
/dev/label/usr          /usr            ufs     rw              2       2
/dev/label/var          /var            ufs     rw              2       2

下次開機就會使用這些 label 了。重新開機前,請再三確認 label 有成功和 /etc/fstab 沒有錯誤,因為沒弄好的話可能無法開機,需要用救援光碟去救回來。

這樣就完成了。Man page 上有更詳細的說明。

作者為dennylin93

2009/11/05 at 9:47 下午

OpenSSH

leave a comment »

熟悉 BSDUnixLinux 的人應該都聽過 SSH 這個協定。SSH 主要用途是遠端登入,不過也可以做 port forwarding、tunneling(通常用來鑽防火牆)、SOCKS 或用來傳檔案。SSH 之所以會出現是要取代 telnet 等程式,因為 telnet 連線未經過加密,容易被竊聽。

這篇會提到怎麼架 OpenSSH 和一些常用的指令。

大部分的 BSD、Unix、Linux 作業系統上都有 SSH 的程式,其中使用最廣泛的應該是 OpenSSH。OpenSSH 是由 OpenBSD 的開發者開發。

OpenSSH 是 OpenBSD 的一個部分,而開發的時候會釋出一個「portable」的版本,可以移植到其他作業系統。目前 FreeBSD 7.2 的 base 包含 OpenSSH 5.1p1

繼續閱讀文章 »

作者為dennylin93

2009/11/05 at 9:08 下午

阻擋 SSH brute force

with 3 comments

架好 FreeBSD 或 Linux 之後,常常見到的一個現象就是 SSH 持續的遭受攻擊。在 security run output 會看到這樣的訊息:

ns.hs.ntnu.edu.tw login failures:
Oct 30 02:25:01 ns sshd[12801]: Invalid user master from 140.124.62.197
Oct 30 07:13:22 ns sshd[14529]: Invalid user globus from 213.99.38.3
Oct 30 07:13:31 ns sshd[14535]: Invalid user condor from 213.99.38.3
Oct 30 07:13:32 ns sshd[14534]: Invalid user cadi from 213.99.38.3
Oct 30 07:26:44 ns sshd[14591]: Invalid user simoni from 124.193.106.107

看到就覺得很煩,因為每天都有,而且若不阻檔的話,可能會有數千比,系統也有機會遭到入侵。

為了阻擋 SSH brute force,我在 FreeBSD 上裝了 security/sshguard-pfsshguard 的好處是他可以判別很多種紀錄檔,也支援許多種防火牆。另外,也可以調整多久時間內登入失敗幾次,還有要擋掉多久。

目前可以判讀這些軟體的紀錄檔:

支援的防火牆包含:

作者為dennylin93

2009/11/01 at 9:20 AM

簡單備份用的 shell script

leave a comment »

自從上週慘痛的經驗,已經打算將備份做完善一點。今天晚上寫了這個 shell script,用來備份系統資料、設定檔。因為檔案不多,只用 cptar 來完成,沒有用到 net/rsync

這個 shell script 還有很多要修改的地方(主要是讀取參數的部分),不過應該還可以用。

繼續閱讀文章 »

作者為dennylin93

2009/10/25 at 9:53 下午

張貼於FreeBSD, 電腦科學

在 FreeBSD 上設定 lagg

leave a comment »

最星期買了兩條 Cat 6 的網路線(3 公尺,$130),想試試 lagg。在 FreeBSD 上,lagg 提供了 failoverfec(又稱 loadbalance)、lacp 等功能。比較常用的應該是 failoverlacp

  • failover:這個模式可以設定主要與次要的網卡,當主要網卡無法使用時,會自動換成次要網卡
  • lacp:此模式會將流量分散在各個網卡當中,而硬體有變化時會自動偵測並更改設定

這兩個設定當中,lacp 比較麻煩一點,因為 switch 必須支援,也需要一些額外的設定。

繼續閱讀文章 »

作者為dennylin93

2009/10/23 at 10:03 下午

灌 FreeBSD

with 6 comments

最近段考完了,我又灌新機器了。這次換 mail server,是一台 HP DL320 G5p,硬體還不錯,CPU、RAM 都很好,雖然硬碟是 SATA。不過對學校而言 SATA 綽綽有餘了。

CPU 是 Intel Xeon X3210 2.13 GHz,RAM 有 4 GB。目前有兩個 500 GB SATA 硬碟,不過下星期應該會變成 4 顆,因為我打算用 ZFS 建 RAID-Z。灌的作業系統是 FreeBSD 7.2-RELEASE amd64,可惜 8.0-RELEASE 還沒出來。

這次我將過程紀錄下來,不過沒有 screenshots,有空再補。這篇很長,因為有不少設定檔和 shell script。

首先當然從光碟開機,很遺憾,沒有成功。從光碟載入核心之後,跑一陣子,然後會出現 READ_BIG 的錯誤。Timeout 幾次後,一直都無法進入 sysinstall。我就這樣跟他耗了很久。最後,有想出解決的方案:

  • 改用 DVD 灌
  • 用 FTP 透過網路安裝
  • 使用 PXE 開機
  • 外接一個光碟機

其實我發現只有 amd64 的 CD 會出現這個問題(我有燒過 CD、驗證 ISO,所以是光碟機的問題)。i386 就有成功跑到 sysinstall。但因為我必須使用 ZFS,i386 不是選擇之一。

第一個方案大概最方便,我最後也是用 DVD 灌成功的。第二個嗎,等 kernel 載入 RAM 之後趕快退出 CD,然後透過 FTP 安裝。第三個方案很麻煩,所以直接跳過。第四個方案要注意一下 BIOS 設定。

另外因為要用 ZFS,所以 RAID controller 沒有設定。只是用 JBOD 罷了。況且他功能也不強,好像只能做 RAID 1、RAID 0

繼續閱讀文章 »

作者為dennylin93

2009/10/16 at 10:10 下午

PuTTY 設定

leave a comment »

雖然在家裡已經改用 FreeBSD 當 desktop,terminal 都用 ROXTerm,但學校還是會碰到 Windows,所以 SSH 都是靠 PuTTY。把一些常用的設定紀錄下來。

通常用的設定是將 Window/Appearance 底下把字體設成「細明體」、大小設為「18」,然後選 ClearType。細明體是為了中文,字體大小是因為我長時間盯著螢幕,字大一點眼睛比較不會累。最後 ClearType 會讓字變得好看一點。

putty_window-appearance

Window/Appearance

接下來就把 Window/Translation 的編碼設成 UTF-8。Big5 已經沒在用了。

putty_window-translation

Window/Translation

Connection/Data 裡設一下 username,以後登入就不用每次打了。

putty_connection-data

Connection/Data

另外,要鑽防火牆的話 Connection/ProxyConnection/SSH/Tunnels 要改一下。Connection/SSH/X11 有用到再啟動。

設完別忘了 save 就好了。

PuTTY Tray 也可以試試看。

星期一就要段考了,最近考試好多。今天社課展示了一下 screen、Vim、mutt、ZFS 的功能。

作者為dennylin93

2009/10/09 at 9:20 下午

學習 FreeBSD

leave a comment »

因為社課的關係,所以整理了這些資料。過去幾年中一直都在接觸自由軟體,而最近一整年幾乎都環繞在 FreeBSD 周圍。因此,我整理了一些我看過且覺得不錯的文章、說明文件。

一開始學習 FreeBSD 可能會有點不習慣 console 和作業系統。原因是 Unix 的理念是「keep it simple」。作業系統只會灌必備的東西,其他的都留給使用者。最大的好處是彈性非常大、且不會浪費系統資源、穩定度與效能也超出其他作業系統很多。

第一個當然是 FreeBSD 的使用手冊。從最基本一步一步的安裝到進階的網路設定、網路服務、資訊安全、虛擬化、RAID、除錯都有完整的說明。FreeBSD Handbook 同時也是我在網路上看過最好也是最完整的說明文件。其他 open source projects 和 proprietary 方案都無法與之相比。

使用手冊我強烈較建議看英文版,雖然有中文版。

FreeBSD Handbook:英文中文

下面有一些文件、投影片連結可能有問題,這頁有最新的連結。

我個人建議的學習路線:

  1. 先看完使用手冊 1、2 章,並且將一台電腦灌好,灌一次大概不會記得,建議陸續灌個 5~10 次,我也寫了一篇灌 FreeBSD
  2. 看使用手冊第 3 章熟悉一下 FreeBSD 的環境
  3. 接下來看 For People New to Both FreeBSD and UNIX 背一背基本指令,vi 可以先不學
  4. 看一下 FreeBSD 概論 當複習
  5. 之後看使用手冊第 4 章和 FreeBSD Ports 基礎篇,學會灌軟體
  6. 可以開始學 vi 和 Vim 了
  7. 學會更新和設定一些 ports
  8. 先上一下網路概論,接下來就可以開始架設網路服務
  9. 先學會架設 FTP 伺服器(Pure-FTPd 設定比 Apache 淺顯易懂,但 FTP 協定比較複雜一點)
  10. Apache + PHP + MySQL(理論上目前只會用到 Apache,PHP、SQL 需要一段時間才能學會)

暫時先這樣。之後再補齊網路服務、作業系統核心、world 以及其他進階設定的部分。

另外,可以看看交大的「計算機系統管理」、「計算機網路管理」。這兩個都不錯,不過最後先熟悉 FreeBSD 再看,否則會事倍功半。

ONLamp 也可以找到一些不錯的文章。

想學 vi 和 Vim 可以看 Editing Text 以及 yzlin@VIM: Hack Your EditorMake Your VIM & Screen Environment Comfortable

雖然 vi 和 Vim 對初學者不是很友善,但學會之後就會愛不釋手。有在寫 code 或 configuration 的人一定要學一學。有裝 editors/vim-lite 的話可以用 $ vimtutor 來學習(一個很好的方式)。

我的設定檔之後再想辦法貼上來。

除此之外,一些關於 FreeBSD 的文章:

作者為dennylin93

2009/10/02 at 8:15 下午

大工程

leave a comment »

最近實在是太忙了,連休息的時間都沒有。學校網路換成接到臺大好處是速度變 100 Mbps,缺點是我變得很忙…這週準備了所有伺服器的設定檔,不過可能要等到下星期才會用到。目前只有 126 網段還沒換過去。

這兩週花了不少時間在整理機房,因為實在太亂了。結果拔出了一堆沒用的線,也有一些機器要淘汰掉。目前只剩骨幹的機櫃沒整理完。我束線帶綁到快瘋掉。

換 IP、整理機房還算了,星期三晚上 DNS server 居然炸了。我原本要重開機,不過一直都沒起來,所以暫時用其他台代替。第二天去學校發現硬體壞掉了。現在我又要重灌一台了…

Mail server 還未完成,不過只差 quota、Sieve 和 webmail 的部分。希望能趕快上線。除此之外,logs 一團亂,應該找個時間來整理一下,備份也沒有做的很好。又要寫一堆 shell script 了…防火牆設定要重寫,還有很多文件要打。已經快崩潰了。

作者為dennylin93

2009/09/18 at 8:12 下午

張貼於附中時光, 隨筆

整天盯著電腦螢幕的心得

leave a comment »

暑假又過完了,明天要開學考。這次暑假學了不少(不過也很雜),只是整天盯著電腦螢幕眼睛很累。幸好現在近視已經不會加深了。

先談 FreeBSD 以外的好了。之前花了幾天看 LaTeX,因為感覺很有趣,可以印出各種數學式子。他最大的功能其實是排版,可以用來弄文章、書之類然後轉成 PDF、PS 等格式。網路上有一本叫 The Not So Short Introduction to LaTeX2e,我幾乎都是看這本學的(此書的作者同時也是 RRDtool 與 MRTG 的作者)。裡面寫的還不錯,很多重點都有涵蓋到。

在 FreeBSD 用 LaTeX 感覺比 Windows 方便多了。用 Ports 安裝不用在下載 MiKTeX 之類的軟體。至於編輯器目前是用 Texmaker。會看 LaTeX 的原因也是因為想整理出一本 FreeBSD 的文件,不過沒做到。現在大概要等學測、指考考完了。

暑假幾乎都在忙郵件伺服器和防火牆。暑假也因此買了 The Book of PostfixThe Book of PF。防火牆已經架好了,也放上主幹,只是規則沒有完全寫好。這次還是用 FreeBSD 架,雖然又 pfSense 之類的方案,但沒有用。其實比想像中簡單。系統準備好之後在 kernel 中加入 PF、ALTQ 的選項以及 device if_bridge。之後 /etc/pf.conf 寫一寫就好了。除了過濾的規則之外,最大的變化應該是將 states、src-nodes、frags、table-entries 調大。 其實到目前為止還沒看過這些超過預設值(最多有過 7000 多個 states),但還是調大一點比較安全。

放上骨幹之後就加了一些軟體可以除錯、看流量、產生圖形。最基本當然有 pfctlpflogtcpdump。額外裝了 sysutils/pftopnet-mgmt/iftopnet/nload 來作為即時觀測。圖形則是加了 net-mgmt/mrtgsysutils/pfstat。MRTG 純粹只有流量,但 pfstat 有關於 PF 的資料。至於實際紀錄總流量則是使用 net-mgmt/bandwidthd

架設郵件伺服器困難度則是防火牆的好幾倍。用 Postfix、Dovecot 設定還算淺顯易懂(幸好不用看 Sendmail 的設定檔)。最麻煩的是要建立各種防止垃圾信件的方法,光是這個就不知道花了幾天的時間。最基本的是從 SMTP 連線中強迫 client 遵守 RFC,如:必須 helo/ehlo hostname、使用 FQDN 等。接下來就檢查 SPF,因為這樣可以避免有人偽裝成 server 亂發垃圾信件(像某某 IP 假冒 Gmail)。現在我也在學校的 domain 上加了「v=spf1 ip4:140.122.126.2 ip4:140.122.126.3 ~all」。還可以用 pcre 過濾 header 和 body,不過現在規則完全是空的。

剩下的方式都比較耗時間或系統資源。建立連線時,用 DNSBL 可以查詢該 IP 是否有不良紀錄,若有的話可以結束連線,不接收任何信件。主要的黑名單有 CBL、SpamhausSORBSSpamcopNJABL。其中 CBL 與 Spamhaus 擋掉最多,SORBS 與 Spamcop 其次而 NJABL 幾乎沒有(統計數字的時候我有調整使用順序)。其實 DNSBL 不會太耗資源、時間,因為只是用 DNS lookup。Greylisting 據說可以退掉不少 spam。用的方式是第一次收到信件會退信,標為 temporary failure。根據 RFC,temporary failure 的時候 MTA 必須再試著寄信。第二次收到信才會收下。電子郵件會被紀錄,這樣以後就不用再被退信了。當然有些可以列入 whitelist 中。整體而言第一次發 email 會被 delay 大約 5 到 20 分鐘,很少超過半小時。因為平常發 spam 他不會勤勞到寄第二次,所以可以退掉一些垃圾信件。

最後(應該說是不耗 CPU 資源中的最後一個方式),Postfix 有 address sender verification。這個功能會檢查 sender 的 email 是否可以收信,若可以的話才會把信件收下。為了省時間只有一些 domain 才會被 verify,驗證完之後也會將 email 存入資料庫,以後就不必再檢查。這也是一個有效的方式,不過通常會 delay 10 秒左右。

現在只剩下過濾信件內容了。主要用 SpamAssassin 過濾內容,然後用 ClamAV 掃毒。另一個方案是 amavisd-new,整合了 SpamAssassin 和其他軟體。

對了,我差點忘了 OpenBSD 的 spamd。這個是跟 PF 整合的軟體,可以 tarpit 和 greylist。不過既然已經有 mail/postgrey 做 greylisting,沒有必要再弄一次,目前主要用途是 tarpitting。用了 uatraps 和 nixspam 這兩個黑名單來檔 spammers。這個 IP 數量也相當驚人,目前 uatraps 有接近 700000 個 IP。若 IP 有被列入黑名單,PF 會將連線交給 spamd,一次只發送 1 byte,跟 block 掉他差不多。

Spam 到此差不多了。剩下的幾乎是 Dovecot 設定、建立 SQL 帳號之類。SQL 其實很簡單(之前以為很難)。Dovecot 改的設定比 Postfix 少很多,幾乎用預設就可以了。主要的差別應該是使用者從 SQL 讀取,PAM 可以註解掉。目前只剩 LDA、quota、sieve、trash 一些 plugin 沒弄好。

比較擔心的是現在我用的這台硬碟空間非常小,可能要移到別台上面。

The Book of Postfix 感覺還不錯,各方面講的都很詳細。特別是有幾章特別分析 Postfix 內部如何運作。我覺得這個很重要。其他像設定的部分,則是先講理論、原理,然後下一張才是實做。這與其他電腦書差異較大,但也因此而能夠徹底理解所有的設定。書裡的例子都十分完整,包括 SQL、SASL、TLS。最後還有一章特別寫用 LDAP 架設郵件伺服器。

講缺點的話當然還是有。最大的應該是我用的軟體跟他不太一樣。SASL、IMAP 我都是用 Dovecot,因為設定淺顯易懂,功能也很強大,有內建的 SASL 也十分方便。書則是用 Cyrus、Courier IMAP。另外一點是書有點舊,某些設定已改變了,不過這倒不用太擔心。只要設定前有參考 postconf 的 man page,上面都有列出舊版本與現在版本的設定。最後一個缺點是有一些錯誤(看 errata 感覺有點多)。不過整體而言,我覺得是一本非常好的電腦書,若要架設郵件伺服器可已參考看看。

The Book of PF 好像沒有那麼好,可已當做 PF FAQ 還有 man pages 的輔助,但沒有辦法取代他們。

暑假也花了不少時間在 FreeBSD Forums 上面。有很多問題幾乎都會有人回答,也有很多資料可以參考。

作者為dennylin93

2009/08/30 at 9:17 下午