rsyslog服务器搭建指导
更新时间: 2026/02/03
在Gitcode上查看源码

介绍

本文从rsyslog服务器搭建前的环境准备开始,详细介绍了如何配置rsyslog、生成TLS认证证书,并指出搭建过程中可能遇到的问题,旨在帮助读者快速在openEuler系统上部署rsyslog服务器。

一、搭建前环境准备

1、确认rsyslog的版本号

本指导基于openEuler系统搭建rsyslog服务器,使用rsyslogd -ver查看rsyslog版本,一般系统上都会自带rsyslog服务,确认rsyslog的版本号为8.2210.0以上。 若版本不符合要求,需要重新安装较新版本的openEuler系统(openEuler22.03SP3及以上的rsyslog版本号为8.2210.0以上)

2、确认rsyslog支持tls功能

检查/usr/lib64/rsyslog目录是否有lmnsd_gtls.so文件,若没有,需要通过openEuler官方https://www.openeuler.openatom.cn/zh/download/下载安装包 如果不希望整个系统进行重装,可以只安装tls的rpm包

rpm包安装方法

(1)上传iso文件

(2)解压iso文件(openEuler的iso文件名称以实际iso文件名称为准)

bash
mkdir /mnt/iso
mount -o loop openEuler-22.03-LTS-SP3-everything-aarch64-dvd.iso /mnt/iso
ls /mnt/iso/

(3)进入Packages目录并找到tls安装包

bash
cd /mnt/iso/Packages/
ls | grep syslog

(4)安装tls的rpm包(rpm包名称以实际安装包名称为准)

bash
rpm -ivh rsyslog-gnutls-8.2210.0-6.oe2203sp3.aarch64.rpm --nodeps

3、确认关闭SELinux

使用sestatus查看SELinux的状态,若为enabled,rsyslog监听非默认端口号(514)时会失败,因此在确认系统安全的前提下,将SELinux关闭

SELinux关闭方法

(1)修改SELinux配置文件

bash
vi /etc/selinux/config

SELINUX=enforcing修改为SELINUX=disabled

(2)重启系统

重启后查看SELinux状态,应为disabled

4、确认关闭防火墙

使用systemctl status iptables查看iptables服务的状态,若为active,会在报文传输过程中丢弃syslog日志包,因此在确认系统安全的前提下,将iptables关闭。

iptables关闭方法

(1)关闭iptables

bash
systemctl stop iptables

查看iptables状态,应为inactive

(2)如果系统重启过后无法接收到tls认证传输的syslog报文,可以尝试使用systemctl start iptables开启防火墙然后再使用systemctl stop iptables关闭防火墙

5、配置rsyslog服务器域名(可选,tls认证非强制要求syslog服务器必须使用域名)

(1)配置域名解析规则

1、配置域名解析规则文件

首先需要找一台域名服务器,修改域名服务器上/etc/named.conf文件,添加域名解析规则,其中xx.xx.xx.xx替换为实际syslog服务器的ip,两处ip需要一致

bash
zone "server.rsyslog.com" IN {
             type master;
             file "server.rsyslog.com.zone";
             allow-transfer { xx.xx.xx.xx;};
             allow-query {any;};
             allow-update { any; };
             notify yes;
             also-notify {xx.xx.xx.xx;};
};

然后在/var/named/目录下添加server.rsyslog.com.zone文件,文件内容如下所示:(文件名称以实际的syslog服务器域名为准,此处仅为示例,xx.xx.xx.xx替换为实际syslog服务器的ip)

bash
$TTL 600
@       IN      SOA     dns.server.rsyslog.com      dnsadmin.server.rsyslog.com. (
                                2015031288
                                    1H
                                    2M
                                    2D
                                    1D
)
        IN      NS      dns
        IN      NS      ns2
        IN      MX      10 mial
ns2     IN      A       xx.xx.xx.xx
dns     IN      A       xx.xx.xx.xx
mail    IN      A       xx.xx.xx.xx
www     IN      A       xx.xx.xx.xx
pop     IN      CNAME   mail
ftp     IN      CNAME   www

2、检查域名解析配置文件的格式是否正确,运行以下命令

bash
named-checkzone server.rsyslog.com server.rsyslog.com.zone

运行结果如果返回OK,则代表配置文件无误

3、重启DNS服务

bash
service named restart

4、测试域名的访问

在bmc上执行ping操作,确认bmc与syslog服务器域名可以ping通

bash
ping www.server.rsyslog.com

(2)在BMC配置DNS服务器地址

通过openUBMC管理->网络配置->DNS->首选服务器设置DNS服务器地址

