14.5. 配置 TLS 加密的远程日志记录
默认情况下,Rsyslog 以纯文本格式发送 remote-logging 通信。如果您的场景需要保护这个通信频道,您可以使用 TLS 加密它。
要通过 TLS 使用加密传输,请同时配置服务器和客户端。服务器收集和分析由一个或多个客户端系统发送的日志。
您可以使用 ossl
网络流驱动程序(OpenSSL)或 gtls
流驱动程序(GnuTLS)。
如果您的系统具有更高的安全性,例如,没有连接到任何网络或有严格授权的系统,请使用独立的系统作为认证授权(CA)。
您可以在服务器端上,在 global
、module
和 input
级别上使用流驱动程序自定义连接设置,在客户端上,在 global
和 action
级别上使用流驱动程序自定义连接设置。更为具体的配置会覆盖更常规的配置。例如,您可以在全局设置中对大多数连接使用 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" 知识库文章。
-
流程
配置服务器以从您的客户端系统接收加密日志:
-
在
/etc/rsyslog.d/
目录中创建一个新文件,例如securelogser.conf
。 要加密通信,配置文件必须包含指向服务器的证书文件的路径、所选身份验证方法,以及支持 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
软件包安装的文档。可选:在 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>
替换为ossl
或gtls
。 -
将
<ca1>
替换为 CA 证书,将<server1-cert>
替换为证书,将<server1-key>
替换为自定义连接的密钥。
-
根据您要使用的驱动程序,将
-
将更改保存到
/etc/rsyslog.d/securelogser.conf
文件。 验证
/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.
确保
rsyslog
服务在日志记录服务器中运行并启用:# systemctl status rsyslog
重启
rsyslog
服务:# systemctl restart rsyslog
可选:如果没有启用 Rsyslog,请确保
rsyslog
服务在重启后自动启动:# systemctl enable rsyslog
-
在
配置客户端以将加密日志发送到服务器:
-
在客户端系统上,在
/etc/rsyslog.d/
目录中创建一个名为 的新文件,如securelogcli.conf
。 在
/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"
配置选项。可选:在 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>
替换为ossl
或gtls
。 -
将
<ca1>
替换为 CA 证书,将<client1-cert>
替换为证书,将<client1-key>
替换为自定义连接的密钥。
-
根据您要使用的驱动程序,将
-
将更改保存到
/etc/rsyslog.d/securelogcli.conf
文件中。 验证
/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.
确保
rsyslog
服务在日志记录服务器中运行并启用:# systemctl status rsyslog
重启
rsyslog
服务:# systemctl restart rsyslog
可选:如果没有启用 Rsyslog,请确保
rsyslog
服务在重启后自动启动:# systemctl enable rsyslog
-
在客户端系统上,在
验证
要验证客户端系统向服务器发送信息,请按照以下步骤执行:
在客户端系统中发送测试信息:
# logger test
在服务器系统上,查看
/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 一起使用。