作者:顧翠文 mail: win2linux@163.com
著作權申明:只限於非盈利性網站BSS、BLOG轉載和收藏,未經允許,嚴禁用於商業用途。
在 比較大規模的網路應用或者對安全有一定要求的應用中,通常需要對系統的日誌進行記錄分類並審核,預設情況下,每個系統會在本地硬碟上記錄自己的日誌,這樣 雖然也能有日誌記錄,但是有很多缺點:首先是管理不便,當伺服器數量比較多的時候,登陸每台伺服器去管理分析日誌會十分不便,其次是安全問題,一旦有入侵 者登陸系統,他可以輕鬆的刪除所有日誌,系統安全分析人員不能得到任何入侵資訊。因此,在網路中安排一台專用的Log Service器來記錄系統日誌是一個比較理想的 方案。本文以FreeBSD下的syslog為例,介紹如何利用freebsd的syslogd來記錄來自UNIX和windows的log資訊。
一, 記錄UNIX類主機的log資訊:
首先需要對Freebsd的syslog進行配置,使它允許接收來自其他伺服器的log資訊。
在/etc/rc.conf中加入:
syslogd_flags="-4 -a 0/0:*"
說明:freebsd的syslogd參數設定放在/etc/rc.conf檔案的syslogd_flags變數中
Freebsd對syslogd的預設設定參數是syslogd_flags="-s",(可以在/etc/defaults/rc.conf中看到)
預設的參數-s表示開啟UDP連接埠監聽,但是只監聽原生UDP連接埠,拒絕接收來自其他主機的log資訊。如果是兩個ss,即-ss,表示不開啟任何UDP連接埠,只在本機用/dev/log裝置來記錄log.
修改後的參數說明:
-4 只監聽IPv4連接埠,如果你的網路是IPv6協議,可以換成-6
-a 0/0:* 接受來自所有網段所有連接埠發送過來的log資訊。
如果只希望syslogd接收來自某特定網段的log資訊可以這樣寫:-a 192.168.1.0/24:*
-a 192.168.1.0/24:514或者-a 192.168.1.0/24表示僅接收來自該網段514連接埠的log資訊,這也是freebsd的syslogd進程預設設定,也就是說freebsd 在接收來自其他主機的log資訊的時候會判斷對方發送資訊的連接埠,如果對方不是用514連接埠發送的資訊,那麼freebsd的syslogd會拒絕接收信 息。即,在預設情況下必須:遠程IP的514連接埠發送到本地IP的514,
在參數中加入*,表示允許接收來自任何連接埠的log資訊。這點,在記錄 UNIX類主機資訊的時候感覺不到加不加有什麼區別,因為UNIX類主機都是用 514連接埠發送和接收syslog資訊的。但是在接收windows資訊的時候就非常重要了。因為windows的syslog軟體不用514連接埠發送信 息,這會讓預設配置的syslogd拒絕接收資訊。筆者同樣在linux系統下用linux的syslogd來配置log伺服器,發現linux下的 syslogd就沒有那麼多限制,只要給syslogd加上-r參數,就可以接收來自任何主機任何連接埠的syslog資訊,在這方面來說freebsd的 預設配置安全性要比linux稍微高一點。
修改好syslogd參數後,我們需要修改一下/etc/syslog.conf檔案,指定log資訊的存放路徑,
比如你要記錄其他系統的遠程登陸登出資訊並指定日誌存放路徑,則需要修改以下行:
authpriv.* /var/log/testlog
這表示把系統的登入登出日誌(包括本機系統登陸登出日誌)存放到/var/log/testlog檔案中。
當然,這是最簡陋的做法,因為這樣會把所有伺服器的登陸登出資訊存放在一個檔案中,察看的時候很不方便,通常的做法是用一個指令碼,對接收到的資訊進行簡單的分揀,再發送到不同的檔案。
如下設定:
authpriv.* |/var/log/filter_log.sh
在記錄目標前面加上“|”表示把接收到的資訊交給後面的程式處理,這個程式可以是一個專門的Tlog軟體,也可以是一個自己編寫的小的指令碼,舉例:
#!/bin/sh
read stuff
SERVER=`echo $stuff |awk ‘{print $4}’`
echo $stuff >> /var/log/login_log/$SERVER.log
這個簡單的指令碼以IP作為分類依據,先用read讀取log資訊,用awk取出第四欄位(即IP地址或者主機名稱所在的欄位),以該欄位為檔案名稱存放該主機的日誌。
這 樣一來,來自192.168.1.1的log會記錄到192.168.1.1.log檔案中,來自192.168.1.2的log會被記錄在 192.168.1.2.log檔案中,分析和歸類就比較方便了。當然這是一個最簡單的例子,讀者可以根據自己的需求寫出更好的指令碼,甚至把log資訊分 類後插入資料庫中,這樣日誌的管理和分析就更方便了。
最後重啟一下syslogd服務,讓配置生效:
/etc/rc.d/syslogd restart
OK,服務端的配置完成。現在配置一下用戶端:
這裡所說的用戶端,就是發送自己的日誌到遠程Log Service器上的主機。
修改/etc/syslog.conf檔案:
我們舉例你只要記錄系統登入登出日誌到遠程Log Service器上,那麼只需要修改以下一行:
authpriv.* @192.168.10.100
這裡的192.168.10.100就是log伺服器的IP,“@”符號表示發送到遠程主機。
OK,重啟一下syslog服務:
Linux: /etc/init.d/syslogd restart
BSD: /etc/rc.d/syslogd restart
用logger測試一下是否配置成功:
logger –p authpriv.notice “Hello,this is a test”
到log伺服器上去看看,“Hello,this is a test”應該已經被記錄下了。最後在客戶機上登陸登出幾次,看看真實的authpriv資訊是否也被成功的記錄下。
二, Windows日誌的記錄
對 於UNIX類主機之間記錄日誌,由於協議、軟體和日誌資訊格式等都大同小異,因此實現起來比較簡單,但是windows的系統日誌格式不同,日誌記錄軟 件,方式等都不同。因此,我們需要第三方的軟體來將windows的日誌轉換成syslog類型的日誌後,轉寄給syslog伺服器。
介紹第三方軟體evtsys (全稱是evntlog to syslog)
這是一個非常小巧而且免費的第三方日誌記錄軟體,如下:
https://engineering.purdue.edu/E ... cuments/UNIX/evtsys
檔案才幾十K大小,非常小巧,解壓後是兩個檔案evtsys.dll和evtsys.exe
把這兩個檔案拷貝到 c:/windows/system32目錄下。
開啟Windows命令提示字元(開始->運行 輸入CMD)
C:/>evtsys –i –h 192.168.10.100
-i 表示安裝成系統服務
-h 指定log伺服器的IP地址
如果要卸載evtsys,則:
net stop evtsys
evtsys -u
啟動該服務:
C:/>net start evtsys
開啟windows組策略編輯器 (開始->運行 輸入 gpedit.msc)
在windows 設定-> 安全設定 -> 本地策略->稽核原則中,開啟你需要記錄的windows日誌。evtsys會即時的判斷是否有新的windows日誌產生,然後把新產生的日誌轉 換成syslogd可識別的格式,通過UDP 3072連接埠發送給syslogd伺服器。
OK,所有的配置windows端配置完成,現在配置一下syslogd的設定檔.
參數的配置和上面相同,
所不同的是evtsys是以daemon裝置的方式發送給 syslogd log資訊的。
因此,需要在/etc/syslog.conf中加入:
daemon.notice |/var/log/filter_log.sh
關於syslog 記錄裝置和記錄等級方面的知識可以參考syslog文檔。
OK,所有配置設定完成。
Linux 、BSD和windows上的系統日誌都可以統一記錄到一台Log Service器上輕鬆管理了。