(3)确认BMC可以ping通rsyslog服务器域名

二、搭建rsyslog服务器

1、TCP协议

(1)在目录/etc/rsyslog.d下新建配置文件,如remote.conf,并写入如下内容

bash
# 开启TCP接收并监听11515端口号
module(load="imtcp")
$InputTCPServerRun 11515

# 定义模板来生成文件路径和格式,将远端日志存放于/var/log/tcp.log
$template Remote, "/var/log/tcp.log"

# 排除本地IP的日志记录,只记录远程日志
:fromhost-ip, !isequal, "127.0.0.1" ?Remote

(2)使用systemctl restart rsyslog重启rsyslog服务,使用systemctl status rsyslog查看rsyslog状态无报错

(3)使用netstat -nuplt | grep rsyslog查看是否成功监听相应端口号

(4)查看/var/log/tcp.log,确认成功接收到日志

2、UDP协议

(1)在目录/etc/rsyslog.d下新建配置文件,如remote.conf,并写入如下内容

bash
# 开启UDP接收并监听11516端口号
module(load="imudp")
input(type="imudp" port="11516")

# 定义模板来生成文件路径和格式,将远端日志存放于/var/log/udp.log
$template Remote, "/var/log/udp.log"

# 排除本地IP的日志记录,只记录远程日志
:fromhost-ip, !isequal, "127.0.0.1" ?Remote

(2)使用systemctl restart rsyslog重启rsyslog服务,使用systemctl status rsyslog查看rsyslog状态无报错

(3)使用netstat -nuplt | grep rsyslog查看是否成功监听相应端口号

(4)查看/var/log/udp.log,确认成功接收到日志

3、TLS协议

(1)在目录/etc/rsyslog.d下新建配置文件,如remote.conf,并写入如下内容

bash
# 加载gtls驱动,用于实现tls加密
$DefaultNetstreamDriver gtls

#设置CA证书路径,用户可自定义配置路径
$DefaultNetstreamDriverCAFile /etc/rsyslog.d/SyslogCA.crt

#设置服务器证书文件路径,用户可自定义配置路径
$DefaultNetstreamDriverCertFile /etc/rsyslog.d/server.crt

#设置服务器秘钥文件路径,用户可自定义配置路径
$DefaultNetstreamDriverKeyFile /etc/rsyslog.d/server.key

#加载TCP模块
$Modload imtcp

#设置TCP传输模式,TLS传输必须设置为1
$InputTCPServerStreamDriverMode 1

#认证模式,此处设置为证书合法性校验,仅校验证书是否合法
$InputTCPServerStreamDriverAuthMode anon

#服务端侦听端口,必须确保处于侦听状态,并不被其他进程占用,本例使用11514端口
$InputTCPServerRun 11514

#日志存放位置,用户可定义配置日志存放路径
$template Remote,"/var/log/syslog/%fromhost-ip%/%$YEAR%-%$MONTH%-%$DAY%.log"

# 排除本地IP的日志记录,只记录远程日志
:fromhost-ip, !isequal, "127.0.0.1" ?Remote

如果使用tls单向认证,那么$DefaultNetstreamDriverCAFile /etc/rsyslog.d/SyslogCA.crt这行内容并非必需配置,可以注释掉

(2)在/etc/rsyslog.d下导入相应证书(此目录需要根据第一步配置的文件路径确认)

SyslogCA.crt为CA证书

server.crt为服务器ssl证书

server.key为服务器ssl证书私钥

如果导入的文件路径不对或者文件名称错误会导致rsyslog服务启动失败

(3)使用systemctl restart rsyslog重启rsyslog服务,使用systemctl status rsyslog查看rsyslog状态无报错

(4)使用netstat -nuplt | grep rsyslog查看是否成功监听相应端口号

(5)查看/var/log/syslog/%fromhost-ip%/%$YEAR%-%$MONTH%-%$DAY%.log,确认成功接收到日志 fromhost-ip为客户端,即bmc的ip,%$YEAR%-%$MONTH%-%$DAY%为传输日期

三、证书制作

证书制作方法可以参考社区wiki可观测环境搭建2.2 准备证书/密钥文件章节进行,其中证书文件名称替换为第一步中的证书文件名称

只有一点需要特别注意:

制作SSL证书时,如果syslog服务器使用的是域名进行tls认证,那么ssl证书主体中commonName字段的值必须与syslog服务器的域名一致!!!以本指导为例,commonName字段的值需要填为www.server.rsyslog.com

如果使用ip地址进行tls认证,则无此要求。