twbsd.org
 
  Select Language: Home  SmbFTPD Forum 

書籍資料

ch00 序.htm

ch01 FreeBSD 簡介.htm

ch02 安裝 FreeBSD.htm

ch03 UNIX 系統入門.htm

ch04 使用者管理.htm

ch05 網路設定.htm

ch06 檔案系統管理.htm

ch07 系統安全.htm

ch08 編譯核心.htm

ch09 系統調校.htm

ch10 軟體安裝.htm

ch11 X Window 的使用.htm

ch12 NAT 及防火牆.htm

ch13 網頁伺服器.htm

ch14 網頁伺服器進階應用.htm

ch15 FTP 伺服器.htm

ch16 郵件伺服器.htm

ch17 郵件伺服器進階應用.htm

ch18 DHCP伺服器.htm

ch19 資料庫系統.htm

ch20 Samba 網路芳鄰.htm

ch21 NFS.htm

ch22 DNS 伺服器.htm

ch23 指令應用.htm

ch24 Shell Script.htm

cha1 附錄A etc目錄下的檔案介紹.htm

cha2 附錄B 製作 FreeBSD 安裝光碟.htm

cha3 附錄C 版權宣告.htm

 


View printable page

第十四章 網頁伺服器進階應用

網頁伺服器架設之後,世界各地的使用者都可以經由網際網路連到您的主機,如何維護網站安全是一大課題。管理者更需要知道網站的使用情形,系統資源、網路頻寬是否足夠。本章將說明網頁伺服器使用上常見的管理議題,並介紹一些好用的管理工具。讀完本章後,您將進一步了解下列主題:

  • 如何使用 SSL 建立安全的 HTTP 連線。
  • 使用密碼保護目錄存取權限。
  • 如何在一台主機上提供不同網址的網頁。
  • 如何管理一般使用者的個人網頁。
  • 加速 PHP scripts 的處理速度。
  • 分析網頁的使用情形。
  • 網站使用流量分析。

14.1 HTTP 安全與 SSL 協定

當我們使用網路服務時,經由網路傳送的資料都有可能被他人攔截竊聽。簡單的說,當您從網頁上輸入帳號密碼時,如果有人在您所使用的電腦和伺服器之間攔截,就可以輕易的從網路封包中竊聽到您所輸入的資料。

隨著網路的蓬勃發展,線上交易的使用量日益增加,對於資料的保護更是重要。如果一個線上交易的網站使用普通的 HTTP,則使用者輸入的帳號密碼、交易資料、信用卡號等等都有可能會外洩,更別說交易資料被假造的風險了。為了解決 HTTP 的網路安全,發展出許多加密、認證的機制。其中最常見的就是使用金鑰加密法的 HTTP over SSL (Secure Socket Layer),又稱為 HTTPS,目前國內許多網路銀行都是使用 HTTPS 作為交易安全的第一道關卡。

SSL 的加密方式是由伺服器端提供了一組加解密用的金鑰,在伺服器端所使用的是私密金鑰 (Private key),而客戶端所使用的是公開金鑰 (Public key)。在連線建立後,HTTP 伺服器會將公開金鑰傳給客戶端使用。公開金鑰加密過的資料只能由私密金鑰解密,在客戶端要送出資料之前,會先使用公開金鑰進行加密的動作,而伺服器收到資料後,會使用私密金鑰進行解密。

在 Apache 2 中,預設安裝即支援 SSL,我們只需產生一組金鑰,並設定啟動 SSL 即可。

14.1.1 產生金鑰

正確的憑證產生方法是先產生伺服器用的公鑰及 CSR (Certificate Signing Request),接著將 CSR 送給專門做憑證簽發的公正單位做簽章。或者,我們也可以自己做為一個憑證簽發單位,自己為自己簽發憑證。但由於我們自己產生的憑證不具公信力,所以使用者使用 HTTPS 連到網站時,會出現下列的警告訊息:

圖 14-1

這個警告訊息並不影響加密,不過如果您所架設的是商用網站,您還是得交由公正單位作簽證。

