14.5. 配置 TLS 加密的远程日志记录


默认情况下,Rsyslog 以纯文本格式发送 remote-logging 通信。如果您的场景需要保护这个通信频道,您可以使用 TLS 加密它。

要通过 TLS 使用加密传输,请同时配置服务器和客户端。服务器收集和分析由一个或多个客户端系统发送的日志。

您可以使用 ossl 网络流驱动程序(OpenSSL)或 gtls 流驱动程序(GnuTLS)。

注意

如果您的系统具有更高的安全性,例如,没有连接到任何网络或有严格授权的系统,请使用独立的系统作为认证授权(CA)。

您可以在服务器端上,在 globalmoduleinput 级别上使用流驱动程序自定义连接设置,在客户端上,在 globalaction 级别上使用流驱动程序自定义连接设置。更为具体的配置会覆盖更常规的配置。例如,您可以在全局设置中对大多数连接使用 ossl,而在 input 和 action 设置只对特定连接使用 gtls

先决条件

  • 有对客户端和服务器系统的 root 访问权限。
  • 以下软件包安装在服务器和客户端系统上:

    • rsyslog 软件包。
    • 对于 ossl 网络流驱动程序,是 rsyslog-openssl 软件包。
    • 对于 gtls 网络流驱动程序,是 rsyslog-gnutls 软件包。
    • 对于使用 certtool 命令生成证书,是 gnutls-utils 软件包。
  • 在您的日志服务器中,以下证书位于 /etc/pki/ca-trust/source/anchors/ 目录中,并使用 update-ca-trust 命令更新您的系统配置:

    • ca-cert.pem - 一个 CA 证书,它可以在日志记录服务器和客户端上验证密钥和证书。
    • server-cert.pem - 日志记录服务器的公钥。
    • server-key.pem - 日志记录服务器的私钥。
  • 在您的日志记录客户端中,以下证书位于 /etc/pki/ca-trust/source/anchors/ 目录中,并使用 update-ca-trust 来更新您的系统配置:

    • ca-cert.pem - 一个 CA 证书,它可以在日志记录服务器和客户端上验证密钥和证书。
    • client-cert.pem - 客户端的公钥。
    • client-key.pem - 客户端的私钥。
    • 如果服务器运行 RHEL 9.2 或更高版本,且启用了 FIPS 模式,客户端必须支持 Extended Master Secret(EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅 强制 TLS 扩展"Extended Master Secret" 知识库文章。

流程

  1. 配置服务器以从您的客户端系统接收加密日志:

    1. /etc/rsyslog.d/ 目录中创建一个新文件,例如 securelogser.conf
    2. 要加密通信,配置文件必须包含指向服务器的证书文件的路径、所选身份验证方法,以及支持 TLS 加密的流驱动程序。在 /etc/rsyslog.d/securelogser.conf 文件中添加以下行:

      # Set certificate files
      global(
        DefaultNetstreamDriverCAFile="/etc/pki/ca-trust/source/anchors/ca-cert.pem"
        DefaultNetstreamDriverCertFile="/etc/pki/ca-trust/source/anchors/server-cert.pem"
        DefaultNetstreamDriverKeyFile="/etc/pki/ca-trust/source/anchors/server-key.pem"
      )
      
      # TCP listener
      module(
        load="imtcp"
        PermittedPeer=["client1.example.com", "client2.example.com"]
        StreamDriver.AuthMode="x509/name"
        StreamDriver.Mode="1"
        StreamDriver.Name="ossl"
      )
      
      # Start up listener at port 514
      input(
        type="imtcp"
        port="514"
      )
      注意

      如果您更喜欢 GnuTLS 驱动程序,请使用 StreamDriver.Name="gtls" 配置选项。有关比 x509/name 严格性低的验证模式的更多信息,请参阅使用 rsyslog-doc 软件包安装的文档。

    3. 可选:在 RHEL 9.4 中提供的 Rsyslog 版本 8.2310 开始,您可以自定义连接配置。为此,将 input 部分替换为以下内容:

      input(
        type="imtcp"
        Port="50515"
        StreamDriver.Name="<driver>"
        streamdriver.CAFile="/etc/rsyslog.d/<ca1>.pem"
        streamdriver.CertFile="/etc/rsyslog.d/<server1-cert>.pem"
        streamdriver.KeyFile="/etc/rsyslog.d/<server1-key>.pem"
      )
      • 根据您要使用的驱动程序,将 <driver> 替换为 osslgtls
      • <ca1> 替换为 CA 证书,将 <server1-cert> 替换为证书,将 <server1-key> 替换为自定义连接的密钥。
    4. 将更改保存到 /etc/rsyslog.d/securelogser.conf 文件。
    5. 验证 /etc/rsyslog.conf 文件的语法以及 /etc/rsyslog.d/ 目录中的任何文件:

      # rsyslogd -N 1
      rsyslogd: version 8.1911.0-2.el8, config validation run (level 1)...
      rsyslogd: End of config validation run. Bye.
    6. 确保 rsyslog 服务在日志记录服务器中运行并启用:

      # systemctl status rsyslog
    7. 重启 rsyslog 服务:

      # systemctl restart rsyslog
    8. 可选:如果没有启用 Rsyslog,请确保 rsyslog 服务在重启后自动启动:

      # systemctl enable rsyslog
  2. 配置客户端以将加密日志发送到服务器:

    1. 在客户端系统上,在 /etc/rsyslog.d/ 目录中创建一个名为 的新文件,如 securelogcli.conf
    2. /etc/rsyslog.d/securelogcli.conf 文件中添加以下行:

      # Set certificate files
      global(
        DefaultNetstreamDriverCAFile="/etc/pki/ca-trust/source/anchors/ca-cert.pem"
        DefaultNetstreamDriverCertFile="/etc/pki/ca-trust/source/anchors/client-cert.pem"
        DefaultNetstreamDriverKeyFile="/etc/pki/ca-trust/source/anchors/client-key.pem"
      )
      
      
      # Set up the action for all messages
      *.* action(
        type="omfwd"
        StreamDriver="ossl"
        StreamDriverMode="1"
        StreamDriverPermittedPeers="server.example.com"
        StreamDriverAuthMode="x509/name"
        target="server.example.com" port="514" protocol="tcp"
      )
      注意

      如果您更喜欢 GnuTLS 驱动程序,请使用 StreamDriver.Name="gtls" 配置选项。

    3. 可选:在 RHEL 9.4 中提供的 Rsyslog 版本 8.2310 开始,您可以自定义连接配置。为此,将 action 部分替换为以下内容:

      local1.* action(
        type="omfwd"
        StreamDriver="<driver>"
        StreamDriverMode="1"
        StreamDriverAuthMode="x509/certvalid"
        streamDriver.CAFile="/etc/rsyslog.d/<ca1>.pem"
        streamDriver.CertFile="/etc/rsyslog.d/<client1-cert>.pem"
        streamDriver.KeyFile="/etc/rsyslog.d/<client1-key>.pem"
        target="server.example.com" port="514" protocol="tcp"
        )
      • 根据您要使用的驱动程序,将 <driver> 替换为 osslgtls
      • <ca1> 替换为 CA 证书,将 <client1-cert> 替换为证书,将 <client1-key> 替换为自定义连接的密钥。
    4. 将更改保存到 /etc/rsyslog.d/securelogcli.conf 文件中。
    5. 验证 /etc/rsyslog.conf 文件的语法以及 /etc/rsyslog.d/ 目录中的其他文件:

      # rsyslogd -N 1
      rsyslogd: version 8.1911.0-2.el8, config validation run (level 1)...
      rsyslogd: End of config validation run. Bye.
    6. 确保 rsyslog 服务在日志记录服务器中运行并启用:

      # systemctl status rsyslog
    7. 重启 rsyslog 服务:

      # systemctl restart rsyslog
    8. 可选:如果没有启用 Rsyslog,请确保 rsyslog 服务在重启后自动启动:

      # systemctl enable rsyslog

验证

要验证客户端系统向服务器发送信息,请按照以下步骤执行:

  1. 在客户端系统中发送测试信息:

    # logger test
  2. 在服务器系统上,查看 /var/log/messages 日志,例如:

    # cat /var/log/remote/msg/<hostname>/root.log
    Feb 25 03:53:17 <hostname> root[6064]: test

    其中 <hostname> 是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为 root

其他资源

  • certtool (1), openssl (1), update-ca-trust (8), rsyslogd(8)rsyslog.conf (5) 手册页。
  • /usr/share/doc/rsyslog/html/index.html 上安装了 rsyslog-doc 软件包的文档。
  • 将 logging 系统角色与 TLS 一起使用
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.