用Syslog記錄UNIX和Windows日志的方法
在比較大規模的網絡應用或者對安全有一定要求的應用中,通常需要對系統的日志進行記錄分類并審核,默認情況下,每個系統會在本地硬盤上記錄自己的日志,這樣雖然也能有日志記錄,但是有很多缺點:首先是管理不便,當服務器數量比較多的時候,登陸每臺服務器去管理分析日志會十分不便,其次是安全問題,一旦有入侵者登陸系統,他可以輕松的刪除所有日志,系統安全分析人員不能得到任何入侵信息。因此,在網絡中安排一臺專用的日志服務器來記錄系統日志是一個比較理想的方案。本文以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
在記錄目標前面加上“|”表示把接收到的信息交給后面的程序處理,這個程序可以是一個專門的日志處理軟件,也可以是一個自己編寫的小的腳本,舉例:
#!/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,服務端的配置完成。現在配置一下客戶端:
這里所說的客戶端,就是發送自己的日志到遠程日志服務器上的主機。
修改/etc/syslog.conf文件:
我們舉例你只要記錄系統登入登出日志到遠程日志服務器上,那么只需要修改以下一行:
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)
文件才幾十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上的系統日志都可以統一記錄到一臺日志服務器上輕松管理了。
關鍵字:Syslog、記錄、UNIX、Windows
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解