如果您要使用自我簽發的憑證,第一步是要產生簽發單位憑證,我們先建立一個目錄名為 ssl,並將產生的憑證放在該目錄下:

# mkdir ssl
# cd ssl
# openssl genrsa -out ca.key 1024
# openssl req -new -key ca.key -out ca.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taiwan
Locality Name (eg, city) []:Taipei
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Certificate Authority
Common Name (eg, YOUR name) []:MyCA
Email Address []:alex@alexwang.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:按 Enter 即可
An optional company name []:按 Enter 即可

# openssl x509 -days 365 -signkey ca.key -in ca.csr -req -out ca.crt
# echo "01" > ca.srl

我們在第二個 openssl 指令中必須輸入一些基本資訊,最後產生一個有效期限 365 天的憑證。接著,必須產生 Apache 伺服器用的憑證:

# openssl genrsa -out server.key 1024
# openssl req -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taiwan
Locality Name (eg, city) []:Taipei
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Web Team
Common Name (eg, YOUR name) []:www.alexwang.com
Email Address []:alex@alexwang.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:按 Enter 即可
An optional company name []:按 Enter 即可

# openssl x509 -days 365 -CA ca.crt -CAkey ca.key -in server.csr -req -out server.crt

同樣的,我們必須輸入關於這個憑證的一些資料,最後,我們使用之前所產生的憑證簽發一個有效期限 365 天的伺服器用憑證。必須注意的是,在 Common Name 必須輸入您的主機名稱,以避免連線時憑證名稱和網頁名稱不符的警告。另外,我們在產生憑證時,當 OpenSSL 要求輸入用來保護憑證的密碼時,我們都沒有輸入密碼。如果您輸入密碼,則以後 Apache 要啟動時都必須輸入密碼才可以啟動。

最後,我們將伺服器用的憑證複製到 Apache 的設定檔位置:

# cp server.crt /usr/local/etc/apache22/server.crt
# cp server.key /usr/local/etc/apache22/server.key
# chmod 400 /usr/local/etc/apache22/server.crt
# chmod 400 /usr/local/etc/apache22/server.key

最後,請將我們製作過程中的憑證刪除:

# rm -rf ssl

憑證製作完成後,我們就可以開始設定支援 SSL 的 Apache 了。

14.1.2 設定及啟動 HTTPS

首先,我們必須先修改 /usr/local/etc/apache22/httpd.conf 以使用 SSL 的設定檔:

# Secure (SSL/TLS) connections
Include etc/apache22/extra/httpd-ssl.conf

接著,我們必須先修改 /usr/local/etc/apache22/extra/httpd-ssl.conf 以設定 SSL,請先找到下列區段:

<VirtualHost _default_:443>

# General setup for the virtual host
DocumentRoot "/home/www"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog /var/log/httpd-error.log
TransferLog /var/log/httpd-access.log

我們必須修改 DocuemntRoot,並將它設為我們網頁根目錄,然後要修改 ServerName,將它設定為我們的主機名稱。

為了要該 Apache 啟動時可以支援 SSL,請在 /etc/rc.conf 中加入 Apache SSL 的設定:

apache2ssl_enable="YES"

最後,請重新啟動 Apache 即可:

# /usr/local/etc/rc.d/apache22 restart

接下來,您就可以使用 https://192.168.0.1 連到您的主機了。請注意,我們使用的連線方法是 https,而非 http。如果您連線的主機名稱和憑證產生的名稱不同,將會有名稱不符的警告訊息。

圖 14-2

14.2 對目錄設定密碼保護

在架設網站時,如果您有特殊需求,必須指定某個目錄只能由某些使用者才能存取,我們可以使用 Apache 內建的目錄保護功能,讓使用者必須輸入使用者名稱及密碼才能存取該目錄。

在開始設定目錄的保護之前,我們必須先修改 httpd.conf,允許使用者可以在網頁目錄中使用認證功能。首先 ,請編輯 /usr/local/etc/apache22/httpd.conf,找到網頁目錄設定的區段:

