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

安装完成后,运行以下systemctl命令启动并启用Rsyslog服务。然后验证它是否正在运行。
sudo systemctl enable --now rsyslog
sudo systemctl status rsyslog
在以下输出中,你可以看到Rsyslog正在运行且已启用。

配置UFW防火墙
Rsyslog安装完成后,你将安装并配置UFW(Uncomplicated Firewall)。你需要开放端口22用于OpenSSH服务,端口514用于Rsyslog。然后启动并启用UFW服务。
运行以下apt命令安装UFW。输入Y确认安装。
sudo apt install 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已启用。

配置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服务状态以确保它正在运行。
sudo systemctl status rsyslog
在以下输出中,你可以看到Rsyslog正在运行。

此外,检查服务器上的端口514以确保Rsyslog正在运行。
ss -tulpn | grep 514
你可以在下面看到UDP端口514被Rsyslog使用。

发送日志到Rsyslog服务器
现在你已经在Debian服务器上配置了Rsyslog远程日志,接下来尝试从192.168.10.41向192.168.10.10服务器发送日志。为此,你需要执行以下操作:
- 在客户端机器上安装Rsyslog软件包
- 编辑Rsyslog配置并定义哪些日志将发送到远程Rsyslog服务器
- 可选,为Rsyslog设置磁盘队列缓冲区
使用以下apt命令安装Rsyslog软件包。输入Y确认安装。
sudo apt install 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正常工作,你需要检查在模板中配置的日志目录。在此示例中,来自远程服务器的日志文件将存储在/var/log/servers目录中。
使用以下命令检查日志目录/var/log/servers。这将显示每台服务器的目录。
ls /var/log/servers
现在检查你的服务器的日志目录,存储在/var/log/servers/server-ip目录中。你将看到Rsyslog服务器上有多个日志文件可用。
你现在可以使用cat或tail命令检查日志文件以查看日志详情。
cat /var/log/servers/logfile.log
tail -f /var/log/servers/logfile.log

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