在Debian 10上安装Rsyslog服务器

在本教程中,您将学习如何在Debian 10上设置rsyslog服务器。 Rsyslog 是syslogd(提供对消息记录的支持的系统实用程序)的多线程实现,其功能包括:

  • 通过TCP,SSL / TLS和RELP的可靠系统日志
  • 按需磁盘缓冲
  • 电子邮件警报
  • 写入MySQL或PostgreSQL数据库(通过单独的输出插件)
  • 允许的发件人列表
  • 过滤系统日志消息的任何部分
  • 在线消息压缩
  • 细粒度的输出格式控制
  • 故障转移到备份目标
  • 企业级加密syslog中继。这是Debian系统上的默认syslogd。

可以在客户端/服务器模型中配置Rsyslog。当配置为客户端时,它将通过TCP / UDP协议通过网络将日志发送到远程服务器。作为服务器,它通过网络从远程客户端从端口514 TCP / UDP或配置为其侦听的任何自定义端口上接收日志。

Rsyslog根据选定的筛选器筛选syslog消息。您可能想查看我们之前有关rsyslog过滤器基本介绍的文章。

在Debian 10上安装Rsyslog服务器

您在使用Ubuntu吗?检查下面的链接;

在Ubuntu 20.04上安装Rsyslog服务器

在Debian 10上安装Rsyslog

Rsyslog是Debian系统上的默认syslogd,通常默认情况下安装在Debian 10上。

您可以通过检查已安装的rsyslog的版本来验证这一点。

apt list -a rsyslog
Listing... Done
rsyslog/stable,now 8.1901.0-1 amd64 [installed]

如果由于某种原因未安装,请运行以下命令进行安装。

apt update
apt install rsyslog -y

安装完成后,启动并启用rsyslog服务。

systemctl enable --now rsyslog

在Debian 10上安装Rsyslog服务器

现在rsyslog已安装并正在运行,您需要将其配置为以服务器模式运行。如上所述,可以将rsyslog配置为客户端,以将日志发送到中央日志记录服务器或从其他系统接收和存储日志的服务器。

在本指南中,我们将Rsyslog设置为Debian 10机器上的服务器。

打开ryslog配置文件进行编辑;

vim /etc/rsyslog.conf

定义Rsyslog服务器协议和端口

首先,定义要接收登录的协议和端口。

您可以选择使用UDP或TCP以及您选择的任何端口。

请注意,TCP syslog接收比UDP syslog更可靠,并且仍然非常快。主要原因是UDP可能遭受消息丢失。当系统日志服务器必须接收大量突发消息时,就会发生这种情况。如果UDP的系统缓冲区已满,则将丢弃所有其他消息。使用TCP,这将不会发生。但是有时候也最好配置一个UDP服务器。这是因为某些设备(例如路由器)无法通过设计发送TCP syslog。在这种情况下,您将需要两种syslog服务器类型来涵盖所有内容。

在此设置中,我们将Rsyslog配置为使用UDP和TCP协议分别通过端口514和50514接收日志。

默认情况下,在端口514上接收UDP syslog。

启用UDP Syslog接收:

/etc/rsyslog.conf 配置文件,取消注释UDP syslog接收中的行 模组 如下图所示;

...
#################
#### MODULES ####
#################
...

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

启用TCP Syslog接收:

TCP syslog可能需要使用其他端口,因为RPC服务通常也使用此端口。

要将rsyslog设置为在其他TCP端口(例如TCP端口)上运行, 50514,取消注释TCP接收线,并更改端口,如下所示;

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

保存并退出文件;

重新启动rsyslog服务;

systemctl restart rsyslog

验证rsyslog现在正在侦听两个端口;

ss -4altunp | grep 514
udp    UNCONN  0       0                   0.0.0.0:514            0.0.0.0:*      users:(("rsyslogd",pid=52382,fd=5))                                            
tcp    LISTEN  0       25                  0.0.0.0:50514          0.0.0.0:*      users:(("rsyslogd",pid=52382,fd=7))

您可能会注意到UDP端口没有监听状态,因为它是无连接的,并且没有“监听”,“建立”,“关闭”或类似概念。

允许Rsyslog通过防火墙

如果UFW已安装并正在运行,请通过它打开rsyslog。

ufw allow 514/udp
ufw allow 50514/tcp

定义允许的发件人

您可能还需要显式设置允许向syslogd发送系统日志消息的远程客户端。为此,您可以使用 $ AllowedSender 指示。

可以分别为UDP和TCP发送者定义允许的发送者列表。指定它们的语法是:

$AllowedSender [UDP/TCP], ip[/bits], ip[/bits]

  • ip[/bits] 是“ 192.0.2.0/24”或“ 192.0.2.10”中的机器或网络IP地址。如果 /位 省略了一部分,则假定为一个主机。不允许使用“ / 0”,因为它可以匹配任何发送系统。
  • 主机名,也可以提供带有和不带有通配符的。如果是这样,则将DNS解析反向的结果用于过滤。可以在多个逗号分隔的列表中指定多个允许的发件人。

最好先指定高流量的发件人,然后再指定低流量的发件人。

要允许特定主机进行UDP或TCP日志记录,请输入以下几行;

