2012年8月11日 星期六

活用rsyslog結合MySQL 實現日誌集中控管


化零為整 透過web介面輕鬆管理
活用rsyslog結合MySQL 實現日誌集中控管

俗話說:「魔鬼都藏在細節裡。」這句話對系統管理而言尤為貼切,因為所有的關鍵線索都存在主機的Log資訊中,如何管理並快速分析Log檔案內的蛛絲馬跡,將是IT人員的首要工作目標。本文介紹如何利用開放原始碼套件rsyslog來建立一個中央控管式的Log儲存方案,有效地減輕管理人員的負擔,讓系統運作更順暢。

當系統發生問題時,管理人員第一件事即是查詢相關系統的資訊,期望從中找尋珠絲馬跡來釐清問題的所在。在入侵事件發生後,Log的記錄更是唯一能夠建構出事件來龍去脈的唯一線索,因此Log資訊的管理就成為系統管理上很重要的一個管理活動。

在一般系統內,Log資訊均是以檔案的形式儲存在本機上,如此不但在應用Log分析上會有很大的侷限,在實務上,駭客在入侵系統後通常會將相關的Log檔案清除,以隱藏入侵的相關資訊,讓系統管理者在後續追查上產生極大的困擾。

解決方案所需的套件


為此,本文將提供一個中央控管式記錄儲存方案,利用中央資料庫來儲存Log資訊,一旦系統產生Log資訊後,即會將相關Log資訊傳遞到後端的Log伺服器進行保存,以保證不會被惡意清除,並能提供更有效率的Log分析。

在本解決方案中,還提供一個Web管理介面軟體,幫助管理者更方便地管理Log資訊,其系統架構圖如下圖所示,而解決方案所需的套件則列於上頁表格之中。


▲rsyslog解決方案架構圖。

什麼是syslog 

syslog通常被稱為系統日誌,這是一種用來在網際網路協定(TCP/IP)的網路中傳遞記錄檔訊息的標準。syslog協定是一種主從式的架構(Client-Server),syslog Client端利用傳送出一個小的文字訊息(小於1,024位元組)到syslog Server端(通常為syslogd程式)。

syslog系統日誌訊息可以利用UDP協定和TCP協定來傳送。基本上,相關系統日誌資料是以明碼型態傳送。syslog的格式如下所示:



syslog格式定義共分為四個欄位:

1. 記錄欄位事件發生的日期與時間。
2. 記錄發生此事件的主機名稱(如上述的Spampc)。
3. 記錄啟動此事件的服務名稱(如上述的sshd)。
4. 記錄訊息的實際資料內容。

在說明過syslog的格式後,接著說明Linux系統下常見的Log檔案,如下表所示。

Linux系統內常見的Log檔案



syslog是以Facility與Level來定義事件的種類及嚴重等級,其中Facility指的是那些種類的事件(如ftp、mail等類型事件)。

Linux系統將事件類型區分成許多種類,如下表所示。

事件類型與相關說明 


Level則是用來描述事件嚴重的程度,可區分下列表中所示的嚴重級別(嚴重程度由低至高)。

事件嚴重級別說明 


簡介rsyslog伺服器 

rsyslog從2004年就開始進行開發,目的在於開發一個更強大的syslog伺服器來取代傳統的syslog伺服器,時至今日,大部分的Linux系統均已內建rsyslog來取代傳統的syslog伺服器。

與傳統的syslog伺服器相比,rsyslog具有下列的優勢。

1. 提供Multi-threading功能,處理效能比傳統的syslog伺服器更有效率。
2. 提供SSL加密功能,讓syslog資訊傳輸不再是明碼的形式,提升資料傳輸的安全性。
3. 提供資料庫輸出功能,可將syslog相關資訊儲存到資料庫伺服器上(如MySQL、PostgreSQL、Oracle等相關資料庫)。
4. 提供過濾功能,使用者可自行定義相關的過濾條件,從繁雜的記錄檔中取得符合的資訊。

rsyslog伺服器是一個模組化的架構,其架構圖如下所示。


▲rsyslog伺服器的模組化架構。


其中的INPUT Module是指定資料來源如何設定syslog的資料來源為檔案或從Socket而來,而Parse Modules提供針對所接收到的syslog資訊再設定過濾條件以取得更精確的資訊。

最後的Output Module則指定要將最後的syslog資訊儲存到那裡(如資料庫、檔案等等),簡而言之,rsyslog伺服器處理Log資訊的流程如下:

