Friday, March 27, 2009

快速架設 FreeBSD -- 心得筆記

快速架設 FreeBSD -- 心得筆記
前言:

  最近開始嘗試在玩 FreeBSD 後...雖然一開始真的有點給它不太適應...不過在認真的接觸它之後...發現它有一樣東西讓我滿喜歡的...那就是 Port...本來一開始以為FreeBSD 上...所有東西都要自己一步一步慢慢 compiler...那裝到來不就會瘋掉...就在使用過 Port 的安裝之後...對它有了改觀...它有點類似 Linux 上的 APT Server...缺少什麼東西會自動幫你補上...這對於初學者是一項有利的工具...因此在這邊就以 Port 的安裝...來完成大部份的套件...當然也是個人學習 FreeBSD 的一些心得整理...下次要重裝一台Server的話...才不會找不到資料囉... 還有...個人對於FreeBSD也算是半知半解...如果有那裡寫錯的話...還請大家多多指教啦...

學習 FreeBSD 的參考網站(很多資料擷取自此...感謝前輩們的貢獻):
OHaHa's Study Diary : http://ohaha.ks.edu.tw/
苗栗大湖 FreeBSD : http://www.lab.mlc.edu.tw/
FreeBSD 的安裝與架設 : http://lin.center.kl.edu.tw/
FreeBSD 使用手冊 : http://freebsd.sinica.edu.tw/handbook/index.html



◎初學者應該會遇到的問題 :
※如何尋找 Port :
※如何重新啟動網卡 :
※如何重起 inetd :


◎開始架設 :
※透過/stand/sysinstall安裝CVSup and bash :
※Port Tree 更新 :
※使用者環境設定 :
※修改預設shell :
※架設Apache+MySQL+PHP :
※kernel 編譯(加入 Quota & NAT) :
※架設 Mail+Pop3+Quota :
※架設 NAT 及 Firewall Server :
※網路應用(一) Webmin :
※網路應用(二) Mrtg :
※網路應用(三) Openwebmail :  
※網路應用(四) phpMyAdmin :
※網路應用(五) SWAT(Samba Web Configuration Tool) :
※掃描工具 Nmap :

* 如何尋找 Port :

# cd /usr/ports
# make search key="內容"

* 如何重新啟動網卡 :

# /etc/netstart

* 如何重起 inetd :

# kill -HUP ` cat /var/run/inetd.pid `

* 透過/stand/sysinstall安裝CVSup and bash :

  CVSup這個程式,對於FreeBSD不論是軟體的安裝、系統更新,都與它密不可分。
其功用主要是更新軟體安裝時採用的port tree、及系統更新採用的source。

1.# /stand/sysinstall
2.選擇 Configure Do Post-install Configuration of FreeBSD 後設定 (以空白鍵選擇)
3.選擇 Packages Install pre-packaged softeare for FreeBSD 安裝軟體
4.選擇 FTP Install form an FTP server 採用FTP方式安裝。
5.選擇 URL Specify some other ftp site by URL 自訂ftp站台位置。
6.輸入自訂ftp站台位置。
 URL: ftp://freebsd.csie.nctu.edu.tw/pub/ports/
7.確認網路已經設定完成。
8.選擇 net Networking Utilities 網路程式。
9.選擇 cvsup-without-gui-16.1f cvsup程式。
 選擇完後請按(tab鍵)再按ok確認。
10.選擇 shells 。
 選擇 bash-2.05b.004
 擇完後請按(tab鍵)再按ok確認。
都確認 ok 之後...離開後即可開始安裝...


* Port Tree 更新 :

  完成cvsup安裝,接下來就是port tree的更新及系統升級了。
為了日後使用方便,且維持原有範例不變,將它複製到/usr/之下。
# cp /usr/share/examples/cvsup/ports-supfile /usr
修改ports-supfile
# vi /usr/ports-supfile
將其中預設的host改為想要的站台
*default host=freebsd.csie.nctu.edu.tw

開始更新 Port :
# cvsup -g -L 2 /usr/ports-supfile
以後有事沒事就可以來更新一下...或是寫個Crontab排程更新也是可以的...


* 使用者環境設定 :

中文顯示環境
要能夠顯示中文是很重要的...^^
以bash為例說明因為我用bash...QQ)