...
LoadModule auth_module libexec/apache2/mod_auth.so
...
<Directory "/home/www">
	Options Indexes FollowSymLinks MultiViews ExecCGI
	AllowOverride AuthConfig
	Order allow,deny
	Allow from all
</Directory>
...
AccessFileName .htaccess
...

我們必須先確定 Apache 有載入 mod_auth.so 模組。接著,我們在網頁目錄的區段中 AllowOverride 的部份設定了使用 AuthConfig。如果 AllowOverride 設為 None 表示不允許使用者變更目錄設定,設為 AuthConfig 表示可以使用 AuthDBMGroupFile、 AuthDBMUserFile, AuthGroupFile、AuthName、AuthType 等認證的功能。 另外,在 AccessFileName 中,我們設定了用來保護目錄的設定檔名稱,預設為 .htaccess。

Apache 允許使用者在目錄下放置一個檔案來控制該目錄的存取權限,預設是使用 .htaccess。 我們可以自行用文書軟體編輯一個檔名為 .htaccess 的檔案來設定檔案所在目錄的權限。假設我們要保護的目錄是 /home/www/private/ 這個目錄,請新增一個文字檔 /home/www/private/.htaccess,內容如下:

AuthName "管理專區" 
AuthType "Basic" 
AuthUserFile "/var/http.pw"
require valid-user

其中請注意各參數的大小寫。這裡我們設定儲存使用者帳號及密碼的檔案是 /var/http.pw

接下來我們就可以新增使用者及密碼了。Apache 用來新增密碼的指令為 htpasswd:

# /usr/local/sbin/htpasswd -c /var/http.pw username 
New password: 輸入 username 的密碼
Re-type new password: 再輸入一次

上述指令會建立密碼檔 /var/http.pw 並加入使用者 username。如果您還要再加入第二個使用者,不需要加參數 -c。

接著,我們使用使用瀏覽器連到該目錄時,將出現下列畫面:

圖 14-3

此時輸入你設定的使用者名稱及密碼即可。若輸入的帳號密碼正確,即可正常看到該目錄的內容,否則在輸入三次錯誤之後,將出現禁止存取的頁面。

小提示

在您通過身份認證後,瀏覽器會自動將身份認證的資料暫存起來,以便下次連線時使用。所以在通過認證後,您不會每次要連受保護的目錄時都要輸入帳號密碼。如果您將瀏覽器關閉後,下次再連到該頁面時,才會再被要求輸入密碼。

14.3 虛擬主機

如果您想要使用一台主機管理多個不同名稱的網頁,例如,www.alexwang.com 及 www.twbsd.org 全都連到同一台伺服器,我們可以經由 Apache 虛擬主機的功能,讓不同的網址秀出不同的網頁內容。其本上,就是在一台機器上設定多個主機名稱或 IP,並依不同名稱來決定其根目錄所在。當使用者連線到我們的主機時,每一個不同的名稱所看到的根目錄都不同。

要達到這樣的功能,我們必須先確定主機有多個 DNS 名稱,這樣別人打該主機名稱才會對應到你的 IP。假設你的主機 IP 是 111.222.78.9 ,上面有二個主機名稱,一個是 www.abc.com,另一個是 www.cde.net。 您必須先在 DNS 中設定讓這二個主機名稱都可以對應到 11.22.78.9 這個 IP。

在確認 DNS 設定沒問題後,我們就可以開始設定 Apache 虛擬主機的功能了。請編輯 httpd.conf, 以載入虛擬主機設定檔:

# Virtual hosts
Include etc/apache22/extra/httpd-vhosts.conf

接著我們修改 /usr/local/etc/apache22/extra/httpd-vhost.conf 加入下列設定:

# 設定使用名稱的虛擬本機
NameVirtualHost *:80

# 設定 www.abc.com 的管理者帳號、存放網頁的目錄及log 所在
<VirtualHost *>
	ServerAdmin jack@abc.com
	DocumentRoot /home/www/abc
	ServerName www.abc.com
	ErrorLog /var/log/abc_error.log
	CustomLog /var/log/abc_access.log common
