Part 01.什么是rsyslog
作为一个功能强大和高度配置化的系统日志守护进程,rsyslog可以在日志服务器或日志客户端这两种不同的环境中运行。作为日志服务器,rsyslog可以从网络中的其他主机收集日志数据;作为日志客户端,可以过滤并发送内部日志消息至可路由的远程rsyslog服务器。
以下是rsyslog的一些关键特性:
- 多线程支持:rsyslog提供多线程支持,以实现更高的并发处理能力。
- 多协议支持:rsyslog可以使用UDP、TCP、SSL、TLS、RELP等协议收集信息。
- 数据库集成:rsyslog能将日志数据存储在MySQL、pgsql、Oracle等多种数据库管理系统中。
- 强大的过滤器:rsyslog提供了强大的自定义过滤器,可以对日志信息进行过滤。
- 自定义输出格式:用户可以根据需要设置rsyslog的输出格式。
- 日志集中管理:通过rsyslog,用户可以进行日志集中管理。
- C/S架构:在rsyslog的客户端/服务器架构中,客户端会将其日志上传至服务器,用户可以通过查询服务端日志,实现对所有客户端日志的集中管理。
这些特性使rsyslog成为处理和管理系统日志的强大工具。
Part 02.rsyslog日志类型及等级
rsyslog日志类型用来定义日志消息的来源,方便对日志进行分类:
rsyslog日志等级定义不同消息的级别:
图片
Part 03.如何快速搭建rsyslog
为了将内部日志消息发送到远程rsyslog服务器,我们可以采用以下拓扑配置:
- 将IP地址为172.21.44.93的虚拟机配置为rsyslog客户端,用于发送日志消息。
- 将IP地址为172.21.44.245的虚拟机配置为rsyslog日志服务器,用于接收和存储日志消息。
通过上述配置,我们可以实现内部日志的集中管理和存储,以便进行后续的分析和监控。
图片
3.1 rsyslog日志服务端配置
- 检查是否安装了rsyslog服务
ps -ef | grep rsyslog
rsyslogd -v
- 编辑配置文件
vi /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
这个配置使rsyslog守护进程能够通过UDP端口514接收日志消息。UDP是一种速度比TCP更快的协议,但不具备TCP协议的可靠性。如果需要使用可靠的传输机制,可以设置在TCP端口514上接收日志消息。
需要注意的是,可以同时启用TCP和UDP来监听TCP/UDP连接:
$ModLoad imtcp
$InputTCPServerRun 514
图片
除了配置接收日志信息的协议和端口外,还需要创建日志接收模板,以告知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监听端口,可以看到类似下面的输出:
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守护进程正在监听相应的端口,并处于活动状态。
3.2 rsyslog日志客户端配置
- 安装rsyslog守护进程
在CentOS 7上,rsyslog守护进程已经预先安装。可以执行以下命令来验证rsyslog是否已安装到CentOS系统上:
# rpm -qa | grep rsyslog
# rsyslogd -v、
如果处于某种原因,rsyslog守护进程没有出现在系统中,可以使用以下命令来安装:
# yum install rsyslog
- 修改配置文件
用文本编辑器打开位于/etc路径下的rsyslog主配置文件:
# vim/etc/rsyslog.conf
开启文件用于编辑后,将IP地址替换为远程rsyslog服务器的IP地址:
*.* @172.21.44.245:514
该配置指示rsyslog守护进程将系统上各个设备的各种日志消息路由到远程rsyslog服务器的UDP端口514(IP地址为172.21.44.245)。
如果出于某种原因,需要更为可靠的协议TCP,可以如下配置:
*.* @@172.21.44.245:514
图片
3.3 编辑完配置文件后,重启守护进程使更改生效
systemctl restart rsyslog.service
- 验证远程日志记录
在rsyslog客户端上输入命令:logger -t kern -p err "addddddddddd",该命令将在客户端上创建一个带有kern类型和err等级的日志消息,内容为"addddddddddd"。
图片
rsyslog service查看日志信息,可以看到日志文件中有客户端发送的内容:
图片
Part 04.如何快速搭建到远程日志服务器的安全日记
为了提高安全性,可以通过使用TLS进行安全的远程日志记录。使用TLS进行安全的远程日志记录具有以下一些安全优势:
- 在网络传输期间,系统日志消息已加密。
- syslog发送方向syslog接收方进行身份验证,因此接收者知道与其通信的是谁。
- syslog接收方向syslog发送方进行身份验证,因此发送者可以验证是否确实发送给了预期的接收方。
- 双向身份验证可防止中间人攻击。
下面将使用两个不同的节点演示如何使用带有TLS证书的rsyslog进行安全的远程日志记录。这两个节点分别是client和server,client节点作为rsyslog客户端,server节点作为远程日志服务器。
4.1 生成CA证书
要创建用于将syslog安全转发到远程日志服务器的自签名证书,需要先安装certtool工具,它是GnuTLS的一部分:
yum -y install gnutls-utils
生成私钥,并设置权限以确保创建的密钥只对root用户可读:
certtool --generate-privkey --outfile ca-key.pem
chmod 400 ca-key.pem
创建自签名CA证书:
certtool --generate-self-signed --load-privkey ca-key.pem --outfile ca.pem
关于证书有效性,当该证书过期时,需要重新创建所有证书,我们可以设置一个比较长的时间3650天(大约10年)。
图片
如图所示,ca-key.pem是证书颁发机构的私钥,ca.pem是分发给其他节点的公钥。
图片
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
图片
完成上述操作后,日志服务器的密钥生成过程已经完成。证书颁发机构的私钥(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 分发TLS证书以启用安全的远程日志记录
接下来,我们将密钥复制到远程节点服务端node3。
在复制密钥之前,在服务器节点上创建一个目录rsyslog-key来存储这些密钥,将密钥从client复制到server。
4.4 服务器配置以安全转发系统日志
为了在服务端接受消息,需进行相应的配置:
在/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服务,检查服务状态:
systemctl status rsyslog.service
4.5 客户端配置以安全地接收日志消息
配置客户端实现将日志安全地传输到远程日志服务器,在客户端创建目录,存储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服务,检查服务状态:
systemctl status rsyslog.service
4.6验证远程日志记录
在客户端rsyslog client输入:logger "hello world",截图信息可知远程日志服务器接收到了客户端发送的消息。
图片
Part 05.结语
rsyslog是一个强大而安全的日志处理系统,被广泛用于不同Linux发行版中,如Ubuntu 14.04、CentOS 6及以后的版本。它提供了丰富的功能,可以从不同的源收集日志,并提供过滤和格式化日志的能力。
通过使用rsyslog,我们能够轻松管理和记录系统日志。rsyslog可以集中处理和存储登录认证、系统日志等重要信息,并将其发送到远程日志服务器上。这样做有助于减轻系统的负载并确保日志的集中管理。此外,通过rsyslog,我们可以随时获取最新的日志信息,以进行监控和分析,帮助我们了解系统的运行状况。
总的来说,rsyslog在日志收集方面提供了强大的功能,使我们能够更好地管理和利用系统日志。它是一个可靠且广泛使用的工具,有助于提高系统的安全性、可靠性和可管理性。