bash的相關設定檔
系統性的:/etc/profile
應該不會有使用者不想要顯示中文吧...所以設定在系統性的檔案,
# vi /etc/profile
在檔案中新增以下三行
LC_CTYPE=en_US.ISO8859-1 ; export LC_CTYPE
LC_ALL=zh_TW.Big5 ; export LC_ALL
LANG=zh_TW.Big5 ; export LANG
再加上:
PS1="[\u@\h \W]\\$ "
說明:
\u --> 顯示使用者帳號
\h --> 顯示系統的hostname(機器名)
\w --> 完整路徑
\$ --> 以#表示root,以$表示一般使用者
加上常用的 alias:
alias dir="ls -alh"
alias cls="clear"

存檔離開後...重新登入即可生效...



* 修改預設shell :

因為系統預設採用csh為root的shell,所以每次我們要用剛剛設定的bash,
還需要額外輸入指令 bash 來啟動bash shell,太麻煩了。

透過幾個步驟:
確認bash的執行檔絕對位置。
which bash --> 察看bash這個指令的位置,位於/usr/loca/bin/bash
利用vipw 指令修改/etc/passwd中root預設的shell位置。
從原先的預設的/bin/csh
變更為 /usr/local/bin/bash
或是用下指令的形式:
# pw usermod user -s /usr/local/bin/bash


* 架設Apache+MySQL+PHP :

最常用到且廣為人知的就是WWW,在FreeBSD架設WWW Server是很簡單的事情;
但是光是單純的靜態網頁,已經不能滿足一般人的需求,
取而代之的是動態頁面配合資料庫存取。
安裝順序 MySQL-->Apache-->PHP4

1. MySQL
# cd /usr/ports/databases/mysql323-server/
修改Makefile 中的CONFIGURE_ARGS;新增--with-charset=big5 。
# make install;make clean

2. Apache
# cd /usr/ports/www/apache13
# make install
Apache安裝完後先不make clean,因馬上要安裝Apache結合PHP4。

3.PHP4
# cd /usr/ports/www/mod_php4
# make install
選擇連結項目MYSQL,若已有勾選,則按OK安裝。
# make clean

4.後續設定
讀取php3檔案:修改Apache的設定檔httpd.conf。有關PHP4的模組。
在php4模組中新增對 .php .php3及.htm檔案的讀取。
# vi httpd.conf
找到這一部份,加上棕色的部分

AddType application/x-httpd-php .php .php3

5.啟動服務
# cd /usr/local/etc/rc.d/
# apache.sh ; mysql-server.sh
6.設定MySQL Password
# mysql mysql
mysql>UPDATE user SET password=password('新密碼') where user='root';
mysql>DELETE FROM user WHERE User = '';
mysql>FLUSH PRIVILEGES;
mysql>exit
完成後...測試是否需要Password
# mysql -u root -p

7. 測試是否正常運作
# cd /usr/local/www/data/
# vi phpinfo.php
phpinfo();
?>
打開Browser:
http://www.your.ip.add/phpinfo.php
如果能夠看到那就正常啦...


* kernel 編譯(加入 Quota & NAT) :

編譯 kernel 之前的動作
a.先做 kernel 的文字敘述檔
 # cd /sys/i386/conf
 # cp GENERIC FREEBSD
  // 保持GENERIC不變,以防不時之需..或許待會會用到..-___-||
  // 通常我們用大寫的host name表示kernel新的文字敘述檔名稱
b.做 kernel 的備份
 # mv FREEBSD /etc/
  // 因為一般備份/etc,常會忘了kernel
c.因為kernel的文字敘述檔一定要位於/usr/src/sys/i386/conf中,所以做一個link
 # ln -s /etc/FREEBSD ./
d.編輯 kernel 新的文字敘述檔
 # vi FREEBSD
  在最後面加入這幾行...以便打開Firewall and Quota 的功能

  options IPFIREWALL
  options IPFIREWALL_DEFAULT_TO_ACCEPT
  options IPFIREWALL_VERBOSE
  options IPFIREWALL_VERBOSE_LIMIT=10
  options IPDIVERT
  options QUOTA
e.做 config:
 # cd /usr/src/sys/i386/conf
 # config FREEBSD // FREEBSD 為我們先前編好的文字敘述檔名
f.接下來進行文字敘述檔相依性檢查...編譯及安裝
 # cd /usr/src/sys/compile/FREEBSD
 # make depend
 # make
 # make install

