用rsyslog进行加密传输#2


=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

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

错误一:
rsyslogd: could not load module '/lib64/rsyslog/lmnsd_gtls.so', dlopen: /lib64/rsyslog/lmnsd_gtls.so: cannot open shared object file: No such file or directory  [v8.23.0 try http://www.rsyslog.com/e/2066 ]

原因&解决方法:

错误原因在于没有安装「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 上看到的。

错误二:
rsyslogd: module 'imuxsock' already in this config, cannot be added [v8.23.0 try http://www.rsyslog.com/e/2221 ]
rsyslogd: module 'imtcp' already in this config, cannot be added [v8.23.0 try http://www.rsyslog.com/e/2221 ]

原因&解决方法:

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

$ModLoad imuxsock # local messages
$ModLoad imtcp # TCP listener

module(load="imuxsock") # provides support for local system logging (e.g. via logger command)
module(load="imtcp") # needs to be done just once

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

错误三:
rsyslogd: command 'InputTCPServerStreamDriverAuthMode' is currently not permitted - did you already set it via a RainerScript command (v6+ config)? [v8.23.0 try http://www.rsyslog.com/e/2222 ]
...
rsyslogd: Could not create tcp listener, ignoring port 10514 bind-address (null). [v8.23.0 try http://www.rsyslog.com/e/2078 ]

原因&解决方法:

这几个错误有可能是因为上面的错误没有解决导致的,当你把上面的几个错误解决了之后,再重启一下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=

, ,

《“用rsyslog进行加密传输#2”》 有 1 条评论

  1. 10 Useful tcpdump examples on Linux
    https://www.howtouselinux.com/post/10-useful-tcpdump-command-examples
    `
    # 抓取指定网卡上的流量(Capture traffic on specific interface (-i))
    $ tcpdump -i ens160
    $ tcpdump -i any

    # 抓取从特定主机/IP来的流量(Capture ip or host-specific packets)
    $ tcpdump -i ens160 -c 5 host 140.240.61.21

    # 抓取特定端口上的流量(Capture packets on a specific port (port))
    $ tcpdump -i any port 8000

    # 将抓取内容写入文件(Write packets to a file (-w))
    $ tcpdump -c 5 -w network_file_linux.pcap -i any

    # 抓取特定协议的流量(Capture packets from a specific protocol)
    $ tcpdump -i ens160 -c 5 -nn tcp

    # 用来源/目的主机对流量进行过滤(Filter tcpdump packets from specific source & dest host)
    $ tcpdump src 100.10.8.121
    $ tcpdump dst 14.211.62.121

    # 定时轮转写入抓取的流量(Rotate tcpdump packets)
    $ tcpdump -i ens160 -w /tmp/network-%H-%M.pcap -W 48 -G 300 -C 100

    # 同时抓取多主机的流量(Capture Multiple hosts with tcpdump)
    $ tcpdump src 192.168.0.10 or src 192.168.0.10

    # 用多端口进行过滤(Filter Multiple ports with tcpdump)
    $ tcpdump -i eth0 port 22 or port 9402

    # 用多条件进行过滤(Filter by Multiple conditions)
    $ tcpdump -i eth0 arp or icmp and host 192.168.0.10
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注