浅谈rsyslog配置和日志转发

开源 Linux
rsyslog是一个开源的日志处理程序,被广泛应用于Linux系统中以提供日志转发和接收功能。本文浅谈linux配置rsyslog以及日志转发。

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在日志收集方面提供了强大的功能,使我们能够更好地管理和利用系统日志。它是一个可靠且广泛使用的工具,有助于提高系统的安全性、可靠性和可管理性。

责任编辑:庞桂玉 来源: 移动Labs
相关推荐

2023-12-17 14:36:05

2011-06-30 09:30:57

rsyslogLinux日志红帽企业级

2021-04-27 09:45:33

Nginx日志运维

2011-11-21 15:44:46

管理服务器日志

2009-07-01 18:08:18

JSP页面跳转

2010-07-28 15:21:00

NFSSolaris

2020-08-31 07:00:00

Android安卓日志分析

2010-09-16 16:02:26

PPPoA配置

2020-06-11 16:35:02

filebeatlogstash前端

2012-09-06 09:31:14

PHPmysqlpdo

2009-06-23 14:54:07

配置ControlleVSTS2010

2010-09-02 14:39:34

2019-10-28 14:38:36

RsyslogCentOS8开源

2010-09-25 17:00:47

dhcp中继配置

2017-09-18 15:20:02

MySQL慢查询日志配置

2009-06-26 14:04:15

Quartz配置

2009-06-23 15:30:20

jBPMMySQL

2009-07-05 11:23:44

2009-07-03 18:07:31

Servlet的运行环

2018-04-26 09:33:16

点赞
收藏

51CTO技术栈公众号