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