1

我对 Packetbeat 有一个有趣的问题。Packetbeat 安装在 Debian 10 系统上。它是最新版本的 Packetbeat(本周从 Elastic 下载区域全新安装),并将数据发送到同样安装在 Debian 10 系统上的 Elastic v7.7。

我在 Elastic 日志中看到了 DNS 数据(使用 Kibana-->Logs gui 查看它们时)。但是,我还在日志中看到了在运行 tcpdump 的数据包分析器上没有看到的其他 DNS 数据包,这些数据包来自运行 packetbeat 的同一系统。

这是显示客户端 (10.5.52.47) 的 DNS 调用的数据包分析器。wireshark 捕获过滤器设置为“端口 53”,显示过滤器设置为“ip.addr==10.5.52.47”。它与 packetbeat 在同一系统上运行(用于解决此问题)。 Wireshark 截图

1552    2020-06-04 20:31:34.297973  10.5.52.47  10.1.3.200  52874   53  DNS 93      Standard query 0x95f7 SRV 
1553    2020-06-04 20:31:34.298242  10.1.3.200  10.5.52.47  53  52874   DNS 165     Standard query response 0x95f7 No such name SRV 
1862    2020-06-04 20:32:53.002439  10.5.52.47  10.1.3.200  59308   53  DNS 90      Standard query 0xd67f SRV 
1863    2020-06-04 20:32:53.002626  10.1.3.200  10.5.52.47  53  59308   DNS 162     Standard query response 0xd67f No such name SRV 
1864    2020-06-04 20:32:53.004126  10.1.3.200  10.5.52.47  64594   53  DNS 84      Standard query 0xaaaa A 
1867    2020-06-04 20:32:53.516716  10.1.3.200  10.5.52.47  64594   53  DNS 84      Standard query 0xaaaa A
2731    2020-06-04 20:36:34.314959  10.5.52.47  10.1.3.200  53912   53  DNS 93      Standard query 0x2631 SRV 
2732    2020-06-04 20:36:34.315058  10.1.3.200  10.5.52.47  53  53912   DNS 165     Standard query response 0x2631 No such name SRV 

我从这些数据包中删除了实际的 DNS 查询信息,因为它与本主题无关。从 wireshark 输出中,您可以看到 20:32:53 从 10.5.52.47 到 DNS 服务器 10.1.3.200 的 DNS 查询。服务器在下一个数据包中响应此查询。此外,在同一时间之后,服务器还有另外两个响应。

客户端 10.5.52.47 的下一个 DNS 查询发生在 20:36:34。这也得到了服务器的即时响应。

这与 packetbeat 发送的 Kibana-->log 输出不同。在 Kibana 日志中,它显示以下内容: Kibana 日志的屏幕截图,显示实际的 DNS 调用和多个不存在的 DNS 调用(以黄色突出显示)

All the above info as captured in the packet capture
plus the following:
20:33:00.000 destination IP of 10.5.52.47 destination port of 53
Same thing at 
20:33:10.000
20:33:20.000
20:33:30.000
20:33:40.000

然后在 20:36:34 显示数据包捕获显示的 DNS 查询。

因此,这些在分钟后 00/10/20/30/40 秒结束的端口 53 似乎是凭空捏造的。此外,这些条目的弹性日志中没有填充其他字段。client.ip 为空,client.bytes、client.port 以及这些日志条目的所有 DNS 字段也是空的。数据包捕获和 Kibana 中列出的所有 DNS 条目的所有预期字段都填充了正确的数据。

有谁知道为什么会这样?上面的这个例子是一个小样本。多个系统每隔 10 秒就会出现这种情况。例如,在一分钟后的 10 或 20 或 30 或 40 或 50 或 60 秒,我看到这些日志条目中有 10 到 100 个(估计值),其中除了destination.ip、destination.byte 和destination 之外的所有字段都是空白的.port - 这些错误记录的字段中不包含客户端信息和 DNS 信息。

“正常”的 DNS 记录包含 Kibana 日志中列出的大约 20 个信息字段,而这些错误的只有四个字段(上面列出的字段和时间戳)。

这是来自这些 10 秒间隔之一的日志示例...

timestamp      Dest.ip     Dest.bytes  Dest.port
20:02:50.000 10.1.3.200 105 53
20:02:50.000 10.1.3.200 326 53
20:02:50.000 10.1.3.200 199 53
20:02:50.000 10.1.3.200 208 53
20:02:50.000 10.1.3.201 260 53
20:02:50.000 10.1.3.200 219 53
20:02:50.000 10.1.3.200 208 53
20:02:50.000 10.1.3.200 199 53
.
.
Plus 42 more of these at the same second
.
.
20:02:50.000 10.1.3.201 98 53

报告问题的 Kibana 日志视图 - '真实' dns 调用以黄色突出显示,不存在的 dns 调用由红线标记 - 记录的不存在 DNS 调用比真实 DNS 查询多得多

这是 packetbeat.yml 文件(仅显示未注释的行)

packetbeat.interfaces.device: enp0s25
packetbeat.flows:
  timeout: 30s
  period: 10s
packetbeat.protocols:
- type: dhcpv4
  ports: [67, 68]
- type: dns
  ports: [53]
  include_authorities: true
  include_additionals: true
setup.template.settings:
  index.number_of_shards: 1
setup.dashboards.enabled: true
setup.kibana:
  host: "1.1.1.1:5601"
output.elasticsearch:
  hosts: ["1.1.1.2:59200"]
  setup.template.overwrite: true
  setup.template.enabled: true

感谢您对可能导致此问题的原因的想法。

==================================================== ======================

20 年 6 月 8 日更新

由于这个问题,我不得不关闭 packetbeat,直到找到解决方案。一个单一的 packetbeat 系统在周末生成了 1 亿个文档,仅用于 DNS 查询。其中 98% 是由 packetbeat 创建的,并不是真正的 DNS 查询。

我今天早上在捕获这些 DNS 查询的 linux 机器上停止了 packetbeat 服务,并删除了这个索引。然后我重新启动了 packetbeat 实例并让它运行了大约 60 秒。然后我停止了 packetbeat 服务。在 60 秒内,有 22,119 个 DNS 文档被添加到索引中。当我删除创建的文件 packetbeat(不是真正的 DNS 查询)时,它删除了 21,391。给我留下了 728 个实际的 DNS 查询。在这种情况下,97% 的文档是由 packetbeat 创建的,还有 3% 是由我们的系统进行的由 packetbeat 捕获的“真实”DNS 查询创建的。

关于为什么这个系统会表现出这种行为的任何想法?

谢谢

4

0 回答 0