草庐IT

linux - rsyslog x509/certvalid需要允许的同级

coder 2023-09-18 原文

编辑:在解决了这个问题之后,似乎实际上是许多不同的问题都在有关Rsyslog的一些一般性问题下陷入了困境。
因此,对问题的更好的“TL; DR”摘要:“将Rsyslog与TLS一起使用会产生许多模糊/混淆的问题。如何使它起作用?”我的答案摘要如下。

原始帖子:

我一直在努力让rsyslog从客户端向服务器输出TLS,特别是在使用“指纹”或“证书有效”模式时。

我有多台计算机,其中一台是用于通过端口11514上的TCP/TLS接收syslog数据的服务器。其余的计算机是发送TCP/TLS的客户端。所有证书都具有使用相同证书颁发机构签名的证书(其密钥存储在其他位置)。这些计算机未直接连接到公用IP地址,并且没有DNS条目。

根据适用于哪个平台的版本(从7.6到8.4),即使试图在所有机器之间共享相似的配置,不同的机器也会表现出不同的行为。 gtls模块被证明是一个不断变化的麻烦,因为对于每台机器,它都会以奇怪的,不同的方式出错。根据配置行的顺序,或者我使用的是Rainer脚本样式还是传统的样式,或者是否在证书的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 restartsystemctl restart rsyslogkill -HUP $(pidof rsyslog)都挂起或处于奇怪的不同状态。经过最后的配置优化和完整的计算机重新启动(嘘,不确定这是否是systemd问题还是其他问题...),我被允许从此客户端生成对等错误...

客户端计算机的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

最佳答案

谁都可以猜到,这个“问题”远不止是“有效对等”错误。不幸的是,实际的解决方案将非常特定于发行版,发行版,rsyslog版本以及许多其他不一致的内容,因此没有快速的答案就足够了。

经过无休止的挣扎和盯着这个问题,没有答案(代替了一个过于笼统的“元”答案),这就是我所发现的...

如果计划将Rsyslog与TLS一起使用,则应首先考虑以下几件事:系统有多旧或多旧,以及对故障有多大的耐心。如果需要立即运行,请准备更改某些计划。

首先,大多数发行版是第一个问题。如果要将RELP与Rsyslog的TLS一起使用,则至少需要Rsyslog 7.5版。某些发行版(尤其是基于RedHat的发行版)仅具有7.4版。甚至更旧的基于Debian的LTS发行版也没有足够的最新版本来完全支持Rainer脚本。是否想知道一切所需的特定版本?开始浏览变更日志或其他沮丧的论坛帖子。

不要期望文档会告诉您所需的一切。尽管通常情况很好,但是在线文档有时还是不对的。 (例如,“omrelp”模块显示TLS指纹的确切格式,但是带TLS的纯“tcp”没有;“omrelp”具有Rainer脚本格式的示例,而带TLS的纯“tcp”没有)

预计故障排除会很痛苦。不幸的是,Rsyslog将GnuTLS集成到了所有内容中,但还会将日志消息推送到GnuTLS。根据它在创建TCP连接,进行身份验证,确定适当的加密等过程中所处的位置,它将生成非常不透明的GnuTLS错误代码(当您查找它们或天真地寻找答案时,它通常只会使您误解为REAL问题GnuTLS源代码中的代码)和在线引用网址(可能有也可能没有简短,含糊的任何有用信息的引用)。

有时rsyslog会告诉您该连接不是来自授权的对等方。有时不会。我遇到了许多“GnuTLS错误代码-110”,其原因包括僵尸TCP套接字到在配置中错误键入文件名。这些代码几乎没有用。更糟糕的是,某些客户端安装程序不会对错误进行任何说明,因为它会默默地不记录rsyslog服务启动之后的任何内容(并且还会破坏其他服务,可能是那些触及相同unix套接字的服务,尽管我不确定)。

旧的发行版将使您痛苦。使用不同版本的Rsyslog的不同发行版也会导致非常不同的结果。例如,在最近的Debian构建(带有Systemd)上,运行“service rsyslog stop”将正常停止它,但是“systemctl stop rsyslog”将“停止”服务,但是rsyslogd进程可能仍在后台运行。哎呀如果尝试重新启动rsyslog进程,则服务器与客户端之间的TCP session 很多时候都不会关闭(FIN),从而导致新进程失败。

但是,不要期望其中的任何一个都会被“-N”选项所吸引(因为它仅在语法上始终有效)。