</VirtualHost>
# 設定 www.cde.com 的資料
<VirtualHost *>
	ServerAdmin tom@cde.net
	DocumentRoot /home/www/cde
	ServerName www.cde.net
	ErrorLog /var/log/cde_error.log
	CustomLog /var/log/cde_access.log common
</VirtualHost>

做完上面的設定後,就可以重新啟動 Apache 了。如果你還有別的 Domain Name 指向 111.222.78.9 的話,例如 www.fgh.org ,但你並未設定其 Virtual Host 資料,Apache 將以第一個設定的 Virtual Host 資料為主。在這個範例裡,當你打 www.fgh.org 會連到 www.abc.com 的設定。

必須要注意的是,有些客戶端的連線軟體並不支援 Name-Based 的虛擬主機,要支援 name-based virtual host,客戶端必須送出 HTTP 的標頭,也就是瀏覽器必須支援 HTTP/1.1。不過,請放心,我們常用的 IE、Netscape、lynx 都有支援。

14.4 網頁記錄分析

在我們將所製作好的網頁放在網頁伺服器之後,我們會想知道每一個網頁的瀏覽次數、使用者的停留時間等等,以做為改善網頁的依據。這些資訊都可以從 Apache 的連線記錄檔中獲得,但由於 Apache 的連線記錄中,只有一筆一筆使用者瀏覽網頁的記錄,我們需要使用一些工具來分析記錄檔,讓這些記錄檔能更易於閱讀。

本章將介紹 Webalizer 這套軟體。Webalizer 會讀取 Apache 的連線記錄檔,並將分析結果存成網頁,讓我們可以經由網頁的圖形更輕鬆的了解每一個頁面的使用情形。由於 Webalizer 所進行的分析是經由讀取 log 檔,因此 log 檔的資料越多,分析出來的結果也就越詳盡。

我們使用下列指令安裝 Webalizer:

# cd /usr/ports/www/webalizer
# make install clean

在安裝完 Webalizer 之後,我們必須先做一些簡單的設定。在 /usr/local/etc/ 有一個 Webalizer 的設定檔範例 webalizer.conf-dist,我們先將它複製一份再開始編輯:

# cp /usr/local/etc/webalizer.conf-dist /usr/local/etc/webalizer.conf
# ee /usr/local/etc/webalizer.conf

以下我們將一一說明此設定檔的內容,如果您想要更改其中的設定,請將該行開頭的井字號移除再開始修改:

# 設定 Apache 連線記錄檔的位置。
#LogFile        /var/lib/httpd/logs/access_log
LogFile        /var/log/httpd-access.log

# 設定 log 檔的型式,Webalizer 除了 Apache 外,還可以支援分析 FTP 軟體
# 或 proxy 軟體 squid 的 log 檔。LogType 預設的值是 'clf',表示分析
# 網頁資料,你也可以設定為 ftp 或 squid。
#LogType	clf

# OutputDir 是我們想要輸出分析資料的位置。請設定為網頁根目錄下的某一個
# 目錄。例如我們的網頁根目錄是 /home/www,請先在該目錄下建立一個子目錄
# 名為 traffic,接著再設定 OutputDir 為 /home/www/traffic。
#OutputDir      /var/lib/httpd/htdocs/usage
OutputDir      /home/www/traffic

# HistoryName 可以讓我們設定 webalizer 所產生的歷史記錄檔的檔名。這個檔
# 可以用來產生 主要的 HTML 頁面 (index.html),我們不需要修改。
#HistoryName	webalizer.hist

# 由於我們可能會設定某一段時間自動將 Apache 的 log 壓縮或刪除。而
# Incremental 這個變數可以讓我們在產生分析資料時,只更新增加的部份
# 而分析過的資料就不再分析,以免覆蓋了舊有的資料。
#Incremental	no
Incremental	yes

# 若您設定 Incremental 為 yes,IncrementalName 可以讓您設定目前增加
# 的分析資料存放位置。
#IncrementalName	webalizer.current

# ReportTitle 是分析結果網頁的標題。在該標題後會加上您的主機名稱。
#ReportTitle    Usage Statistics for

