2012年8月21日 星期二

自行架設LogAnalyzer日誌管理伺服器

自行架設LogAnalyzer日誌管理伺服器

新版個資法即將上路,各個企業必須及早因應,尤其是公司運作的日誌檔案須妥善保存備份以供隨時備查,因為未來企業必須自行舉證並未違反個資法。為此,建議各公司行號採用LogAnalyzer日誌分析套件來架設日誌管理伺服器,以維護公司自身的權益。

新版個人資料保護法於2010年4月通過後,法務部緊接著於10月27日在官方網站上公告了個資法施行細則草案(詳細內容請參考http://0rz.tw/XIlGs),同時進行為期14天的法案預告,若無關於草案中內容進行重大修改的話,將如期送至行政院進行審查。

其中,新版個資法施行細則修正草案條文中「第五條」(詳細內容請參考http://0rz.tw/uPuRh),增加了對「軌跡資料」的保護,所謂的軌跡資料指的是個人資料在蒐集、處理、利用的過程當中,所產生非屬於原蒐集個資本體的衍生資訊(例如日誌檔案Log Files),包括(但不限於)資料存取人之代號(帳號)、存取時間、使用設備代號、網路位址(IP位址)、經過之網路路徑等等,可用於比對、查證資料存取之適當性。

簡而言之,企業對於相關伺服器及設備,只要是與「個人資料」有牽扯到關係因而產生的「日誌檔案(Log Files)」,企業皆必須妥善保存備份以供隨時備查,也就是企業要「自行舉證」沒有違反個資法。

目前,市場上為了新版個資法的到來,各家廠商不斷推陳出新,各項產品如雨後春筍般湧出,以因應企業對於新版個資法的需求,然而相關設備及軟體對於一般中小企業來說,無疑多了一項管理負擔,IT預算部分可能也難以允許,此時可以嘗試使用LogAnalyzer日誌分析套件,這是一套後網頁呈現方式的Log分析軟體。

LogAnalyzer發展源由 

LogAnalyzer為Adiscon公司(http://www.adiscon.com)所發行,其主要功能為分析各種日誌檔(例如Syslog messages、Windows Events Log等等)的軟體套件,可以運作於Windows及Unix-Like作業系統上,例如FreeBSD、Linux等等,並且採用第三版通用公共授權(GNU GPLv3)為其授權方式,因此可以自由使用來進行企業中Log分析之用。

LogAnalyzer(http://loganalyzer.adiscon.com)一開始發布時並非使用此一名稱,而是採用「phpLogCon」的名稱進行發布,直到2010年時,該公司因為原本軟體名稱所帶來了一些困擾,例如名稱開頭「php」感覺此軟體的發展範圍被限縮了(其他程式語言的熱心開發者便不會加入),而「LogCon」則顯然是個無任何關聯意義的詞,同時為了避免相關的法律問題,最後決定採用開頭為其公司名稱,同時加上全新且顧名思義的名稱「Adiscon LogAnalyzer」,並且該公司承諾針對此軟體,將永遠採用GPLv3授權方式進行釋出(詳細內容可參考http://0rz.tw/Q4H19)。

因此,Adiscon於2010年3月時,在發布穩定新版本v3.0的同時,便正式將軟體名稱改名為「LogAnalyzer」(發行公告可參考http://0rz.tw/4Ow2C),屆至目前為止,最新穩定版本為v3.2.3(Beta版本為v3.3.0)。

LogAnalyzer為採用PHP程式語言所開發而成,可於網頁介面中查詢所收集到的相關日誌內容,例如Syslog、Windows Event Log、SNMP Trap等等。

簡而言之,只要系統支援網頁伺服器(例如Apache、IIS等等)及PHP語言便可快速建立,並且LogAnalyzer也支援使用者帳號控管機制(必須安裝資料庫)。

在分析所收集到的日誌(Log)時,可以透過讀取「檔案」的方式進行即時查詢(Real-Time),並且可以將收集到的日誌內容存放至資料庫(例如MySQL)內進行分析。

實作環境

本文實作將分為兩篇,第一篇也就是本文,將就採用FreeBSD和CentOS作業系統平台兩方面進行說明。

首先說明如何架設日誌伺服器(Syslog Log Server)的角色,以便擔任收集企業內部相關設備日誌資訊。

例如路由器(Router)、網路交換器(Switch)、防火牆(Firewall)等等便可以擔任Syslog Client的角色,將企業設備所產生的日誌(Syslog Log)即時發送到日誌伺服器上。

·FreeBSD 8.2作業系統
網頁伺服器Apache:apache-2.2.17_1
PHP程式語言:v5.3.5(擴充模組v1.4)
LogAnalyzer:v3.0.0

·CentOS 6.0作業系統
網頁伺服器Apache:httpd-2.2.15-5.el6.centos.i686
PHP程式語言:php-5.3.2-6.el6_0.1.i686
LogAnalyzer:v3.2.3

當然,也可以將Windows作業系統所產生的Event Log,交由LogAnalyzer進行分析查詢的動作。

之後管理者只要透過LogAnalyzer頁面,便可即時查詢企業各項設備運作情況,因此除了平時查詢及日誌存參備查外,LogAnalyzer也可以進行圖表分析和報表匯出的功能。


以FreeBSD為實作平台 

首先以FreeBSD為實作平台進行設定說明,使其成為日誌伺服器(Syslog Log Server),以便接收各項支援Syslog功能的Log Client設備,所傳送過來的Syslog日誌資訊。

接著,安裝屆時運作LogAnalyzer的環境。至於如何進行LogAnalyzer的初始化安裝和進階設定,由於與CentOS實作平台設定步驟相同,因此將於下一篇文章中合併統一進行說明。

FreeBSD作業系統在預設的情況下,便可以經由設定調整成為日誌伺服器(因為預設日誌服務,只收集本機的Log),緊接著調整及設定FreeBSD內建的Syslogd日誌服務,使FreeBSD主機搖身一變成為Syslog Log Server,以便收集相關設備所傳送過來的Syslog Log運作訊息,以下為此次實作網路環境:

·Log Server(FreeBSD):負責收集Log Client傳送過來的Syslog資訊
主機名稱:bsd.weithenn.org
網卡代號:em0
IP位址:192.168.1.10
Syslog服務:UDP協定/Port 514

·Log Client(Juniper SSG20):指定將設備產生的Syslog資訊傳送至Syslog Server
主機名稱:ssg20.weithenn.org
IP位址:192.168.1.20
Syslog服務:UDP協定/Port隨機(Random Port)

設定Log Client(Juniper SSG20) 

啟動Juniper SSG20小型防火牆設備的Syslog功能,以便屆時將設備產生的Syslog日誌記錄,即時傳送至指定的Log Server(也就是FreeBSD主機)上來進行日誌儲存及分析的動作。該設備啟用Syslog功能的設定步驟如下:

STEP 1:登入Juniper SSG20小型防火牆。

STEP 2:點選「Configuration」項目後,接著點選「Report Settings」子項目,最後點選「Syslog」。然後,勾選「Enable syslog messages」項目,並填入Syslog Server相關資訊,如IP/Hostname、Port等等,如下圖所示。待相關資訊填妥及勾選後,按下〔Apply〕按鈕。


▲啟用Juniper SSG20 Syslog功能(指定Syslog Server,成為Log Client)。

STEP 3:最後,完成Log Client(Juniper SSG20)Syslog功能啟用設定。

設定Log Server(FreeBSD) 

在設定主機名稱之前,先了解一下命名規則,請使用在「網際網路主機需求-應用程式與支援(RFC-1123)」中定義的任何標準支援字元,相關標準支援字元如下:

大寫字母A到Z
小寫字母a到z
數字0到9
連字號(-)

接著,修改FreeBSD主機設定檔「/etc/hosts」,以便後續修改日誌設定檔「/etc/syslog.conf」時識別Log Client之用。

設定完成後,先測試FreeBSD主機是否可以正確識別剛才設定的主機名稱(Log Client Hostname)。


▲修改FreeBSD主機設定檔,並測試能否正確解析所設定的主機名稱。

修改日誌設定檔(/etc/syslog.conf)
修改FreeBSD日誌設定檔「/etc/syslog.conf」,指定屆時所收集到從Log Client傳送過來的Syslog資訊內容應存放至何處,以下為日誌設定檔內容參數說明及相關用法:

+[Hostname]:指定此台主機名稱或設備傳送過來的日誌訊息,「採用」下一行設定的方式處理並指定存放處。
-[Hostname]:「排除」此台主機或設備所傳送過來的日誌訊息(也就是不收集)。
+@:指定本機(Localhost)產生的日誌訊息,採用下一行設定的方式處理並指定存放處,以便本機的日誌訊息混入Log Client日誌訊息中。
+*:所有設備的日誌存放至指定檔案中,當環境有多台主機,希望將所有設備日誌分開存放,並同時存放在同一個檔案時,便可使用此語法。
請勿使用底線(_)命名:主機名稱識別以及存放的檔案命名,請勿使用底線(_)進行命名,因為屆時將導致日誌無法寫入指定的檔案中。建議使用減號(-)代替。

以此次實作來說,修改後的日誌設定檔「/etc/syslog.conf」內容如下:


▲修改FreeBSD日誌設定檔內容,接收Juniper SSG20傳送過來的日誌訊息。

修改主機服務設定檔(/etc/rc.conf)
FreeBSD系統在預設情況下,便會啟動日誌服務(Syslogd),但啟動時是採用預設的-s參數。-s參數僅會處理本機日誌部分,不接收也不允許Log Client傳送日誌過來,因此無法成為Log Server。

所以,在此透過修改主機服務設定檔「/etc/rc.conf」,將啟動日誌服務的參數改為「-a」,並且指定Log Client的來源網段及Port號,以下為-a參數相關用法說明:

-a 192.168.1.0/24:514:僅接收192.168.1.x網段,且來源Port號為514的Log Client日誌訊息。
-a 192.168.1.0/24:*:僅接收192.168.1.x網段,且來源Port號為Any的Log Client日誌訊息。
-a 0/0:*:接收所有網段及Port號的Log Client傳送過來的日誌訊息,適用於必須接收多個IP網段需求的時候,便可採用此參數配合防火牆進行相關限制。

以此次實作的Juniper SSG20設備為例,啟動該設備的Syslog功能後,雖然可以指定Log Server的Port號為514,但本身在傳送日誌訊息時卻無法指定Port號(為隨機Port號)。


此時,FreeBSD主機便適合設定上述的第二種參數設定,其中「-4」參數表示僅僅啟動Syslogd服務的IPv4網路功能即可(因為預設會同時啟動日誌服務的IPv4及IPv6網路功能),所以FreeBSD主機服務設定檔「/etc/rc.conf」修改後內容如下:


▲修改FreeBSD主機服務設定檔,設定接收Log Client的來源網段。

檢查FreeBSD是否可接收Log Client日誌訊息
設定完成後,在重新啟動syslogd日誌服務之前,先建立剛才於日誌設定檔「/etc/syslog.conf」中,指定存放Log Client的日誌檔案(/home/log/ssg20.log),之後便可重新啟動日誌服務(表示開始接收Log Client的Syslog資訊),並且檢查syslogd日誌服務執行序,是否套用新設定的-a參數。


▲確認FreeBSD是否成為Log Server且服務運作正常。

日誌服務重新啟動成功後,可以在Log Client(Juniper SSG20)上進行相關操作,同時檢查FreeBSD主機,確認是否可以接收到Log Client(Juniper SSG20)設備傳送過來的日誌訊息。

從下列操作訊息可知,Log Client使用隨機Port號21918來傳送Syslog日誌訊息。


▲檢查FreeBSD主機能否正確接收Log Client所傳送過來的日誌訊息。

準備LogAnalyzer運作環境 

順利將FreeBSD主機設定為Log Server之後,接著準備LogAnalyzer的運作環境,也就是安裝Apache網頁伺服器和PHP程式語言。

其中必須注意的是,須正確載入GD、Pcre這兩個PHP擴充模組,以免LogAnalyzer統計分析圖表發生錯誤。如下圖所示便是因為PHP擴充模組的GD未正確載入(或者未安裝),而造成統計分析圖表無法正確顯示。


▲PHP擴充模組的GD未正確載入,造成統計分析圖表錯誤。

下列操作為安裝Apache、PHP、LogAnalyzer等相關套件,並且於相關安裝套件完成之後,使用「php -m」指令來查看PHP擴充模組(PHP Extension)是否正確載入。當Apache服務啟動後可建立test.php檔案,並於檔案內容中呼叫PHP資訊頁面,來詳細查看PHP擴充模組的載入情況和相關資訊,如以下二圖所示。


▲安裝相關套件,並確認PHP擴充模組載入情況。


▲確認PHP擴充模組GD、Pcre已正確載入。

接著,必須明確指定PHP程式語言中FreeBSD主機的時區,否則到時候LogAnalyzer網頁分析圖表也會發生錯誤。

下圖所示便是因為未指定PHP程式語言的主機時區,而導致分析圖表無法正確顯示,下列操作是將FreeBSD主機時區指定為「Asia/Taipei」。


▲指定PHP程式語言的主機時區。


▲未明確指定PHP程式語言主機時區,造成分析圖表無法正確顯示。

LogAnalyzer初始化前置作業
在準備開始初始化LogAnalyzer設定之前,先進行下列步驟以便後續LogAnalyzer初始化順利進行。若不想建立空白設定檔(config.php),複製「loganalyzer/include/config.sample.php」檔案至LogAnalyzer運作目錄下,也是可行的。


▲LogAnalyzer初始化前置作業。

至此,FreeBSD平台上的準備作業已經完成。由於LogAnalyzer的初始化安裝流程,以及進階設定調整步驟都一樣,因此待CentOS平台上準備作業完成後,將一併於下一篇進階設定文章中進行說明。

以CentOS為實作平台 

接著為CentOS作業系統進行設定,使其成為日誌伺服器(Syslog Log Server)的角色。從CentOS 6版本開始,日誌服務由舊版(CentOS 5.x)的syslog,改為rsyslog成為預設的日誌服務。

當連結到rsyslog(http://www.rsyslog.com)首頁後,將會感覺到網頁風格與LogAnalyzer首頁很相像,這是因為rsyslog也是由Adiscon公司所開發。rsyslog支援TCP/UDP通訊協定,並且除了將主機日誌資訊寫入檔案外,還能將日誌資訊配合適當設定之後,直接寫入至資料庫中(例如MySQL資料庫)。

關於rsyslog與MySQL資料庫,以及搭配LogAnalyzer的進階協同作業,在本文當中並不會提到,有興趣的讀者可以參考官網「http://0rz.tw/YTxsj」的說明。


同樣地,CentOS在預設的情況下只會收集本機的日誌資訊,需要透過調整日誌設定檔內容之後,才能使CentOS主機成為Log Server,以便收集相關設備所傳送過來的Syslog Log運作訊息,以下為實作網路環境:

·Log Server(CentOS):負責收集Log Client傳送過來的Syslog
主機名稱:centos.weithenn.org
網卡代號:eth0
IP位址:192.168.1.10
Syslog服務:UDP協定/Port 514

·Log Client(Juniper SSG20):指定將設備產生的Syslog傳送至Syslog Server
主機名稱:ssg20.weithenn.org
IP位址:192.168.1.20
Syslog服務:UDP協定/Port隨機(Random)

設定Log Server(CentOS) 

由於Log Client(Juniper SSG20)啟用Syslog功能,在剛才FreeBSD平台建置時已經說明過,因此便略過。緊接著,先修改CentOS主機設定檔「/etc/hosts」,以便後續修改日誌設定檔「/etc/rsyslog.conf」時識別設備之用。設定完成後,測試CentOS主機是否可以識別該設備主機名稱(Log Client Hostname)。


▲修改CentOS主機設定檔,並測試能否正確解析所設定的主機名稱。

修改日誌設定檔(/etc/rsyslog.conf)
修改CentOS日誌設定檔「/etc/rsyslog.conf」,首先啟用CentOS主機的UDP Syslog功能(註解二行設定),並且指定屆時收集到Log Client傳送過來的Syslog日誌內容,應該存放於哪個檔案中。以此次實作來說,修改後的日誌設定檔「/etc/rsyslog.conf」內容如下:


▲修改CentOS日誌設定檔內容,接收Juniper SSG20傳送過來的日誌訊息。

檢查CentOS是否可以接收Log Client日誌訊息
設定完成後,在重新載入rsyslogd日誌服務之前,先建立剛才於日誌設定檔「/etc/rsyslog.conf」中指定存放Log Client的日誌檔案(/home/log/ssg20.log)。若有開啟iptables防火牆功能,記得開啟UDP協定Port 514的規則,之後便可重新載入日誌服務。載入成功後,請查看CentOS主機是否開啟UDP Port 514。若有開啟,則表示設定成功。


▲確認CentOS是否成為Log Server且服務運作正常。

日誌服務成功重新載入後,便可以在Log Client(Juniper SSG20)上進行相關操作,同時檢查CentOS是否能夠接收到Log Client(Juniper SSG20)所傳送過來的日誌訊息。從下列操作訊息可知,Log Client使用隨機Port號23754傳送Syslog日誌訊息。


▲檢查能否正確接收Log Client傳送過來的日誌訊息。

準備LogAnalyzer運作環境

順利將CentOS主機設定為Log Server之後,接著準備LogAnalyzer的運作環境,也就是安裝Apache網頁伺服器和PHP程式語言。

下列操作使用YUM套件管理工具進行安裝Apache、PHP等相關套件的動作。可以在安裝套件完成後,使用「php -m」指令來查看PHP擴充模組(PHP Extension)是否正確載入。


▲安裝相關套件及確認PHP擴充模組載入情況。

或者建立test.php檔案,在檔案內容中呼叫PHP資訊頁面,以查看PHP擴充模組的載入情況,如下圖所示。


▲確認PHP擴充模組GD、Pcre已正確載入。

下載LogAnalyzer套件及初始化前置作業
由於LogAnalyzer並沒有收錄在YUM套件管理工具和相關軟體套件庫中,因此必須直接到官方網站下載最新穩定版本v3.2.3(v3-stable)。下載完成後,將Tarball檔案解壓縮,接著把解壓縮後的LogAnalyzer相關檔案複製到Apache網站的根目錄下。

在準備開始初始化LogAnalyzer設定之前,先進行下列步驟以便後續LogAnalyzer初始化順利進行。若不想建立空白設定檔(config.php),也可以複製「src/include/config.sample.php」檔案至LogAnalyzer目錄中。

倘若CentOS主機已啟用SELinux安全增強機制,記得進行調整SELinux檔案權限,以免LogAnalyzer初始化環境安裝檔案(install.php)無法運作。


▲LogAnalyzer初始化前置作業。

至此,在FreeBSD和CentOS作業系統平台之中,LogAnalyzer相關運作環境前置準備作業都已經完成。

在下一篇文章中,將會先說明LogAnalyzer的初始化環境安裝流程,以及後續的進階設定調整項目及步驟,例如關閉LogAnalyzer頁面中贊助區塊(Donate)、關閉Message自動彈出視窗功能、調整分析頁面筆數及字數截斷功能、LogAnalyzer網頁中文化等等,以便將LogAnalyzer進行客製化,調整為更適合貴公司使用的軟體套件。