syslog詳解及配置遠程發送日誌和遠程日誌分類

1、日誌協議syslog

1.1、syslog簡介

完善的日誌分析系統應該能夠通過多種協議(包括syslog等)進行日誌採集並對日誌分析,因此日誌分析系統首先需要實現對多種日誌協議的解析。其次,需要對收集到的海量日誌信息進行分析,再利用數據挖掘技術,發現隱藏再日誌裏面的安全問題。

Syslog再UNIX系統中應用非常廣泛,它是一種標準協議,負責記錄系統事件的一個後臺程序,記錄內容包括核心、系統程序的運行情況及所發生的事件。Syslog協議使用UDP作爲傳輸協議,通過514端口通信,Syslog使用syslogd後臺進程,syslogd啓動時讀取配置文件/etc/syslog.conf,它將網絡設備的日誌發送到安裝了syslog軟件系統的日誌服務器,Syslog日誌服務器自動接收日誌數據並寫到指定的日誌文件中。

1.2、syslog日誌格式

syslog標準協議如下圖:
在這裏插入圖片描述

Syslog消息並沒有對最小長度有所定義,但報文的總長度必須在1024字節之內。其中PRI部分必須有3個字符,以‘<’爲起始符,然後緊跟一個數字,最後以‘>’結尾。在括號內的數字被稱爲Priority(優先級),priority值由Facility和severity兩個值計算得出,這兩個值的級別和含義見表1-1和表1-2。下面是一個例子:

<30>Oct 10 20:30:10 fedora auditd [1780]: The audit daemon is exiting

▶“<30>”是PRI部分,即Priority(優先級),取值範圍0~191。

▶“Oct 10 20:30:10 fedora”是HEADER(報頭部分)。

▶“auditd [1780]: The audit daemon is exiting”是MSG(信息)部分。

在PRI部分,該數值和Facility和Level有關,Facility是創建日誌的實體,比如由Kernel產生,還是由User產生,或者是Mail產生…而level可以看成是日誌級別。他們的關係可以利用公式推導:

Priority=Facility * 8 + Level

後臺監控程序會被分配一個facility值,而沒有分配到facility值的進程則會使用“local user”的facility值,比如很多網絡設備都會默認使用facility值“local user 7”來發送信息。

                                                             表1-1  Facility級別

在這裏插入圖片描述

從分類能看出來Syslog的Facility有一部分(序號16~23)是爲其他程序預留的,例如Cisco設備使用local4發送PIX防火牆的syslog日誌。

表1-2 日誌級別描述

在這裏插入圖片描述

1.3、rsyslog介紹

針對syslog協議的不足,rsyslog日誌協議應運而生,它提供了豐富的內容過濾和靈活的配置選項,多線程的syslogd功能,同一臺機器上支持多子rsyslog進程,可以監聽不同端口。除了繼續支持udp外,還添加了tcp進行傳輸的功能。在日誌傳輸安全方面,以前通過Stunnel解決了rsyslog傳輸數據加密的問題,目前最新的rsyslog版本自身就支持ssl加密技術保證安全,在近幾年發佈的所有Linux發行版中都切換成了rsyslog。在實際的使用過程中,我們可以通過查看配置文件和相應的日誌文件來使用Rsyslog。在數據庫支持方面,它廣泛支持各種數據庫,尤其對Mysql和Postgres數據庫支持的比較好。

rsyslog配置文件詳解:

#### MODULES ####               #定義日誌的模塊。
$ModLoad imuxsock             #imuxsock爲模塊名,支持本地系統日誌的模塊。
$ModLoad imjournal            #imjournal爲模塊名,支持對系統日誌的訪問。
#$ModLoad imklog               #imklog爲模塊名,支持內核日誌的模塊。
#$ModLoad immark               #immark爲模塊名,支持日誌標記。
# Provides UDP syslog reception   #提供udp syslog的接收。
#$ModLoad imudp               #imudp爲模塊名,支持udp協議。
#$UDPServerRun 514               #允許514端口接收使用udp和tcp轉發來的日誌。
# Provides TCP syslog reception       #提供tcp syslog的接收。
#$ModLoad imtcp              #imtcp爲模塊名,支持tcp協議。
#$InputTCPServerRun 514