g .完成後先行重新開機...若成功開機...恭喜...
  這時別忘了做下面這一步驟..將不必要的檔案清除
 # cd /usr/src/sys/compile/FREEBSD
 # make clean
h.若很不幸的您在開機途中掛點...那可以用舊的kernel開機
 (1) lsmod //看現在所用的kernel
 (2) unload //把不能開機的(正確應該說是現行的)kernel unload
 (3) ls //看看現在有哪些檔案
 (4) load kernel.GENERIC //load原先FreeBSD預設的GENERIC kernel
 (5) boot //繼續開機
  檢查問題出在那...然後重新再來一遍



* 架設 Mail+Pop3+Quota :

Sendmail -->收信、發信 25 port (sendmail基本來說不用額外安裝)
pop3 -->取信 110 port

POP3 Server:
qpop3 -->freebsd最常用
# cd /usr/ports/mail/qpopper
# make install clean;
# vi /etc/inetd.conf
加入
pop3 stream tcp nowait root /usr/local/libexec/qpopper qpopper -s
然後把 inetd 重啟
# kill -HUP ` cat /var/run/inetd.pid `
進階:
# vi /usr/local/etc/qpopper/popusers
將禁制名單加入此檔案中,該帳號就無法用pop3的協定自遠端收信。
設定Quota :
# cd /etc
# vi fstab
加入棕色的部份
/dev/da0s2e /var/mail ufs rw,userquota 2 2
注意: 在這邊是 userquota ... 而如果是 Linux 的話...是 usrquota ...少一個字差很多囉...

修改 rc.conf 讓 Quota 一開機就啟動:
# vi rc.conf
加入:
check_quotas="YES"
然後把 inetd 重啟
# kill -HUP ` cat /var/run/inetd.pid `


* 架設 NAT 及 Firewall Server :

使用Firewall
有三個防護的要素:port, host, protocol
兩種基本Firewall種類:
1.filter packets
2.accounting,統計
IPFW這兩種都可作,可直接用在FreeBSD機器或當gateway router,保護LAN中的多部機器。
※最好在本機操作,以免出問題時而無法連線
【啟用Firewall】
在核心設定檔中加入以下options,並重編核心
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
或是不要重新編譯核心,而是利用/etc/rc.network script自動載入kernel module,在/etc/rc.conf加入幾個項目
※如果要用NATD,還是要重新編譯核心,因natd需要IPDIVERT這個option
# vi /etc/rc.conf
firewall_enable="YES"
firewall_type="open"
若沒有指定firewall_type,會使用預設編號65535的rule:deny ip from any to any
也就是重開機後,所有的網路連線完全被封住無法使用。而設定open就是讓封包通過,而不是block。
當設好/etc/rc.conf後,重開機或在本機執行
# /etc/netstart
會看見有哪些rule被啟用,像這樣
Flushed all rules.
00050 divert 8668 ip from any to any via de0
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
65000 allow ip from any to any
Firewall rules loaded, starting divert daemons:
現在可使用ipfw來設定rule,允許哪種traffic或檢視accounting information
【設定IPFW】
ipfw用來自packet filter或account system中add或delete規則(rule)
規則是由幾個部份組成
action: deny, allow
protocol: tcp, udp, all
address: from, to
幾個例子:
#/sbin/ipfw add deny tcp from badguy.com to any
#/sbin/ipfw add deny all from bad.ip.com/16 to www.anyplace.com 80
#/sbin/ipfw add allow all from goodone.bad.ip.com to www.anyplace.com 80
每條rule都有一個號碼,通常以100為一個編號間隔。依號碼順序套用。
檢視目前rule
# ipfw -a list
00050 62 4840 divert 8668 ip from any to any via de0
00100 0 0 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
65000 60 4484 allow ip from any to any
65535 2 356 allow ip from any to any
稍微解釋一下
第一欄:index號碼
第二、三欄:使用統計量,單位是packets/bytes
可在/etc/rc.conf指定數個不同的firewall_types
每個keyword有不同意思,可自/etc/rc.firewall中找到其意思
open:允許全部
closed:除了loopback,關閉所有的IP
client:設定rules,只保護這部機器
simple:設定rules,保護整個網路
unknown:除了65535這條rule,不載入其它rule
:從載入rules
平常用client或simple就夠用了
如果要較特殊的設定,可將rule寫在檔案中,如/etc/firewall.conf,將rule列於其中:
/sbin/ipfw add deny tcp from badguy.com to any
/sbin/ipfw add deny all from bad.ip.com/16 to www.anyplace.com 80
/sbin/ipfw add allow all from goodone.bad.ip.com to www.anyplace.com 80
/sbin/ipfw add 65000 allow all from any to any
變更firewall_type="/etc/firewall.conf"
下回重新開機或執行/etc/netstart會以100, 200, 300的編號順序載入/etc/firewall.conf中的規則。