# 設定您的主機名稱。
#HostName       localhost

# HTMLExtension 是所產生的 HTML 檔的副檔名。
#HTMLExtension  html

# PageType 可以讓您設定何種副檔名結尾的頁面要加入分析資料。因為在
# log 檔中有一些圖片,而這些圖版我們並不希望加入分析資料中,或者我
# 們也可以增加 PHP 頁面的分析資料。所以在這裡,我們加上一行用來分析
# PHP 頁面的設定。
PageType	htm*
PageType	cgi
PageType	php
#PageType	phtml
#PageType	php3
#PageType	pl

# 如果您希望只使用 https 才可以連到分析頁面,則將 UseHTTPS 設為 yes。
#UseHTTPS       no

# DNSCache 可以設定 DNS 快取的檔案名稱,在分析資料時,可能會一直需要
# 做 DNS 的分析,這個檔可以提高 DNS 查詢的效率。
#DNSCache	dns_cache.db

# DNSChildren 可以設定要使用多少 process 來做 DNS 查詢,預設是 0,表示
# 不查詢,我們可以設定的值從 1 到 100。最好不要設太多,以免消耗太多系統
# 資源。
#DNSChildren	0

# HTMLPre 是用設定每個 HTML 檔案開頭第一行要插入的字,最長 80 個字元。
#HTMLPre <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

# HTMLHead 可以讓我們設定 HTML 頁面 <HEAD></HEAD> 中間要插入的字。最長
# 也是 80 個字元。
#HTMLHead <META NAME="author" CONTENT="The Webalizer">

# HTMLBody 會取代在 HTML 頁面中的 <BODY>  這個標籤。可以讓我們設定網頁
# 的一些屬性。最長也是 80 個字元。
#HTMLBody <BODY BGCOLOR="#E8E8E8" TEXT="#000000" LINK="#0000FF" VLINK="#FF0000">

# HTMLPost 會將設定的字串插入 HTML 第一個 <HR> 標籤之後,最長也是 80 個
# 字。
#HTMLPost 	<BR CLEAR="all">

# HTMLTail 可以設定 HTML 頁面的結尾所要插入的字串。最長 80 個字元。
#HTMLTail <IMG SRC="msfree.png" ALT="100% Micro$oft free!">

# HTMLEnd可以設定 HTML 頁面的最後結尾所要插入的字串。我們最少要有
# </BODY> 和 </HTML> 這二個標籤,最長 80 個字元。
#HTMLEnd </BODY></HTML>

# Quiet 可以讓我們設定在分析時是否要輸出訊息,因為我們會使用 crontab
# 定時執行,所以不要輸出分析過程的訊息比較好。
Quiet		yes

# ReallyQuiet 可以設定檔有錯誤產生時,是否要輸出訊息。
#ReallyQuiet	no

# TimeMe 可以設定在分析之後是否要輸出時間。
#TimeMe		no

# GMTTime 可以設定是否要使用 GMT (UTC) 時間而非本地時間。
#GMTTime		no

# Debug 可以設定是否要輸出除錯訊息。
#Debug		no

# FoldSeqErr 可以讓 Webalizer 忽略讀取 log 檔的錯誤。
#FoldSeqErr	no

# VisitTimeout 可以設定 session 的到期時間,預設值是 30 分鐘。
#VisitTimeout	1800

# IgnoreHist 請保持 no。
#IgnoreHist	no

# Country Graph 是用來顯示分析資料中關於國家的統計資料是否要顯示。
#CountryGraph	yes

# DailyGraph 及 DailyStats 是設定是否顯示每日分析資料。
#DailyGraph	yes
#DailyStats	yes

# HourlyGraph 是 HourlyStats是設定是否顯示每小時分析資料。
#HourlyGraph	yes
#HourlyStats	yes

# GraphLegend 是設定是否要顯示彩色圖表。
#GraphLegend	yes

# GraphLines 是用來設定圖表的格線數量,最多 20。
#GraphLines	2

