Rsyslog是一个开源的日志系统守护进程,用于收集、过滤、存储和转发操作系统与应用程序的日志消息。它是一个强大且灵活的日志系统,支持多种协议,包括TCP、UDP和RELP(可靠事件日志协议)。你可以使用Rsyslog集中管理服务器、应用程序和数据库的日志。

本教程将介绍如何在Debian 12服务器上安装Rsyslog并配置远程日志记录。你还将配置一个Linux客户端将日志远程发送到Rsyslog服务器。

前提条件

在开始本教程之前,你需要以下条件:

- 一台Debian 12服务器
- 一个具有管理员权限的非root用户
- 一台Linux客户端机器用于测试

安装Rsyslog

首先,你需要将Rsyslog安装到Debian服务器上。在这一步中,你将通过APT安装Rsyslog,然后启动并启用Rsyslog服务。

运行以下命令更新Debian软件包索引并安装Rsyslog。输入Y确认安装。

sudo apt update
sudo apt install rsyslog

安装Rsyslog

安装完成后,运行以下systemctl命令启动并启用Rsyslog服务。然后验证它是否正在运行。

sudo systemctl enable --now rsyslog
sudo systemctl status rsyslog

在以下输出中,你可以看到Rsyslog正在运行且已启用。

检查Rsyslog状态

配置UFW防火墙

Rsyslog安装完成后,你将安装并配置UFW(Uncomplicated Firewall)。你需要开放端口22用于OpenSSH服务,端口514用于Rsyslog。然后启动并启用UFW服务。

运行以下apt命令安装UFW。输入Y确认安装。

sudo apt install ufw

安装UFW

安装完成后,运行以下ufw命令启用OpenSSH配置文件并允许访问端口514。OpenSSH配置文件将允许SSH访问,端口514是syslog端口。

sudo ufw allow OpenSSH
sudo ufw allow 514

现在使用以下命令启动并启用UFW。输入y确认,你将看到类似防火墙已激活并在系统启动时启用的输出。

sudo ufw enable

最后,使用以下命令检查UFW状态。

sudo ufw status

在以下输出中,你可以看到UFW状态为active,OpenSSH配置文件和端口514已启用。

配置UFW防火墙

配置Rsyslog接收远程日志

现在你已经安装了Rsyslog并配置了UFW,可以设置Rsyslog接收来自远程服务器的日志了。为此,你需要修改/etc/rsyslog.conf文件并配置以下内容:

1. 启用imudp模块通过UDP接收远程服务器的日志
2. 可选,启用imtcp通过TCP接收日志
3. 启用AllowedSender选项允许特定子网远程发送日志
4. 添加Rsyslog自定义模板
5. 检查Rsyslog配置
6. 启动、启用并验证Rsyslog服务

首先,使用nano编辑器编辑/etc/rsyslog.conf文件。

sudo nano /etc/rsyslog.conf

取消以下行的注释以启用imudp模块并启用syslog记录到Rsyslog服务器。

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

此外,如果你需要通过TCP启用syslog,请按以下方式启用imtcp模块:

# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="50514")

现在添加AllowedSender选项,输入允许向Rsyslog服务器远程发送Syslog消息的网络子网。

# $AllowedSender - specifies which remote systems are allowed to send syslog messages to rsyslogd
$AllowedSender UDP, 192.168.10.0/24, [::1]/128, *.howtoforge.local, db.howtoforge.local

输入以下配置为远程服务器的日志文件设置模板。在此示例中,来自远程服务器的日志文件将存储在/var/log/servers/server-ip目录中。

#Custom template to generate the log filename dynamically based on the client's IP address.
$template RemInputLogs, "/var/log/servers/%FROMHOST-IP%/%PROGRAMNAME%.log"
*.* ?RemInputLogs

完成后保存文件并退出编辑器。

接下来,运行以下rsyslogd命令检查Rsyslog配置,确保你的配置正确。

rsyslogd -f /etc/rsyslog.conf -N1

当没有错误发生时,运行以下systemctl命令重启Rsyslog服务以应用更改。

sudo systemctl restart rsyslog

检查Rsyslog配置

最后,检查Rsyslog服务状态以确保它正在运行。

sudo systemctl status rsyslog

在以下输出中,你可以看到Rsyslog正在运行。

检查Rsyslog服务状态

此外,检查服务器上的端口514以确保Rsyslog正在运行。

ss -tulpn | grep 514

你可以在下面看到UDP端口514被Rsyslog使用。

检查Rsyslog端口

发送日志到Rsyslog服务器

现在你已经在Debian服务器上配置了Rsyslog远程日志,接下来尝试从192.168.10.41192.168.10.10服务器发送日志。为此,你需要执行以下操作:

- 在客户端机器上安装Rsyslog软件包
- 编辑Rsyslog配置并定义哪些日志将发送到远程Rsyslog服务器
- 可选,为Rsyslog设置磁盘队列缓冲区

使用以下apt命令安装Rsyslog软件包。输入Y确认安装。

sudo apt install rsyslog

安装客户端Rsyslog

现在使用nano编辑器打开默认配置文件/etc/rsyslog.conf

sudo nano /etc/rsyslog.conf

添加以下配置将日志发送到Rsyslog服务器192.168.10.10。在此示例中,我们将kernel、cron和authentication日志发送到Rsyslog服务器。

# Send logs to a remote syslog server over UDP
auth.* @[192.168.10.10]:514
kern.* @[192.168.10.10]:514
cron.* @[192.168.10.10]:514

现在添加以下内容为Rsyslog设置队列缓冲区。

# Define Disk Queue Buffer in case the server goes down
$ActionQueueFileName queue # define a file name for disk assistance.
$ActionQueueMaxDiskSpace 1g # The maximum size that all queue files together will use on disk.
$ActionQueueSaveOnShutdown on # specifies that data should be saved at shutdown
$ActionQueueType LinkedList # holds enqueued messages in memory which makes the process very fast.
$ActionResumeRetryCount -1 # prevents rsyslog from dropping messages when retrying to connect if the server is not responding,

完成后保存文件并退出编辑器。

接下来,运行以下rsyslogd命令检查并验证Rsyslog配置。

rsyslogd -f /etc/rsyslog.conf -N1

当没有错误发生时,运行以下systemctl命令重启Rsyslog并验证它是否正在运行。

sudo systemctl restart rsyslogd
sudo systemctl status rsyslogd

你可以在下面看到Rsyslog服务正在运行,你的日志将被发送到192.168.10.10上的Rsyslog服务器。

检查客户端Rsyslog服务

在Rsyslog服务器上检查日志文件

为确保Rsyslog正常工作,你需要检查在模板中配置的日志目录。在此示例中,来自远程服务器的日志文件将存储在/var/log/servers目录中。

使用以下命令检查日志目录/var/log/servers。这将显示每台服务器的目录。

ls /var/log/servers

现在检查你的服务器的日志目录,存储在/var/log/servers/server-ip目录中。你将看到Rsyslog服务器上有多个日志文件可用。

你现在可以使用cattail命令检查日志文件以查看日志详情。

cat /var/log/servers/logfile.log
tail -f /var/log/servers/logfile.log

查看日志文件

总结

恭喜!你已完成在Debian 12服务器上安装Rsyslog。你还配置了通过Rsyslog进行远程日志记录,并通过syslog UDP将日志发送到服务器。作为下一步,你还可以同时设置TCP和UDP输入模块,并将它们与Rsyslog或Logstash等日志系统集成。