#### GLOBAL DIRECTIVES ####    #定義全局日誌格式的指令。
# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog       #工作目錄。
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat  #定義日誌格式默認模板。
$IncludeConfig /etc/rsyslog.d/*.conf                     #所有配置文件路徑。
$OmitLocalLogging on                                      #省略本地登錄。
# File to store the position in the journal
$IMJournalStateFile imjournal.state

#### RULES ####
#kern.*                                  /dev/console
#記錄所有日誌類型的info級別以及大於info級別的信息到messages文件,但是mail郵件信息,authpriv驗證方面的信息和corn時間和任務相關信息除外。
*.info;mail.none;authpriv.none;cron.none      /var/log/messages

# authpriv驗證相關的所有信息存放在/var/log/secure。
authpriv.*                                /var/log/secure

#郵件的所有信息存在/var/log/maillog;這裏有一個“-”符號表示是使用異步的方式記錄
mail.*                                   -/var/log/maillog

#任務計劃有關的信息存放在/var/log/cron。
cron.*                                   /var/log/cron

#記錄所有的≥emerg級別信息,發送給每個登錄到系統的日誌。
*.emerg                                 :omusrmsg:*

#記錄uucp,news.crit等存放在/var/log/spooler
uucp,news.crit                            /var/log/spooler

#本地服務器的啓動的所有日誌存放在/var/log/boot.log
local7.*                                  /var/log/boot.log

#發送日誌,@表示傳輸協議(@表示udp,@@表示tcp),後面是ip和端口。
#*.* @@remote-host:514


2、 日誌採集和分析

再此環境中,我們利用rsyslog的客戶端分別把ssh、iptables等以及h3c交換機和路由器的日誌發送到rsysog的服務端,並在服務端配置存儲策略,把不同的日誌存放在不同的文件當中,本環境中以ssh日誌爲例。架構圖如下:

在這裏插入圖片描述

環境說明:

   H3C交換機IP:192.168.0.249;

   H3C路由器IP:192.168.1.1

   業務服務器IP:192.168.1.218;

   Syslog服務器IP:192.168.1.221;

信息級別高於等於info的日誌信息將會發送到syslog服務器上;

▶ 業務服務器配置

打開rsyslog的配置文件;

vim /etc/rsyslog.conf

在配置文件中我們可以看到默認有以下配置,這條配置就是把用戶認證所有級別的日誌都存到後面的路徑文件下;

authpriv.*                                              /var/log/secure

將記錄下來的日誌發送到rsyslog服務端,打開rsyslog配置文件看配置文件的最底部有以下內容;

# *.* @@remote-host:514

此處用於指定接收日誌的rsyslog服務器的協議、IP地址和端口號,此處用的tcp;

*.*@@192.168.1.221:514

注意:使用@代表走UDP協議,使用@@代表走TCP協議。

重啓rsyslog服務

systemctl restart rsyslog

▶ Rsyslog服務器配置

打開rsyslog的配置文件;

vim /etc/rsyslog.conf

把以下配置的註釋打開,下面分別有tcp和udp的配置,和客戶端保持一致,下面都開啓因爲路由器和交換機默認走的是udp協議;

Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

重啓rsyslog服務

systemctl restart rsyslog

配置完後,業務服務器的的日誌就可以發生到rsyslog服務端了。可以利用以下命令查看連接狀態。

lsof -i :514

命令輸出:

在這裏插入圖片描述

上圖用紅框圈起來的就是rsyslog和業務服務器建立的連接。

現在只是屬於把日誌接收過來並存放在默認路徑,如下圖:

在這裏插入圖片描述

服務端會根據產生日誌的設施和級別把日誌存放到不同的文件裏,我們發過來的是ssh日誌,默認就存在服務端的/var/log/secure文件裏。當然發過來的其他設施產生的日誌也會存到指定的文件裏面。

如果我們要想把發過來的ssh日誌存放到自己的指定的文件裏面,可以在/etc/rsyslog.d/目錄裏面新建一個文件,這個目錄是rsyslog的工作目錄。文件內容如下:

if $programname contains 'sshd' then -/var/log/remote_log/ssh.log
& ~

語法解釋:

   如果發過來的日誌“程序名”包含sshd,就輸入到ssh.log日誌裏面。

   什麼是程序名:程序名就是你這一類日誌是哪個服務產生的。

   &~表示不做後續的操作,日誌只輸入到ssh.log中。

▶ 結果

  1. 驗證方法:

在業務服務器上產生一條ssh日誌,可以利用ssh連接工具連接業務服務器,這樣就好產生一條ssh日誌,產生新的日誌就會讓rsyslog發送到服務端。

  1. 測試結果:

業務服務器已經把日誌發送過來,根據rsyslog的上述配置把sshd的日誌已經保存在了/var/log/remote_log/ssh.log的文件裏面,使用如下命令查看文件是否已經有了內容。

tail –f /var/remote_log/ssh.log

輸出結果如下:

在這裏插入圖片描述

文件裏面已經保存了業務服務器發過來的日誌。

說了這麼大篇幅,實際上工作當中只需要這麼幹。
syslog服務器端:192.168.8.111
第一步:修改相關配置文件
vi /etc/rsyslog.conf
放開行首的#

$ModLoad imudp
$UDPServerRun 514

然後在GLOBAL DIRECTIVE塊前追加以下的模板。

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *
*.* ?RemoteLogs
& ~

第二步:重啓

systemctl restart rsyslog 

第三步:非必須,驗證服務是否正常啓動

netstat -tulpn | grep rsyslog 

在UDP監聽端口下工作的rsyslog守護進程會有類似下面的輸出。

udp 0 0 0.0.0.0:514 0.0.0.0:* 551/rsyslogd
udp6 0 0 :::514 :::* 551/rsyslogd 

客戶端,需要發送日誌方
第一步,增加配置

vi /etc/rsyslog.conf 
 *.* @192.168.8.111:514 

第二步,重啓

 systemctl restart rsyslog.service 

第三步:開機啓動,非必須

systemctl enable rsyslog.service 

參考博客:

https://blog.csdn.net/qq_32488647/article/details/79866437

https://www.cnblogs.com/haimeng/p/10823699.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章