# "Top" 的選項是每一個分格表格中,要顯示多少筆前幾名的資料。
#TopSites        30
#TopKSites       10
#TopURLs         30
#TopKURLs        10
#TopReferrers    30
#TopAgents       15
#TopCountries    30
#TopEntry        10
#TopExit         10
#TopSearch       20
#TopUsers        20

# The All* 可以讓我們顯示所有 log 檔中有記錄的資料,而非只有前幾名而
# 已。如果設定了某一個 All 的選項,webalizer 將會為該設定新增一個頁面。
#AllSites	no
#AllURLs	no
#AllReferrers	no
#AllAgents	no
#AllSearchStr	no
#AllUsers       no

# Webalizer 會自動使用讓網址 /somedir/ 可以連結到 /somedir/index.htm
# 如果你想要設定讓除了 index. 結尾的網址有此效果外,還要讓其它網
# 址也有同樣效果,您可以在此設定。
#IndexAlias     home.htm
#IndexAlias	homepage.htm

# Hide*, Group*, Ignore* 及Include* * 可以設定讓 Webalizer 忽略
# log 中的關鍵字,讓 log 中某些記錄不要被加入分析資料中。例如
# 有的搜尋引擎會自動連到您的網頁來找資料,您可以設定忽略這樣的
# 連線。請自行參閱說明。
… 略 …
# End of configuration file...  Have a nice day!

接著我們必須依您的設定在網頁根目錄中建立一個資料夾以儲存 Webalizer 所產生的圖表,假設我們的網頁根目錄是 /home/www,並在其目錄下建立一個子目錄名為 traffic

# mkdir /home/www/traffic

緊接著我們就可以使用下列指令來產生統計圖表:

# /usr/local/bin/webalizer

因為我們在 webalizer.conf 中設定了所要使用的 apache 使用記錄的檔名及所產生的圖表存放位置,所以在執行 webalizer 時不必再加任何參數。如果您想指定使用其他的連線記錄檔來做分析,您可以在指令後面加上該記錄檔的檔名,例如:

# /usr/local/bin/webalizer /var/log/httpd-access.log

產生了圖表之後,我們就可以使用瀏覽器輸入 http://www.mydomain.com/traffic 連到該網頁。連到該頁面後,您可以看到下列畫面:

圖 14-5

我們可以看到八月份每天平均有 294 人造訪,該月共有 7945 人。點選了該月份後,可以再看該月份更詳細的資料。例如,一天中哪一個時間最多人造訪、哪一個網頁最點選最多次、使用者來源、進到本網站後第一個看的頁面是什麼等等。下圖為最常被點選的頁面統計:

圖 14-6

最後,為了讓分析圖表能定時自動更新,我們可以使用 crontab 每小時定期執行一次分析。

# crontab -e
13      *       *       *       *       /usr/local/bin/webalizer

在上述的 crontab 的設定中,我們讓系統在每小時的第 13 分時執行一次 webalizer,您也可以依您的需求調整更新的時間。存檔離開之後,crontab 會自動載入新的設定,如此一來我們就可以隨時擁有最新的統計資訊了。

14.5 MRTG 流量分析

我們除了可以使用 Webalizer 來了解網頁內容的使用情形外,網站管理者還必須知道目前網站頻寬是否足夠。如果您想要知道網站流量的使用情形,我們可以安裝 MRTG 這套軟體經由網頁來監看網路流量。MRTG 會去收取 SNMP (Simple Network Management Protocol) 所產生的資料,因此所要記錄的機器必須要安裝 SNMP。在你的主機上安裝 MRTG 後,你不僅可以收集自己的流量資料,也可以收集區域網路上其他可以接收到的 SNMP 資料。

14.5.1 安裝 SNMP

在安裝 MRTG 之前,我們先使用 ports 來安裝 SNMP:

# cd /usr/ports/net-mgmt/net-snmp
# make install clean

安裝完成後,我們必須要先新增一個可以讀取 SNMP 資訊的 community name。所謂的 community name 是一個明碼的字串,我們可以將它視為 management station 和 agent 之間的密碼,是 MRTG 和 net-SNMP 溝通時必須要先傳送的字串。我們可以依不同的網域或主機給予不同的權限,依 community name 的設定來決定不同權限。