1. 選定syslog的資料來源。
2. 設定過濾條件,也可不設定。若沒有設定,即是將所有的資料都接收下來。
3. 決定syslog資料輸出儲存的地方。

在本解決方案中,為的是要將所接收到的syslog資訊傳遞至MySQL資料庫儲存,因此將只說明相關的模組。其餘的模組就請自行參閱其他文件。rsyslog提供的模組(Module)如下表所示。

rsyslog所提供的模組


安裝相關解決方案

由於rsyslog伺服器預設並未安裝支援MySQL資料庫的選項,所以要重新以原始碼編譯(記得事先移除系統預設的rsyslog套件)。

可利用wget指令至下列網址下載相關的原始碼:



首先,安裝rsyslog伺服器所需的程式庫。先安裝libestr:



接著,繼續安裝libee套件。




最後,再來安裝rsyslog伺服器。



安裝成功之後,在<原始碼目錄>/plugins/ommysql下的createDB.sql檔案有記錄著需建立的資料庫表格名稱。

依檔案內容建立相關的資料庫表格,建立完成後,接下來說明rsyslog伺服器的組態檔(/etc/rsyslog.conf)的設定說明,如下表所示。

rsyslog組態檔設定說明


接下來設定rsyslog.conf,為rsyslog伺服器加上MySQL功能,在「/etc/rsyslog.conf」組態檔中加入以下幾行設定,如下圖所示:




▲在「/etc/rsyslog.conf」組態檔內加入兩行設定。

本例是將所有產生的Log記錄置入位於本機的MySQL資料庫中,而名稱為syslog的資料庫。

在設定完成後,利用指令「/usr/local/rsyslog/bin/rsyslogd -f /etc/rsyslog.conf」來啟動rsyslog伺服器,如果一切正常,此時syslog的記錄資訊應該會即時地匯入資料庫中,如下圖所示。


▲syslog記錄資訊即時地匯入資料庫內。

將syslog的資訊匯入資料庫後,接著安裝一個好用的Web管理軟體LogAnalyzer,幫助管理者更便利的管理Log相關資訊。這裡就不多談如何編譯Apache伺服器,假設讀者已安裝好Apache且支援PHP及MySQL,並設定網站根目錄的位置在「/usr/local/apache2/htdocs/」。

然後,至「http//loganalyzer.adiscon.com/download/」網頁取得最新版本的LogAnalyzer軟體下載解壓縮完後,將/src的目錄移到網站根目錄上(在此為「/usr/local/apache2/htdocs」),再根據下列步驟進行安裝。

首先,在「/usr/local/apache2/htdocs」目錄下新增config.php。



接著,利用瀏覽器執行「http:///install.php」安裝程式進行安裝,步驟如下:



STEP 1:只是提示字串,提醒使用者。



STEP 2:驗證config.php檔案的權限,此檔案必須可讀寫。在設定完成之後,會將相關的設定檔寫入此檔案中。



STEP 3:設定頁面顯示的格式(如每頁顯示幾行等等),這裡要輸入資料庫的相關資訊,本例的資料庫名稱為Syslog,輸入帳號、密碼以及新建資料庫的表格(table)。



STEP 4:在資料庫內新建表格。



STEP 5:檢查資料庫的設定過程中是否正常。




STEP 6:確認資料庫的設定過程沒有問題之後,接著設定管理者帳號和密碼資訊。



STEP 7:設定資料庫相關資訊,如資料庫的主機位址、資料庫和表格名稱,以及資料庫登入的帳號與密碼等。





在安裝完成後,即可利用瀏覽器來瀏覽Log相關的記錄,如下圖所示。至此就完成了一個Web介面的Log管理系統。



結語 

在個人資料保護法中,明文規定須妥善備份軌跡資訊。所謂的軌跡資訊,係指個人資料在蒐集、處理、利用過程中所產生非屬於原蒐集個資本身的衍生資訊,其中最重要的即為Log檔案。

而利用本文所提供之中央控管式的資料庫Log管理方式,不但能有效地將Log資訊妥善備份,且利用資料庫管理方式還有另外一個優點,也就是能夠比傳統的檔案儲存方式更有效地運用Log資訊(輕易地利用SQL指令,即可取得內含惡意資訊的Log資訊),運用上更具有彈性。

轉載自《網管人》



沒有留言:

張貼留言