作者:陳玲,單位:中國移動智慧家庭運營中心
rsyslog是一個開源的日志處理程序,被廣泛應用于Linux系統(tǒng)中以提供日志轉發(fā)和接收功能。本文淺談linux配置rsyslog以及日志轉發(fā)。
Part 01●??什么是rsyslog?●
作為一個功能強大和高度配置化的系統(tǒng)日志守護進程,rsyslog可以在日志服務器或日志客戶端這兩種不同的環(huán)境中運行。作為日志服務器,rsyslog可以從網(wǎng)絡中的其他主機收集日志數(shù)據(jù);作為日志客戶端,可以過濾并發(fā)送內部日志消息至可路由的遠程rsyslog服務器。
以下是rsyslog的一些關鍵特性:
多線程支持:rsyslog提供多線程支持,以實現(xiàn)更高的并發(fā)處理能力。
多協(xié)議支持:rsyslog可以使用UDP、TCP、SSL、TLS、RELP等協(xié)議收集信息。
數(shù)據(jù)庫集成:rsyslog能將日志數(shù)據(jù)存儲在MySQL、pgsql、Oracle等多種數(shù)據(jù)庫管理系統(tǒng)中。
強大的過濾器:rsyslog提供了強大的自定義過濾器,可以對日志信息進行過濾。
自定義輸出格式:用戶可以根據(jù)需要設置rsyslog的輸出格式。
日志集中管理:通過rsyslog,用戶可以進行日志集中管理。
C/S架構:在rsyslog的客戶端/服務器架構中,客戶端會將其日志上傳至服務器,用戶可以通過查詢服務端日志,實現(xiàn)對所有客戶端日志的集中管理。
這些特性使rsyslog成為處理和管理系統(tǒng)日志的強大工具。
Part 02●??rsyslog日志類型及等級?●
rsyslog日志類型用來定義日志消息的來源,方便對日志進行分類:
rsyslog日志等級定義不同消息的級別:
Part 03●??如何快速搭建rsyslog?●
為了將內部日志消息發(fā)送到遠程rsyslog服務器,我們可以采用以下拓撲配置:
將IP地址為172.21.44.93的虛擬機配置為rsyslog客戶端,用于發(fā)送日志消息。
將IP地址為172.21.44.245的虛擬機配置為rsyslog日志服務器,用于接收和存儲日志消息。
通過上述配置,我們可以實現(xiàn)內部日志的集中管理和存儲,以便進行后續(xù)的分析和監(jiān)控。
3.1 rsyslog日志服務端配置
- 檢查是否安裝了rsyslog服務
ps -ef | grep rsyslog
rsyslogd -v
- 編輯配置文件
vi /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
這個配置使rsyslog守護進程能夠通過UDP端口514接收日志消息。UDP是一種速度比TCP更快的協(xié)議,但不具備TCP協(xié)議的可靠性。如果需要使用可靠的傳輸機制,可以設置在TCP端口514上接收日志消息。
需要注意的是,可以同時啟用TCP和UDP來監(jiān)聽TCP/UDP連接:
$ModLoad imtcp
$InputTCPServerRun 514
除了配置接收日志信息的協(xié)議和端口外,還需要創(chuàng)建日志接收模板,以告知rsyslog守護進程如何記錄從其他客戶端機器接收到的消息。
使用文本編輯器打開/etc/rsyslog.conf文件,在GLOBAL DIRECTIVE塊之前添加以下模板配置。使用指令$template RemoteLogs指示rsyslog后臺進程將日志消息寫入獨立的本地日志文件/var/log/rsyslogTest中。
$template RemoteLogs,"/var/log/rsyslogTest/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log" *.* ? RemoteLogs
- 編輯完配置文件后,重啟守護進程使更改生效
systemctl restart rsyslog
可以使用netstat命令來驗證rsyslog守護進程是否正常工作,運行以下命令:
$ sudo netstat -tulpn | grep rsyslog
如果rsyslog守護進程正在使用UDP監(jiān)聽端口,可以看到類似下面的輸出:
udp 0 0 0.0.0.0:514 0.0.0.0:* 551/rsyslogd
udp6 0 0 :::514 :::* 551/rsyslogd
如果rsyslog守護進程被設置在TCP連接端口,可以看到類似下面的輸出:
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 1891/rsyslogd
tcp6 0 0 :::514 :::* LISTEN 1891/rsyslogd
以上輸出表明rsyslog守護進程正在監(jiān)聽相應的端口,并處于活動狀態(tài)。
3.2 rsyslog日志客戶端配置
- 安裝rsyslog守護進程
在CentOS 7上,rsyslog守護進程已經(jīng)預先安裝。可以執(zhí)行以下命令來驗證rsyslog是否已安裝到CentOS系統(tǒng)上:
# rpm -qa | grep rsyslog
# rsyslogd -v、
如果處于某種原因,rsyslog守護進程沒有出現(xiàn)在系統(tǒng)中,可以使用以下命令來安裝:
# yum install rsyslog
- 修改配置文件
用文本編輯器打開位于/etc路徑下的rsyslog主配置文件:
# vim/etc/rsyslog.conf
開啟文件用于編輯后,將IP地址替換為遠程rsyslog服務器的IP地址:
*.* @172.21.44.245:514
該配置指示rsyslog守護進程將系統(tǒng)上各個設備的各種日志消息路由到遠程rsyslog服務器的UDP端口514(IP地址為172.21.44.245)。
如果出于某種原因,需要更為可靠的協(xié)議TCP,可以如下配置:
*.* @@172.21.44.245:514
3.3 編輯完配置文件后,重啟守護進程使更改生效
systemctl restart rsyslog.service
- 驗證遠程日志記錄
在rsyslog客戶端上輸入命令:logger -t kern -p err "addddddddddd",該命令將在客戶端上創(chuàng)建一個帶有kern類型和err等級的日志消息,內容為"addddddddddd"。
rsyslog service查看日志信息,可以看到日志文件中有客戶端發(fā)送的內容:
Part 04●??如何快速搭建到遠程日志服務器的安全日記?●
為了提高安全性,可以通過使用TLS進行安全的遠程日志記錄。使用TLS進行安全的遠程日志記錄具有以下一些安全優(yōu)勢:
在網(wǎng)絡傳輸期間,系統(tǒng)日志消息已加密。
syslog發(fā)送方向syslog接收方進行身份驗證,因此接收者知道與其通信的是誰。
syslog接收方向syslog發(fā)送方進行身份驗證,因此發(fā)送者可以驗證是否確實發(fā)送給了預期的接收方。
雙向身份驗證可防止中間人攻擊。
下面將使用兩個不同的節(jié)點演示如何使用帶有TLS證書的rsyslog進行安全的遠程日志記錄。這兩個節(jié)點分別是client和server,client節(jié)點作為rsyslog客戶端,server節(jié)點作為遠程日志服務器。
4.1 生成CA證書
要創(chuàng)建用于將syslog安全轉發(fā)到遠程日志服務器的自簽名證書,需要先安裝certtool工具,它是GnuTLS的一部分:
yum -y install gnutls-utils
生成私鑰,并設置權限以確保創(chuàng)建的密鑰只對root用戶可讀:
certtool --generate-privkey --outfile ca-key.pem
chmod 400 ca-key.pem
創(chuàng)建自簽名CA證書:
certtool --generate-self-signed --load-privkey ca-key.pem --outfile ca.pem
關于證書有效性,當該證書過期時,需要重新創(chuàng)建所有證書,我們可以設置一個比較長的時間3650天(大約10年)。
如圖所示,ca-key.pem是證書頒發(fā)機構的私鑰,ca.pem是分發(fā)給其他節(jié)點的公鑰。
4.2 生成機器證書
在此步驟中,我們將生成服務器端(server)的私鑰和證書。--outfile反映了將要使用私鑰的服務器名稱,我們將server端名稱命名為node3:
certtool --generate-privkey --outfile node3-key.pem --bits 2048
通過私鑰獲取簽名請求,加載服務端私鑰node3-key.pem,并將該私鑰簽名到node3-request.pem:
certtool --generate-request --load-privkey node3-key.pem --outfile node3-request.pem
完成上述操作后,日志服務器的密鑰生成過程已經(jīng)完成。證書頒發(fā)機構的私鑰(ca-key.pem)將對即將使用的證書進行簽名。
certtool --generate-certificate --load-request node3-request.pem --outfile node3-cert.pem --load-ca-certificate ca.pem --load-ca-privkey ca-key.pem
4.3 分發(fā)TLS證書以啟用安全的遠程日志記錄
接下來,我們將密鑰復制到遠程節(jié)點服務端node3。
在復制密鑰之前,在服務器節(jié)點上創(chuàng)建一個目錄rsyslog-key來存儲這些密鑰,將密鑰從client復制到server。
4.4 服務器配置以安全轉發(fā)系統(tǒng)日志
為了在服務端接受消息,需進行相應的配置:
在/etc/rsyslog.config文件中輸入以下信息:
#將gtls驅動程序設為默認驅動程序
$ DefaultNetstreamDriver gtls
#證書文件
$ DefaultNetstreamDriverCAFile /etc/rsyslog-keys/ca.pem $ DefaultNetstreamDriverCertFile /etc/rsyslog-keys/node3-cert.pem $ DefaultNetstreamDriverKeyFile /etc/rsyslog-keys/node3-key.pem
#TCP偵聽器
$ ModLoad imtcp
#在僅TLS模式下運行驅動程序
$ InputTCPServerStreamDriverMode 1
$ InputTCPServerStreamDriverAuthMode anno
#在端口514上啟動偵聽器
$ InputTCPServerRun 514
重啟rsyslog服務,檢查服務狀態(tài):
systemctl status rsyslog.service
4.5 客戶端配置以安全地接收日志消息
配置客戶端實現(xiàn)將日志安全地傳輸?shù)竭h程日志服務器,在客戶端創(chuàng)建目錄,存儲ca.pem。
在/etc/rsyslog.config文件中輸入以下信息:
#tls protocol
$DefaultNetstreamDriver gtls
$DefaultNetstreamDriverCAFile /etc/rsyslog-keys/ca.pem $ActionSendStreamDriverAuthMode anon
$ActionSendStreamDriverMode 1
*.* @@172.21.44.245:514
重啟rsyslog服務,檢查服務狀態(tài):
systemctl status rsyslog.service
4.6驗證遠程日志記錄
在客戶端rsyslog client輸入:logger "hello world",截圖信息可知遠程日志服務器接收到了客戶端發(fā)送的消息。
Part 05●??結語??●
rsyslog是一個強大而安全的日志處理系統(tǒng),被廣泛用于不同Linux發(fā)行版中,如Ubuntu 14.04、CentOS 6及以后的版本。它提供了豐富的功能,可以從不同的源收集日志,并提供過濾和格式化日志的能力。
通過使用rsyslog,我們能夠輕松管理和記錄系統(tǒng)日志。rsyslog可以集中處理和存儲登錄認證、系統(tǒng)日志等重要信息,并將其發(fā)送到遠程日志服務器上。這樣做有助于減輕系統(tǒng)的負載并確保日志的集中管理。此外,通過rsyslog,我們可以隨時獲取最新的日志信息,以進行監(jiān)控和分析,幫助我們了解系統(tǒng)的運行狀況。
總的來說,rsyslog在日志收集方面提供了強大的功能,使我們能夠更好地管理和利用系統(tǒng)日志。它是一個可靠且廣泛使用的工具,有助于提高系統(tǒng)的安全性、可靠性和可管理性。