一個網路元件可以有多個 community name,一般 SNMP Agent 所預設公開的 community name 是 public。我們不一定要將 community name 設定為 public,因為 public 是一般 SNMP 的預設值,為了安全的問題,我們不將它設為 public。這裡我們將設定 community name 為 mrtg,而且只有 read only 的權限。

要設定 community name 請先新增一個文字檔 /usr/local/share/snmp/snmpd.conf 並加入下列設定:

rocommunity     mrtg
syslocation     Office
syscontact      alex@alexwang.com

上述設定中,mrtg 為唯讀的 community name,Office 是您機器所在位置,而 syscontact 所接的字串是您的 Eamil。另外, 我們還必須在 /etc/rc.conf 中加入下列這一行:

snmpd_enable="YES"

接著,請使用下列指令啟動 SNMP:

# /usr/local/etc/rc.d/snmpd start

14.5.2 安裝 MRTG

我們使用 ports 來安裝 MRTG:

# cd /usr/ports/net-mgmt/mrtg
# make install

接著要產生 MRTG 的設定檔

# cd /usr/local/etc/mrtg
# rehash
# cfgmaker mrtg@alexwang.com >mrtg.cfg

這裡的 mrtg 是我們在安裝 net-snmp 時所設定的值。如果你使用錯的 community name,你可能會從要記錄的設備上得到錯誤回應。而 alexwang.com 是你所要記錄的主機位置。mrtg.cfg 就是所要產生的設定檔名。

如果您想要記錄多個主機,只要在 cfgmaker 時多加入主機名稱即可,例如:

# cfgmaker mrtg@alexwang.com public@ftp.alexwang.com >mrtg.cfg

這樣就會同時記錄上面二台主機的流量了。

產生基本的設定檔後,我們可以再編輯剛才產生的設定檔 ee mrtg.cfg,在檔案開頭的部份加入一些客製化的設定:

# 如果要使用中文的 MRTG 則加入下面這一行
Language: big5

# 設定你的 MRTG 要放在哪個目錄,應該要放在網頁可以
# 連結到的地方,我的網頁根目錄是 /home/www,所以我將
# MRTG 放在下面的目錄。
WorkDIR:/home/www/mrtg

# 預設的 MRTG 所產生的圖時間是由右到左
# 我喜歡由左到右,故加入下面這一行
Options[_]: growright

接著請建立一個你在 mrtg.cfg 中設定的 WorkDIR 的目錄:

# mkdir /home/www/mrtg

然後使用指令 indexmaker 來建立 MRTG 的首頁:

# indexmaker -title '流量統計' -output /home/www/mrtg/index.html mrtg.cfg

這裡的參數 -title 是該 index.html 檔的 title,而 -output 就是要輸出的檔案位置,預設是stdio(通常指的是螢幕) 。

輸出的檔案 index.html 你也可以使用其他的網頁編輯軟體再去修改美化它。接下來要將 MRTG 的一些圖片檔複製到 mrtg 的目錄裡:

# cd /usr/ports/net-mgmt/mrtg/work/mrtg-*
# cd images
# cp * /home/www/mrtg/

最後執行 MRTG:

# env LANG=C /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg

第一次執行上面的指令可能會有一些錯誤訊息,不要理它,因為是第一次執行 mrtg,所沒有一些舊的圖,只要再多執行幾次就好了。沒問題之後,使用指令 crontab -e 來 讓上述指令每 5 分鐘執行一次,加入下面這一行:

*/5    *    *    *    *    env LANG=C /usr/local/bin/mrtg  /usr/local/etc/mrtg/mrtg.cfg

現在你可以使用 http://yourserver/mrtg 來連去看看。

圖 14-7

最後別忘了移除安裝過程的暫存檔:

# cd /usr/ports/net-mgmt/mrtg/
# make clean
Top Ths file was last modified: 2008 March 30 00:47:18.

Copyright © 2002-2017 Wang, Chun-Pin from www.twbsd.org. All rights reserved.