* 網路應用(一) Webmin :

# cd /usr/ports/sysutils/webmin
# make install clean;
起動webmin==>
# /usr/local/etc/webmin/start
Browser:
https://browser:10000
如果您裝的時後有選擇SSL的話...才需要在這邊打 https


* 網路應用(二) Mrtg :

SNMP :
# cd /usr/ports/net/net-snmp/
# make install clean ;
啟動
# /usr/local/sbin/snmpd
net-snmp 的版本是 5.x 版的請注意
請自行新增一個檔案
# vi /usr/local/share/snmp/snmpd.conf
內容為:
rocommunity mrtg
(意思為只唯讀 snmp 資訊的 username)
然後重新啟動你的 snmpd
安裝MRTG :
# cd /usr/ports/net/mrtg/
# make install clean ;
建立MRTG設定檔
# cd /usr/local/etc/mrtg/
# cfgmaker mrtg@freebsd.commerce.com.tw > mrtg.cfg
* 在產生index.htm檔之前..別忘了在您的設定檔中加上一行 Workdir:完整路徑
ex:
Workdir: /usr/local/www/data/mrtg
# 如果要使用中文的 MRTG 則加入下面這一行
Language: big5
# 預設的 MRTG 所產生的圖時間是由右到左
# 我喜歡由左到右,故加入下面這一行
Options[_]: growright
然後使用指令 indexmaker 來建立 MRTG 的首頁:
# indexmaker mrtg.cfg > /usr/local/www/data/mrtg/index.htm
輸出的檔案 index.htm 你也可以使用其他的網頁編輯軟體再
去修改美化它。接下來要將MRTG的一些圖片檔複製到 mrtg 的目錄裡:
# cd /usr/ports/distfiles
# tar zxvf mrtg-2.9.25.tar.gz
# cd mrtg-2.9.25
# cp -rf images/* /usr/local/www/data/mrtg/
第一次執行mrtg
# /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg
(若有錯誤..別理他...多弄個一兩次就正常了)

用crontab定期執行 (每5分鐘執行一次)
# crontab -e
*/5 * * * * /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg
打開 Browser 測試 :
http://your.ip.add/mrtg/



* 網路應用(三) Openwebmail :  

# cd /usr/ports/mail/openwebmail
# make all install clean;
Browser:
http://your.ip.address/cgi-bin/openwebmail/openwebmail.pl
別懷疑...你已經裝好openwebmail 了...這個是個人認為最好裝的一個啦...


* 網路應用(四) phpMyAdmin :  
# cd /usr/ports/databases/phpmyadmin
# make install clean;
# mv /usr/local/www/data.default/phpMyAdmin /usr/local/www/data/phpmyadmin
# cd /usr/local/www/data/phpmyadmin
# cp config.inc.php.sample config.inc.php
# vi config.inc.php
修改成:
$cfg['PmaAbsoluteUri'] = 'http://www.yourip.com.tw/phpmyadmin';
$cfg['Servers'][$i]['auth_type'] = 'http'; // Authentication method (config, http or cookie based)?
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = 'Password'; // MySQL password (only needed
Browser:
http://your.ip.address/phpmyadmin



* SWAT(Samba Web Configuration Tool) :

# vi /etc/inetd.conf

#swat stream tcp nowait/400 root /usr/local/sbin/swat swat
將最後一行的 # 拿掉變成
swat stream tcp nowait/400 root /usr/local/sbin/swat swat
然後重起inetd
Browser:
http://your.ip.add:901/



* 掃描工具 Nmap :

# cd /usr/ports/security/nmap
# make all install clean;
操作使用 :
# nmap -v -sS -O www.doamin.com.tw
詳細部份可以只下 nmap 會有簡單說明...

No comments: