【发布时间】:2016-05-20 09:02:53
【问题描述】:
编辑:在与此问题作斗争之后,实际上似乎是许多不同的问题都在有关 Rsyslog 的一些一般问题下混在一起。 因此,对问题进行了更好的“TL;DR”摘要:“将 Rsyslog 与 TLS 结合使用会产生许多模糊/混淆的问题。我怎样才能使其工作?”我的答案总结如下。
原帖:
我一直在努力让rsyslog 将 TLS 从客户端输出到服务器,特别是在使用“指纹”或“证书有效”模式时。
我有多台机器,其中一台是通过 TCP/TLS 在端口 11514 上接收 syslog 数据的服务器。其余机器是发送 TCP/TLS 的客户端。所有证书都使用相同的证书颁发机构签名(其密钥存储在其他地方)。这些机器不直接连接到公共 IP 地址,也没有 DNS 条目。
根据可用于哪个平台的版本(从 7.6 到 8.4),即使尝试在它们之间共享相似的配置,不同的机器也会表现出不同的行为。 gtls 模块被证明是一个不变的、反复无常的麻烦,因为它会在每台机器上以奇怪的、不同的方式出错。它可能会出错,具体取决于配置行的顺序,或者我是否使用 Rainer-script 样式或使用 Legacy 样式或在证书的 CN 中使用机器的主机名或没有,等等等等。
虽然每种模式的具体功能没有得到很好的记录(在查看了这样的稀疏解释后:http://www.rsyslog.com/doc/ns_gtls.html),但我选择不使用“x509/name”,因为它似乎没有用对我来说任何目的。除非我弄错了,否则“x509/name”会将服务器上安装的机器证书的 CN 与 PermittedPeers 中的任何内容相匹配。但是,与所有示例相反,我的机器没有 DNS 条目,因此证书的 CN 完全是任意的。 (但是,对于最后一台机器的配置,gtls 继续失败,直到我使 CN 与我的主机名匹配。巧合还是发生了什么......?)
我只想对每台机器上的签名证书进行相互验证(因为它们是相同的签名证书以及我使用“x509/certvalid”的原因)。我也不反对通过证书指纹进行验证,如果我能够让它工作(或找到关于具体如何工作的文档)。
在我的最后一台机器上,我收到一条错误消息,指出远程主机的名称(rsyslog 服务器)与允许的对等方不匹配。 为什么它甚至需要 “x509/certvalid”,我不知道。然后我尝试将服务器证书的指纹添加到允许的对等点(在我对预期格式的最佳猜测中,有或没有冒号、“:”或“SHA1:”)。都以同样的方式失败,我不知道为什么。
值得注意的是,在我不得不更改所有机器上的所有证书之前,这台机器上的这个设置确实有效(使用我一直使用的相同方法:http://www.rsyslog.com/doc/tls_cert_machine.html)。然后一系列荒谬的失败接踵而至:未能加载 gtls,未能使用带有新样式 action(type="omfwd"...) 等的 Legacy 选项,service rsyslog restart、systemctl restart rsyslog 和 kill -HUP $(pidof rsyslog) 全部挂起或保持奇数不同的状态。在最终的配置优化和完整的机器重启后(嘘,不确定这是系统问题还是其他问题......),我留下了一个允许的从该客户端生成的对等错误......
客户端机器的rsyslog版本:
rsyslogd 8.4.2, compiled with:
FEATURE_REGEXP: Yes
GSSAPI Kerberos 5 support: Yes
FEATURE_DEBUG (debug build, slow code): No
32bit Atomic operations supported: Yes
64bit Atomic operations supported: Yes
memory allocator: system default
Runtime Instrumentation (slow code): No
uuid support: Yes
Number of Bits in RainerScript integers: 64
客户端机器rsyslog.conf的片段:
$DefaultNetstreamDriverCAFile /folder/ca_cert.pem
$DefaultNetstreamDriver gtls
$DefaultNetstreamDriverCAFile /folder/ca_cert.pem
$DefaultNetstreamDriverCertFile /folder/client1_cert.pem
$DefaultNetstreamDriverKeyFile /folder/client1_key.pem
$ActionSendStreamDriverAuthMode x509/certvalid
$ActionSendStreamDriverMode 1
...
ruleset(name="forwardtls") {
action(type="omfwd" target="192.168.1.1" port="11514" protocol="tcp"
ResendLastMSGOnReconnect="on" StreamDriverMode="1"
StreamDriverAuthMode="x509/certvalid"
StreamDriverPermittedPeers="SHA1:AA:BB:CC:11:22:33:44:55:66:77:88:99:11:22:33:44:55:66:77:88")
}
*.* call forwardtls
客户端机器错误:
Feb 7 23:59:35 client2 rsyslogd-2087: authentication not supported by gtls netstream driver in the configured authentication mode - ignored [try http://www.rsyslog .com/e/2087 ]
Feb 7 23:59:35 client2 rsyslogd-2007: action 'action 1' suspended, next retry is Wed Feb 10 00:00:05 2016 [try http://www.rsyslog .com/e/2007 ]
Feb 8 00:00:01 client2 rsyslogd-2088: error: peer name not authorized - not permitted to talk to it. Names: CN: server1; [try http://www.rsyslog .com/e/2088 ]
服务器机器的 rsyslog.conf 片段:
$ModLoad imtcp
$DefaultNetstreamDriver gtls
$DefaultNetstreamDriverCAFile /folder/ca_cert.pem
$DefaultNetstreamDriverCertFile /folder/server1_cert.pem
$DefaultNetstreamDriverKeyFile /folder/server1_key.pem
$InputTCPServerStreamDriverAuthMode x509/certvalid
$InputTCPServerStreamDriverMode 1
$InputTCPServerRun 11514
【问题讨论】:
标签: linux ssl tcp x509 rsyslog