如何在 Debian 10 上使用 Journald 集中管理日志

_ 作者选择了 免费和开源基金作为 写给捐款计划的一部分接受捐款。

介绍

系统日志是管理Linux系统的一个极为重要的组成部分. 它们提供了对系统如何运作和如何使用的宝贵见解,因为除了错误之外,它们还记录安全事件等业务信息。 Linux系统的标准配置是将其日志在本地存储在它们发生的同一系统中. 这对独立的系统有效,但随着系统数量的增加而迅速成为一个问题。 管理所有这些日志的解决方案是创建一个集中日志服务器,每个Linux主机将日志实时发送到专用日志管理服务器.

集中式日志解决方案提供与每个主机上存储日志相比的几个优点:

  • 减少每个主机存储日志文件所需的磁盘空间。 * 日志可以保存更长时间,因为专用日志服务器可以配置更大的存储容量。 * 可以执行高级日志分析,需要来自多个系统的日志,以及比主机可用的更多的计算资源。 * 系统管理员可以访问所有系统的日志,他们可能无法直接登录安全原因。

在本指南中,您将配置 systemd工具套件的组件,以将客户端系统的日志消息传送到集中日志收集服务器。

前提条件

在您开始本指南之前,您将需要以下内容:

  • 两个Debian 10服务器。
  • 两个服务器都有sudo权限的非root用户。 遵循 Initial Server setup with Debian 10 指导如何做到这一点的指南. 如指南所解释,您还应在两个服务器上配置UFW防火墙。
  • 联合国 两个主机名指向您的服务器. 一个用于生成日志的 客户端** 系统的主机名,另一个用于日志集** 服务器** . 通过查阅[域和DNS]文档(https://www.digitalocean.com/docs/networking/dns/),学习如何将主机名指向 DigitalOcean Droplets. .

本指南将使用以下两个示例主机名称:

  • client.your_domain:生成日志的客户端系统. * server.your_domain:日志收集服务器。

通过SSH登录到单独的终端中的客户端和服务器,作为非 root sudo 用户开始本教程。

<$>[注] :在整个教程中,命令块被标记为该命令应该运行的服务器名称(** client** 或** server** )。

步骤 1 — 安装systemd-journal-remote

在此步骤中,您将在 client 和** server** 上安装systemd-journal-remote包,该包包含了** client** 和** server** 用于传输日志消息的组件。

首先,在客户端和服务器上运行系统更新,以确保数据库和系统是最新的:

1[label Client and Server]
2sudo apt update
3sudo apt upgrade

接下来,安装systemd-journal-remote包:

1[label Client and Server]
2sudo apt install systemd-journal-remote

服务器上 ,启用并启动两个 systemd组件,它需要通过以下命令接收日志消息:

1[label Server]
2[environment second]
3sudo systemctl enable --now systemd-journal-remote.socket
4sudo systemctl enable systemd-journal-remote.service

第一個命令中的「--現在」選項會立即啟動服務. 您沒有在第二個命令中使用它,因為此服務不會啟動,直到它有 TLS 證書,您將在下一步建立。

client 中,启用systemd用于将日志消息发送到服务器的组件:

1[label Client]
2[environment third]
3sudo systemctl enable systemd-journal-upload.service

接下来,在服务器上,打开UFW防火墙中的端口1953280。这将允许服务器接收客户端的日志消息。端口80certbot将使用的端口来生成TLS证书。下列命令将打开这些端口:

1[label Server]
2[environment second]
3sudo ufw allow in 19532/tcp
4sudo ufw allow in 80/tcp

在客户端上,您只需要使用此命令打开端口 `80:

1[label Client]
2[environment third]
3sudo ufw allow in 80/tcp

您现在已经安装了所需的组件,并在客户端和服务器上完成了基本系统配置. 在您可以配置这些组件以开始传输日志消息之前,您将使用 certbot实用程序注册 Let's Encrypt TLS 证书用于 client 和** server** 。

第2步:安装Certbot和注册证书

Let's Encrypt is a Certification Authority,它发行免费的TLS证书. 这些证书允许计算机既加密它们之间发送的数据,也验证彼此的身份. 这些证书允许您使用 HTTPS 进行互联网浏览 。 同样的证书可以被其他任何想要同等安全水平的应用程序所使用. 证书的注册程序无论用什么方法都是一样的.

在此步骤中,您将安装certbot实用程序,并使用它来注册证书,它也会自动更新证书,当它们到期时。在这里的注册过程在 client 和** server** 上是一样的。

首先,在两个主机上安装 certbotcurl 实用程序:

1[label Client and Server]
2sudo apt install certbot curl

现在你已经安装了certbot,运行以下命令,在 client 和** server** 上注册证书:

1[label Client and Server]
2sudo certbot certonly --standalone --agree-tos --email sammy@your_domain -d your_domain

此命令中的选项意味着如下:

  • `宫外': 注册证书,系统上不作其他更改.
  • " 独立 " : 使用 certbot 的内置网络服务器来验证证书请求.
  • " 同意 " : 自动同意"让我们加密服务条款".
  • `电子邮件: 这是Let's Encrypt将用来通知您证书过期和其它重要信息的电子邮件地址.
  • `-d你的域: 证书将要注册的主机名 。 这必须与你运行的系统匹配. .

当您运行此命令时,您将被问及是否要与 Let’s Encrypt 共享电子邮件地址,以便他们可以向您发送有关其工作的新闻和其他信息的电子邮件。

当证书注册过程完成后,它将将证书和密钥文件放置在 /etc/letsencrypt/live/your_domain/ 中,而 your_domain 是您注册证书的主机名。

最后,您需要下载 Let’s Encrypt CA 和中间证书的副本,并将其放入相同的文件中。

以下命令将从 Let’s Encrypt 网站下载两个证书,并将它们放入用户主目录中的单个文件中,名为letsencrypt-combined-certs.pem

client 和** server** 上运行此命令以下载证书并创建组合文件:

1[label Client and Server]
2curl -s https://letsencrypt.org/certs/{isrgrootx1.pem.txt,letsencryptauthorityx3.pem.txt} > ~/letsencrypt-combined-certs.pem

接下来,将此文件移动到包含证书和密钥的 Let's Encrypt 目录:

1[label Client and Server]
2sudo cp ~/letsencrypt-combined-certs.pem /etc/letsencrypt/live/your_domain/

您现在已经注册了证书和密钥,在下一步,您将配置日志收集 服务器 以开始收听和存储来自** 客户端** 的日志消息。

第3步:配置服务器

在此步骤中,您将配置 服务器 使用您在最后一步中生成的证书和密钥文件,以便它可以开始接受来自** 客户端** 的日志消息。

systemd-journal-remote 是听取日志消息的组件. 使用文本编辑器在 `/etc/systemd/journal-remote.conf 打开其配置文件,开始在 服务器 上配置:

1[environment second]
2sudo nano /etc/systemd/journal-remote.conf

接下来,在[远程]部分的所有行中删除评论,并设置路径,以指向您刚刚创建的TLS文件:

1[label /etc/systemd/journal-remote.conf]
2[Remote]
3Seal=false
4SplitMode=host
5ServerKeyFile=/etc/letsencrypt/live/server.your_domain/privkey.pem
6ServerCertificateFile=/etc/letsencrypt/live/server.your_domain/fullchain.pem
7TrustedCertificateFile=/etc/letsencrypt/live/server.your_domain/letsencrypt-combined-certs.pem

以下是你在这里使用的选项:

  • Sel=假': 在日记中签名日志数据 。 如果您需要最大安全性, 请启用此功能; 否则, 您可将其作为 虚假` 保存 。
  • SplitMode=host: 远程客户端的日志将在/var/log/journal/remote中按主机拆分。 如果您希望将全部日志添加到一个文件设置中, 将它添加到SplitMode=false
  • `ServerKeyFile': 服务器的私钥文件.
  • `公务员证书文件': 服务器的证书文件 。
  • 信任证书 ' : 包含 让我们加密 CA ` 证书的文件 。 .

现在,您需要更改包含证书和密钥的 Let’s Encrypt 目录上的权限,以便systemd-journal-remote 可以读取和使用它们。

首先,更改 权限以便证书和私钥可读:

1[environment second]
2sudo chmod 0755 /etc/letsencrypt/{live,archive}
3sudo chmod 0640 /etc/letsencrypt/live/server.your_domain/privkey.pem

接下来,将私钥的群组所有权更改为systemd-journal-remote的群组:

1[environment second]
2sudo chgrp systemd-journal-remote /etc/letsencrypt/live/server.your_domain/privkey.pem

您现在可以启动systemd-journal-remote:

1[environment second]
2sudo systemctl start systemd-journal-remote.service

您的日志收集 服务器 现在正在运行,并准备开始接收来自** 客户端** 的日志消息。

步骤4:配置客户端

在此步骤中,您将配置将日志消息传递到日志收集服务器的组件,该组件被称为systemd-journal-upload

「systemd-journal-upload」的默认配置是,它使用的是在运行过程中只存在的临时用户,这使得允许「systemd-journal-upload」读取TLS证书和密钥变得更加复杂。

首先,在 client 上创建一个名为systemd-journal-upload的新用户,使用以下命令adduser:

1[environment third]
2sudo adduser --system --home /run/systemd --no-create-home --disabled-login --group systemd-journal-upload

这些命令的选项是:

  • " 系统 " :创建新用户作为系统用户。 这使用户在`1000'下有一个UID(用户识别器)编号。 UID超过"1000",通常提供给用户账户,人类会使用这些账户登录.
  • " 家庭/运行/系统 " : 将/运行/系统化设定为该用户的主目录。
  • " 不创造家庭 " : 不要创建主目录集, 因为它已经存在 。
  • " 残疾记录 " : 用户不能通过例如SSH登录到服务器.
  • `-组':创建一个与用户同名的组。 .

接下来,设置 Let's Encrypt 证书文件的权限和所有权:

1[environment third]
2sudo chmod 0755 /etc/letsencrypt/{live,archive}
3sudo chmod 0640 /etc/letsencrypt/live/client.your_domain/privkey.pem
4sudo chgrp systemd-journal-upload /etc/letsencrypt/live/client.your_domain/privkey.pem

现在,编辑对 systemd-journal-upload 的配置,该配置在 /etc/systemd/journal-upload.conf

1[environment third]
2sudo nano /etc/systemd/journal-upload.conf

编辑此文件,以便它看起来如下:

1[label /etc/systemd/journal-upload.conf]
2[Upload]
3URL=https://server.your_domain:19532
4ServerKeyFile=/etc/letsencrypt/live/client.your_domain/privkey.pem
5ServerCertificateFile=/etc/letsencrypt/live/client.your_domain/fullchain.pem
6TrustedCertificateFile=/etc/letsencrypt/live/client.your_domain/letsencrypt-combined-certs.pem

最后,重新启动systemd-journal-upload服务,以便使用新的配置:

1[environment third]
2sudo systemctl restart systemd-journal-upload.service

您的 **客户端现已设置并运行,并将其日志消息发送到日志收集服务器. 在下一步,您将检查日志是否被正确发送和记录。

第5步:测试客户端和服务器

在此步骤中,您将测试 客户端 是否正在将日志消息传送到** 服务器** ,以及** 服务器** 是否正在正确地存储它们。

日志收集服务器将客户端的日志存储在/var/log/journal/remote/的目录中.当您在最后一步结束时重新启动 client 时,它开始发送日志消息,所以现在在/var/log/journal/remote/中有一个日志文件。

使用ls命令来检查客户端的日志文件是否存在于服务器上:

1[label Server]
2[environment second]
3sudo ls -la /var/log/journal/remote/

这将打印显示日志文件的目录内容:

1[secondary_label Output]
2total 16620
3drwxr-xr-x 2 systemd-journal-remote systemd-journal-remote 4096 Jun 30 16:17  .
4drwxr-sr-x+ 4 root systemd-journal 4096 Jun 30 15:55  ..
5-rw-r-----  1 systemd-journal-remote systemd-journal-remote 8388608 Jul 1 10:46 'remote-CN=client.your_domain'

接下来,在客户端上写一个日志信息,以检查服务器是否按照预期接收客户端的信息。您将使用 logger 实用程序,在客户端上创建一个自定义日志信息。如果一切工作,系统d-journal-upload 将将此信息传送到服务器。

在客户端上运行以下logger命令:

1[label Client]
2[environment third]
3sudo logger -p syslog.debug "### TEST MESSAGE from client.your_domain ###"

此命令中的 -p syslog.debug 设置了消息的 便利性和严重性。 将此设置为 syslog.debug 将清楚地表明这是一个测试消息。 此命令将从 client.your_domain ## 记录到客户端的日志,然后将此消息systemd-journal-upload 传送到 服务器

接下来,在服务器上阅读客户端的日志文件,以检查日志信息是否来自客户端。 此文件是二进制日志文件,因此您将无法通过等工具读取它。

1[label Server]
2[environment second]
3sudo journalctl --file=/var/log/journal/remote/remote-CN=client.your_domain.journal

日志消息将如下显示:

1[secondary_label Test log message]
2. . .
3Jun 29 13:10:09 client root[3576]: ### TEST MESSAGE from client.your_domain ###

您的日志集中服务器现在正在成功地从您的客户端系统收集日志。

结论

在本文中,您设置了一个中央日志收集服务器,并配置了一个客户端将其系统日志的副本转发到服务器中。

Published At
Categories with 技术
Tagged with
comments powered by Disqus