用rsyslog进行加密传输#2

本文最后更新于2016年12月17日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

缘由:

工作需要,学习需要

正文:

参考解答:

rsyslog的大体配置过程参考官方的几篇文章:

  1. 整体架构的概述:http://www.rsyslog.com/doc/v8-stable/tutorials/tls_cert_summary.html & http://www.rsyslog.com/doc/tls_cert_server.html
  2. 设置CA(证书颁发机构):http://www.rsyslog.com/doc/v8-stable/tutorials/tls_cert_ca.html
  3. 生成各机器的证书:http://www.rsyslog.com/doc/v8-stable/tutorials/tls_cert_machine.html
  4. 设置rsyslog中央日志服务器:http://www.rsyslog.com/doc/v8-stable/tutorials/tls_cert_server.html
  5. 设置rsyslog客户端服务器:http://www.rsyslog.com/doc/v8-stable/tutorials/tls_cert_client.html

具体的内容这里不细说,官方文档里都有写。这里主要记录一下我在实际配置过程中碰到的问题以及对应的解决办法:

错误一:

原因&解决方法:

错误原因在于没有安装「rsyslog-gnutls」,之前我只是在生成证书的时候安装了「gnutls-utils」,没想到还需要专门给rsyslog安装「rsyslog-gnutls」。错误提示其实已经非常详细了,但是比较坑的地方在于 http://www.rsyslog.com/e/2066 这个链接会自动跳转至 http://kb.monitorware.com/kbeventdb-list-1-Adiscon-rsyslog-rsyslogd-2066.html 并提示「403 Forbiden」无权限访问(错误提示里面给出的链接基本上都是这样,我为此还专门给作者写了一封邮件过去说这个问题。。。)

解决办法是在 http://askubuntu.com/questions/384858/could-not-load-module-rsyslog-lmnsd-gtls-so 上看到的。

错误二:

原因&解决方法:

同一模块的加载指令在所有的配置文件中最多只能出现一次,比如:

只能出现一次,而且以我实际配置的有限经验来看,建议将这种模块加载的指令放在「/etc/rsyslog.conf」这个主配置文件中。

错误三:

原因&解决方法:

这几个错误有可能是因为上面的错误没有解决导致的,当你把上面的几个错误解决了之后,再重启一下rsyslog服务,这几个错误可能就不存在了。

技巧一:

先阅读一下官方的新手指南 http://www.rsyslog.com/newbie-guide-to-rsyslog/ 会很有帮助,还有一些下面的参考链接:

技巧二:

在新增/修改了rsyslog的配置文件之后,可以用「-N」选项先手动测试一下是否存在语法错误:

rsyslogd -N 3 -f /etc/rsyslogd.conf # 「-f」选项是可选的,用于显示指定要测试的配置文件的路径,默认是对/etc/rsyslogd.conf进行测试
rsyslogd -N 3 -f /etc/rsyslogd.d/central.conf
验证TCP+TLS是否有作用:

因为最初采用rsyslog的TCP+TLS方案就是为了要保证日志能完整的接收(不能出现丢包或被篡改等情况),我们是通过证书的方式来避免MITM攻击的,通过TCP以及rsyslog自身的一些机制(比如:重传、缓存至文件……)来保证完整接收的,这里我们只需要验证一下在传输过程中日志是否被加密了就行。下面是测试方案以及实际效果:

机器1:rsyslog-ca(证书颁发)
机器2:rsyslog-central(日志收集、存储)
机器3:rsyslog-client01(日志来源、转发)
机器4:rsyslog-client02(日志来源、转发)

用tcpdump监听指定网卡的10514端口(rsyslog的监听端口),添加「-A」选项将抓到的包以ASCII形式打印出来,然后先后在机器3、机器1上用 logger 命令往设定的 facitlity.priority 上发消息(logger -t "Security" -p local5.notice "this is just a test on $(hostname) @ $(date +%F_%T)"),在机器3和机器2之间的日志传输是我们用TLS进行了加密的,所以搜不到关键字;在机器1和机器2之间的日志传输是明文TCP传输,所以可以搜到关键字。

综上,我们的rsyslog的TCP+TLS方案是有效果的。

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3062.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注