调整配置的最佳建议:通过对配置进行三次检查(包括所有文件名和任何指定文件名的权限)来弄清楚自己,停止服务,终止进程,等待几分钟让任何TCP session 超时,然后重试。否则,您可能正在具有旧配置和无效套接字的旧进程之上运行新服务。

如果要从rsyslog存储库(“adiscon”)安装,以获取最新的relp,Rainer脚本等,它可能会很好地工作,或者您可能还会遇到上述问题以及其他问题。在Ubuntu安装中,将rsyslog,rsyslog-relp和rsyslog-gnutls分为单独的软件包,有人决定重叠核心文件,从而有效地中断了安装。 (为什么几个月前没有注意到这个问题?)

在某些安装中,一切都会在第一次正常运行。在某些安装中,您将用力敲键盘。

备择方案:

-将RELP或普通UDP syslog与隧道 sslwrap 或类似版本结合使用。最好使用指向您本地TLS隧道端口的RELP。这样,如果您的隧道发生故障(分别来自Rsyslog),它可以将日志排队直到固定(在队列填充之前 swift )。

-使用syslog-ng。如果您在一开始遇到足够的痛苦,为什么不尝试一个完整的替代方法...

关于linux - rsyslog x509/certvalid需要允许的同级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35307954/

有关linux - rsyslog x509/certvalid需要允许的同级的更多相关文章

  1. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  2. ruby - rspec 需要 .rspec 文件中的 spec_helper - 2

    我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只

  3. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  4. ruby-on-rails - RSpec:避免使用允许接收的任何实例 - 2

    我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_

  5. ruby - 为什么在 ruby​​ 中创建 Rational 不需要新方法 - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Rubysyntaxquestion:Rational(a,b)andRational.new!(a,b)我正在阅读ruby镐书,我对创建有理数的语法感到困惑。Rational(3,4)*Rational(1,2)产生=>3/8为什么Rational不需要new方法(我还注意到例如我可以在没有new方法的情况下创建字符串)?

  6. ruby-on-rails - 需要帮助最大化多个相似对象中的 3 个因素并适当排序 - 2

    我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night

  7. ruby - 我需要从 facebook 游戏中抓取数据——使用 ruby - 2

    修改(澄清问题)我已经花了几天时间试图弄清楚如何从Facebook游戏中抓取特定信息;但是,我遇到了一堵又一堵砖墙。据我所知,主要问题如下。我可以使用Chrome的检查元素工具手动查找我需要的html-它似乎位于iframe中。但是,当我尝试抓取该iframe时,它​​是空的(属性除外):如果我使用浏览器的“查看页面源代码”工具,这与我看到的输出相同。我不明白为什么我看不到iframe中的数据。答案不是它是由AJAX之后添加的。(我知道这既是因为“查看页面源代码”可以读取Ajax添加的数据,也是因为我有b/c我一直等到我可以看到数据页面之后才抓取它,但它仍然不存在)。发生这种情况是因为

  8. ruby - 允许主机名包含下划线的 URI.parse 的替代方法 - 2

    我正在使用DMOZ的listofurltopics,其中包含一些具有包含下划线的主机名的url。例如:608609TheOuterHeaven610InformationandimagegalleryofMcFarlane'sactionfiguresforTrigun,Akira,TenchiMuyoandotherJapaneseSci-Fianimations.611Top/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures612虽然此url可以在网络浏览器中使用(或者至少在我的浏览器中可以使用:

  9. ruby - 需要重构为新的 Ruby 1.9 哈希语法 - 2

    这个问题在这里已经有了答案:HashsyntaxinRuby[duplicate](1个回答)关闭5年前。我有一个Recipe,其中包含以下未通过lint测试的代码:service'apache'dosupports:status=>true,:restart=>true,:reload=>trueend失败并出现错误:UsethenewRuby1.9hashsyntax.supports:status=>true,:restart=>true,:reload=>true不确定新语法是什么样的...有人可以帮忙吗?

  10. ruby-on-rails - 我真的需要在 Rails 中使用 csv gem 吗? - 2

    我的问题很简单:我是否必须在使用RubyonRails的类上require'csv'?如果我打开一个railsconsole并尝试使用CSVgem它可以工作,但我必须在文件中这样做吗? 最佳答案 CSVlibrary是ruby​​标准库的一部分;它不是gem(即第三方库)。与所有标准库(与核心库不同)一样,csv不会由ruby​​解释器自动加载。所以是的,在您的应用程序中某处您确实需要要求它:irb(main):001:0>CSVNameError:uninitializedconstantCSVfrom(irb):1from/Us

随机推荐