vim /etc/rsyslog.conf
...
###########################
#### GLOBAL DIRECTIVES ####
###########################
# $AllowedSender - specifies which remote systems are allowed to send syslog messages to rsyslogd
$AllowedSender UDP, 192.168.60.0/24, [::1]/128, *.example.net, servera.example.com
$AllowedSender TCP, 192.168.58.0/24, [::1]/128, *.example.net, servera.example.com

主机名必须是可解析的,因为在更新ACL之前,主机名将被解析为各自的IP。

另请注意,上述指令仅允许从以下位置接收UDP: 192.168.60.0/24 和TCP接收来自 192.168.58.0/24

除了通过此指令允许特定主机外,一个好主意是通过防火墙强加允许的发件人限制。

例如,允许来自 192.168.60.0/24192.168.58.0/24 网络;

ufw allow from 192.168.60.0/24 to any port 514 proto udp
ufw allow from 192.168.60.0/24 to any port 50514 proto tcp
ufw allow from 192.168.58.0/24 to any port 514 proto udp
ufw allow from 192.168.58.0/24 to any port 50514 proto tcp

配置Rsyslog模板

模板是rsyslog的关键功能。 rsyslog生成的任何输出都可以使用模板根据您的需要进行修改和格式化。

要创建模板,请在中使用以下语法 /etc/rsyslog.conf

$template TEMPLATE_NAME,"text %PROPERTY% more text", [OPTION]

因此,我们可以像这样创建模板;

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

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

这会将从远程主机接收到的日志分类为负责生成该日志的特定程序的日志文件。

完成配置后,保存并退出文件;

检查Rsyslog配置中的错误

您现在可以重新启动 rsyslog 通过运行以下命令进行服务。在重新启动rsyslogd之前,请运行配置检查。

rsyslogd -f /etc/rsyslog.conf -N1
rsyslogd: version 8.2001.0, config validation run (level 1), master config /etc/rsyslog.conf
 rsyslogd: End of config validation run. Bye.

如果一切正常,请重新启动rsyslog。

systemctl restart rsyslog

Rsyslogd现在准备好接收来自远程主机的日志。

配置远程Rsyslog客户端以转发日志Rsyslog服务器

现在是时候配置远程客户端以将syslog消息发送到远程syslog服务器了。登录并按以下步骤进行。

同样,请确保已安装rsyslog软件包。如果没有,请咨询您的特定发行版,以了解如何安装Rsyslog软件包。

验证远程Rsyslog服务器端口连接

要验证与远程rsyslog服务器TCP端口50514的连接,请运行以下命令;

telnet 192.168.59.12 50514
Trying 192.168.59.12...
Connected to 192.168.59.12.
Escape character is '^]'.
^]

telnet>

验证到UDP端口514的连接。由于无法远程登录到UDP端口514,请使用netcat命令。在服务器上,运行以下命令;

nc -ulp 514

在客户端上,运行以下命令,按Enter,然后键入任何内容。您应该能够看到您在服务器上键入的内容。

nc -u 192.168.59.12 514

下面的屏幕快照说明了这一点;

如果一切正常,请如下所示编辑客户端系统的rsyslog配置文件;

vim /etc/rsyslog.conf

要通过端口514 / UDP发送身份验证日志,请在文件末尾添加以下行。请注意,此操作应从主机下的 192.168.60.0/24 按照 AllowedSender 指示。

# Send logs to remote syslog server over UDP
auth,authpriv.* @192.168.59.12:514

要通过端口50514 / TCP发送所有日志,请在文件末尾添加以下行。请注意,此操作应从主机下的 192.168.58.0/24 按照AllowedSender指令。

# Send logs to remote syslog server over TCP 50514
*.* @@192.168.59.12:50514

为了缓解远程rsyslog服务器宕机并且您的日志如此重要而又不想松动的情况,请设置rsyslog磁盘队列以在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 server is not responding,

在客户端上重新启动rsyslog服务。

systemctl restart rsyslog

现在,您可以注销客户端,然后再次登录。身份验证日志应该在rsyslog服务器上可用。

验证服务器上的日志接收

登录到Rsyslog服务器并进行验证。

ls /var/log/remotelogs/
127.0.0.1/     192.168.60.12/

在本例中,我们仅将身份验证日志发送到远程rsyslog服务器。

ls /var/log/remotelogs/192.168.60.12/
CRON.log  sshd.log  sudo.log  su.log
tail -5 /var/log/remotelogs/192.168.60.12/sshd.log 
2021-03-30T19:08:04-04:00 hirsute sshd[1395]: Invalid user test from 192.168.60.1 port 52890
2021-03-30T19:08:06-04:00 hirsute sshd[1395]: pam_unix(sshd:auth): check pass; user unknown
2021-03-30T19:08:06-04:00 hirsute sshd[1395]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.60.1 
2021-03-30T19:08:09-04:00 hirsute sshd[1395]: Failed password for invalid user test from 192.168.60.1 port 52890 ssh2

这就是在Debian 10上设置rsyslog服务器以进行中央远程日志记录的过程如此简单。

其他教程

在Solaris 11.4上配置Rsyslog以将日志发送到远程日志服务器

在Solaris 11.4上配置Syslog以进行远程日志记录

是否要使用NXLog转发日志?通过以下链接查看我们的文章;

配置NXLog以将系统日志转发到Ubuntu 20.04上的Rsyslog服务器

如何在Ubuntu 18.04上使用Rsyslog配置远程日志记录

Sidebar