如何在 Debian 11 上使用 Suricata 和 Elastic Stack 构建 SIEM

介绍

此前的教程(https://www.digitalocean.com/community/tutorial_series/securing-your-network-with-suricata)引导您通过安装,配置和运行Suricata作为入侵检测(IDS)和入侵预防(IPS)系统。您还了解了Suricata规则以及如何创建自己的。

在本教程中,您将探索如何将Suricata与Elasticsearch、Kibana和Filebeat集成,以开始使用Elastic Stack和Debian 11创建您自己的安全信息和事件管理(SIEM)工具,用于收集、汇总、存储和分析事件数据,以搜索安全威胁和网络和服务器上的可疑活动。

您将用来构建自己的SIEM工具的组件是:

Elasticsearch 存储、索引、相关并搜索来自 Suricata 服务器的安全事件* Kibana* 显示和导航在 Elasticsearch 中存储的安全事件日志** Filebeat* 分析 Suricata 的eve.json日志文件并将每个事件发送到 Elasticsearch 进行处理。

首先,您将安装和配置Elasticsearch和Kibana,并使用某些特定身份验证设置,然后将Filebeat添加到Suricata系统,以便将其eve.json日志发送到Elasticsearch。

最后,您将学习如何使用SSH和您的Web浏览器连接到Kibana,然后加载并与显示Suricata事件和警报的Kibana仪表板进行交互。

前提条件

如果你一直遵循本教程系列,那么你应该已经在 Debian 11 服务器上运行 Suricata. 这个服务器将被称为你的 Suricata 服务器。

  • 联合国 如果您还需要安装Suricata, 那么您可以遵循这个教程, 来解释 [如何在 Debian 11 (https://andsky.com/tech/tutorials/how-to-install-suricata-on-debian-11) 上安装Suricata] 。
  • 联合国 您还需要一些 Suricata 签名 , 并装入和配置以生成提醒, 或减少流量 。 遵循此系列中的 [了解 Suricata 签名教程] (https://andsky.com/tech/tutorials/understanding-suricata-signatures) , 以获得如何创建自己签名的指南 。 或者您可以通过下列方式下载一套完整的签名 [步骤 3 — 更新Suricata Rulesets

](https://andsky.com/tech/tutorials/how-to-install-suricata-on-debian-11# step-3-%E2%80%94-updating-suricata-rulesets)在如何安装 Suricata 教程中。

您还需要另一个服务器来托管 Elasticsearch 和 Kibana. 这个服务器将被称为您的 Elasticsearch 服务器

对于本教程的目的,两台服务器都应该能够使用私人IP地址进行通信。您可以使用像WireGuard这样的VPN(https://andsky.com/tech/tutorials/how-to-set-up-wireguard-on-ubuntu-20-04)来连接您的服务器,或者使用拥有主机之间的私人网络的云提供商。您也可以选择在同一服务器上运行Elasticsearch,Kibana,Filebeat和Suricata进行实验。

第1步:安装Elasticsearch和Kibana

本教程的第一步是在您的 Elasticsearch 服务器上安装 Elasticsearch 和 Kibana. 要开始,请使用以下命令将 Elastic GPG 密钥添加到您的服务器:

1[environment second]
2curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

接下来,将 Elastic 源列表添加到sources.list.d目录中,其中apt会搜索新的源:

1[environment second]
2echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

现在更新您的服务器的包索引并安装Elasticsearch和Kibana:

1[environment second]
2sudo apt update
3sudo apt install elasticsearch kibana

一旦您完成了安装包,请使用ip 地址显示命令查找并记录您的服务器的私人 IP 地址:

1[environment second]
2ip -brief address show

您将收到如下的输出:

1[environment second]
2[secondary_label Output]
3lo UNKNOWN 127.0.0.1/8 ::1/128
4eth0 UP 159.89.122.115/20 10.20.0.8/16 2604:a880:cad:d0::e56:8001/64 fe80::b832:69ff:fe46:7e5d/64
5eth1 UP 10.137.0.5/16 fe80::b883:5bff:fe19:43f3/64

此输出中的私人网络接口是突出的eth1设备,IPv4地址是10.137.0.5/16。您的设备名称和IP地址将有所不同。

  • 10.0.0.010.255.255.255 (10/8 序列) * 172.16.0.0172.31.255.255 (172.16/12 序列) * 192.168.0.0192.168.255.255 (192.168/16 序列)

如果您想了解更多有关这些块如何分配的信息,请访问 RFC 1918 规格)

记录您的 Elasticsearch 服务器的私人 IP 地址(在这种情况下 10.137.0.5)。这个地址将在本教程的剩余部分中被称为 your_private_ip。 另外,请注意网络接口的名称,在这种情况下 eth1。 在本教程的下一部分中,您将配置 Elasticsearch 和 Kibana 来收听来自您的 Suricata 服务器的私人 IP 地址上的连接。

第2步:配置 Elasticsearch

Elasticsearch 已配置为默认情况下仅接受本地连接。此外,它没有启用任何身份验证,因此像 Filebeat 这样的工具将无法向其发送日志。

配置 Elasticsearch 网络

由于 Your Elasticsearch 和 Suricata 服务器是单独的,您需要配置 Elasticsearch 以便在其私有网络接口上收听连接,您还需要配置防火墙规则以便在您的私有网络接口上访问 Elasticsearch。

使用nano或您偏好的编辑器打开/etc/elasticsearch/elasticsearch.yml文件:

1[environment second]
2sudo nano /etc/elasticsearch/elasticsearch.yml

在 50 至 60 行之间找到评论的 # network.host: 192.168.0.1 行,并在后面添加一个新的行,以配置 network.bind_host 设置,如下所示:

 1[environment second]
 2[label /etc/elasticsearch/elasticsearch.yml]
 3# By default Elasticsearch is only accessible on localhost. Set a different
 4# address here to expose this node on the network:
 5#
 6#network.host: 192.168.0.1
 7network.bind_host: ["127.0.0.1", "your_private_ip"]
 8#
 9# By default Elasticsearch listens for HTTP traffic on the first free port it
10# finds starting at 9200. Set a specific HTTP port here:

此行将确保Elasticsearch在其本地地址上仍然可用,以便Kibana可以访问它,以及您的服务器的私人IP地址。

接下来,使用nano快捷键CTRL+v前往文件的尽头,直到您到达尽头。

将以下突出的行添加到文件的末尾:

1[environment second]
2[label /etc/elasticsearch/elasticsearch.yml]
3. . .
4discovery.type: single-node
5xpack.security.enabled: true

discovery.type设置允许 Elasticsearch 作为单个节点运行,而不是在其他 Elasticsearch 服务器集群中运行。

如果您正在使用nano,您可以使用CTRL+X,然后YENTER来确认。

最后,添加防火墙规则,以确保您的 Elasticsearch 服务器可通过其私人网络接口访问。 如果您遵循前提教程并使用了无复杂防火墙(‘ufw’),请执行以下命令:

1[environment second]
2sudo ufw allow in on eth1
3sudo ufw allow out on eth1

如果它使用不同的名称,则更换eth1而不是private network接口。

接下来,您将启动 Elasticsearch 示范器,然后配置密码以使用xpack安全模块。

启动 Elasticsearch

现在,您已经配置了网络和 Elasticsearch 的xpack安全设置,您需要启动它,以便更改生效。

运行以下systemctl命令来启动 Elasticsearch:

1[environment second]
2sudo systemctl start elasticsearch.service

一旦 Elasticsearch 完成启动,您可以继续到本教程的下一部分,在那里您将生成内置于 Elasticsearch 的默认用户的密码。

配置 Elasticsearch 密码

现在您已启用了xpack.security.enabled设置,您需要为默认的 Elasticsearch 用户生成密码。

将下列命令执行到目录中,然后为所有默认用户生成随机密码:

1[environment second]
2cd /usr/share/elasticsearch/bin
3sudo ./elasticsearch-setup-passwords auto

您将收到如下输出。当被要求继续时,按y,然后按RETURNENTER:

 1[environment second]
 2Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
 3The passwords will be randomly generated and printed to the console.
 4Please confirm that you would like to continue [y/N]y
 5
 6Changed password for user apm_system
 7PASSWORD apm_system = eWqzd0asAmxZ0gcJpOvn
 8
 9Changed password for user kibana_system
10PASSWORD kibana_system = 1HLVxfqZMd7aFQS6Uabl
11
12Changed password for user kibana
13PASSWORD kibana = 1HLVxfqZMd7aFQS6Uabl
14
15Changed password for user logstash_system
16PASSWORD logstash_system = wUjY59H91WGvGaN8uFLc
17
18Changed password for user beats_system
19PASSWORD beats_system = 2p81hIdAzWKknhzA992m
20
21Changed password for user remote_monitoring_user
22PASSWORD remote_monitoring_user = 85HF85Fl6cPslJlA8wPG
23
24Changed password for user elastic
25PASSWORD elastic = 6kNbsxQGYZ2EQJiqJpgl

您将需要在本教程的下一部分使用)步骤中使用弹性用户的密码。

在本教程的这一点上,您已经完成了配置Elasticsearch。下一节解释了如何配置Kibana的网络设置和其xpack安全模块。

第3步:配置Kibana

在本教程的上一部分中,您配置了Elasticsearch来听取您的Elasticsearch服务器的私人IP地址上的连接,您将需要对Kibana做同样的事情,以便Suricata服务器上的FileBeats可以访问它。

首先,您将通过生成一些秘密来启用Kibana的xpack安全功能,而Kibana将用于在Elasticsearch中存储数据,然后您将配置Kibana的网络设置和身份验证细节以连接到Elasticsearch。

在Kibana中启用xpack.security

要开始使用Kibana中的),以及各种存储的仪表板和数据视图在Elasticsearch中。

您可以使用 kibana-encryption-keys 工具生成所需的加密密钥,该工具包含在 /usr/share/kibana/bin 目录中。

1[environment second]
2cd /usr/share/kibana/bin/
3sudo ./kibana-encryption-keys generate -q

-q旗压抑了工具的指令,所以您只能收到如下类型的输出:

1[secondary_label Output]
2xpack.encryptedSavedObjects.encryptionKey: 66fbd85ceb3cba51c0e939fb2526f585
3xpack.reporting.encryptionKey: 9358f4bc7189ae0ade1b8deeec7f38ef
4xpack.security.encryptionKey: 8f847a594e4a813c4187fa93c884e92b

将其添加到 Kibana 的 /etc/kibana/kibana.yml 配置文件中。

使用nano或您喜爱的编辑器打开文件:

1[environment second]
2sudo nano /etc/kibana/kibana.yml

使用nano快捷键CTRL+v到达文件的尽头,直到您到达尽头,将您复制的三个xpack行粘贴到文件的尽头:

 1[label /etc/kibana/kibana.yml]
 2[environment second]
 3. . .
 4
 5# Specifies locale to be used for all localizable strings, dates and number formats.
 6# Supported languages are the following: English - en , by default , Chinese - zh-CN .
 7#i18n.locale: "en"
 8
 9xpack.encryptedSavedObjects.encryptionKey: 66fbd85ceb3cba51c0e939fb2526f585
10xpack.reporting.encryptionKey: 9358f4bc7189ae0ade1b8deeec7f38ef
11xpack.security.encryptionKey: 8f847a594e4a813c4187fa93c884e92b

保持文件打开,然后进入下一节,在那里您将配置Kibana的网络设置。

创建Kibana网络

要将Kibana的网络配置为在您的Elasticsearch服务器的私人IP地址上可用,请在/etc/kibana/kibana.yml中找到评论中的# server.host:localhost字段。

 1[label /etc/kibana/kibana.yml]
 2[environment second]
 3# Kibana is served by a back end server. This setting specifies the port to use.
 4#server.port: 5601
 5
 6# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
 7# The default is 'localhost', which usually means remote machines will not be able to connect.
 8# To allow connections from remote users, set this parameter to a non-loopback address.
 9#server.host: "localhost"
10server.host: "your_private_ip"

取代您的私人IP地址,而不是your_private_ip

如果您正在使用nano,您可以使用CTRL+X,然后YENTER来确认。

接下来,您需要配置 Kibana 用于连接到 Elasticsearch 的用户名和密码。

配置 Kibana 凭证

有两种方法可以设置 Kibana 使用的用户名和密码来验证 Elasticsearch. 第一种方法是编辑 /etc/kibana/kibana.yml 配置文件并在那里添加值。

我们将在本教程中使用键盘方法,因为它可以避免直接编辑Kibana的配置文件。

如果您更喜欢编辑该文件,则要配置的设置为elasticsearch.usernameelasticsearch.password

如果您选择编辑配置文件,请跳过本节中的其他步骤。

若要使用kibana-keystore实用程序将秘密添加到键盘上,请先将cd添加到/usr/share/kibana/bin目录中。

1[environment second]
2sudo ./kibana-keystore add elasticsearch.username

你会收到如下这样的快递:

1[label Username Entry]
2[environment second]
3Enter value for elasticsearch.username: *************

当被提示时,输入kibana_system,要么通过复制和粘贴,要么通过仔细键入用户名。你输入的每个字符都将以一个* 星星字符掩盖。

现在重复对密码的相同命令. 请确保复制您在本教程的上一节中生成的kibana_system用户的密码。 作为参考,在本教程中示例密码是1HLVxfqZMd7aFQS6Uabl

运行以下命令来设置密码:

1[environment second]
2sudo ./kibana-keystore add elasticsearch.password

当被提示时,粘贴密码以避免任何转录错误:

1[label Password Entry]
2[environment second]
3Enter value for elasticsearch.password: ********************

开始Kibana

现在,你已经配置了网络和Kibana的xpack安全设置,以及添加了密钥门的凭证,你需要启动它,以便更改生效。

运行以下systemctl命令来重新启动Kibana:

1[environment second]
2sudo systemctl start kibana.service

一旦Kibana启动,您可以继续到本教程的下一部分,在那里您将在Suricata服务器上配置Filebeat以将其日志发送到Elasticsearch。

第4步:安装FileBeat

现在您的 Elasticsearch 和 Kibana 流程已经配置了正确的网络和身份验证设置,下一步是在您的 **Suricata 服务器上安装和设置 Filebeat。

要开始安装 Filebeat,请使用以下命令将 Elastic GPG 键添加到 Suricata 服务器:

1[environment third]
2curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

接下来,将 Elastic 源列表添加到sources.list.d目录中,其中apt会搜索新的源:

1[environment third]
2echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

现在更新服务器的包索引并安装Filebeat包:

1[environment third]
2sudo apt update
3sudo apt install filebeat

接下来,您需要配置 Filebeat 以连接到 Elasticsearch 和 Kibana. 使用「nano」或您喜爱的编辑器打开 `/etc/filebeat/filebeat.yml' 配置文件:

1[environment third]
2sudo nano /etc/filebeat/filebeat.yml

查找围绕 100 行的文件的Kibana部分,在评论的# host:localhost:5601字段后添加一行,指向您的 Kibana 实例的私人 IP 地址和端口:

 1[label /etc/filebeat/filebeat.yml]
 2[environment third]
 3. . .
 4# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
 5# This requires a Kibana endpoint configuration.
 6setup.kibana:
 7
 8  # Kibana Host
 9  # Scheme and port can be left out and will be set to the default (http and 5601)
10  # In case you specify and additional path, the scheme is required: http://localhost:5601/path
11  # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
12  #host: "localhost:5601"
13  host: "your_private_ip:5601"
14
15. . .

这种变化将确保Filebeat可以连接到Kibana,以便在Elasticsearch中创建各种SIEM索引、仪表板和处理管道,以处理您的Suricata日志。

接下来,在 130 行左右的文件中找到Elasticsearch 输出部分,并编辑主机用户名密码设置以匹配您的 Elasticsearch 服务器的值:

 1output.elasticsearch:
 2  # Array of hosts to connect to.
 3  hosts: ["your_private_ip:9200"]
 4
 5  # Protocol - either `http` (default) or `https`.
 6  #protocol: "https"
 7
 8  # Authentication credentials - either API key or username/password.
 9  #api_key: "id:api_key"
10  username: "elastic"
11  password: "6kNbsxQGYZ2EQJiqJpgl"
12
13. . .

在您的 Elasticsearch 服务器中,更换)部分中生成的弹性用户密码。

如果您正在使用nano,您可以使用CTRL+X,然后YENTER来确认。

接下来,使用以下命令启用 Filebeats 内置的 Suricata 模块:

1[environment third]
2sudo filebeat modules enable suricata

现在Filebeat已配置为连接到Elasticsearch和Kibana,并启用Suricata模块,下一步是将SIEM仪表板和管道加载到Elasticsearch。

运行filebeat setup命令,下载所有内容可能需要几分钟:

1[environment third]
2sudo filebeat setup

一旦命令完成,您应该收到如下的输出:

 1[secondary_label Output]
 2[environment third]
 3Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling.
 4
 5Index setup finished.
 6Loading dashboards (Kibana must be running and reachable)
 7Loaded dashboards
 8Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
 9See more: https://www.elastic.co/guide/en/machine-learning/current/index.html
10It is not possible to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat.
11Loaded machine learning job configurations
12Loaded Ingest pipelines

如果没有错误,请使用systemctl命令启动FileBeat,它将从Suricata的eve.json日志开始发送事件到Elasticsearch。

1[environment third]
2sudo systemctl start filebeat.service

现在你已经配置了 Filebeat、Kibana 和 Elasticsearch 来处理你的 Suricata 日志,本教程的最后一步是连接到 Kibana 并探索 SIEM 仪表板。

步骤5 — 导航Kibana的SIEM仪表板

Kibana 是 Elastic 堆栈的图形组件. 您将使用 Kibana 与您的浏览器一起探索 Suricata 的事件和警报数据. 由于您将 Kibana 配置为仅通过您的 Elasticsearch 服务器的私人 IP 地址可用,您将需要使用 SSH 隧道连接到 Kibana。

通过 SSH 连接到 Kibana

SSH有一个L选项,允许您通过连接到远程 IP 地址和服务器上的端口将本地端口上的网络流量转发,您将使用此选项将流量从浏览器转发到Kibana实例。

在 Linux、macOS 和更新版本的 Windows 10 和更高版本中,您可以使用内置的 SSH 客户端创建隧道. 您将使用此命令每次要连接到 Kibana。

在本地桌面或笔记本电脑上的终端中运行以下命令,以创建向 Kibana 的 SSH 隧道:

1[environment local]
2ssh -L 5601:your_private_ip:5601 [email protected] -N

SSH的各种论点是:

  • `-L ' 旗将 " 5601 " 号港口的交通向本地系统传送到远程服务器。
  • 联合国 命令的 私人: ip: 5601 部分指定了您的 弹性搜索 服务器上的服务, 您的流量将被拖入该服务器 。 在这种情况下,服务是Kibana。 请将您的 Elasticsearch 服务器的私人 IP 地址替换为您的私人 ip ,
  • `203.11.0.5'地址是您用来连接和管理您的服务器的公共IP地址。 替换您的 Elasticsearch 服务器的公共IP地址 。
  • **-N ' 旗指示SSH** 不** 像交互式/bin/bash'外壳那样运行一个命令,而只是把连接打开。 举例来说,它通常用于转发端口。 .

如果您想在任何时候关闭隧道,请按CTRL+C

在 Windows 上,您的终端应该像下面的屏幕截图:

注意:如果您不使用 SSH 密钥,您可能会被要求输入密码,然后键入或粘贴到提示中,然后按ENTERRETURN

Screenshot of Windows Command Prompt Showing SSH Command to Port Forward to Kibana

在 macOS 和 Linux 上,您的终端将与以下屏幕截图相似:

Screenshot of Windows Command Prompt Showing SSH Command to Port Forward to Kibana

一旦您已通过 SSH 连接到您的 Elasticsearch 服务器,然后打开浏览器并访问 http://127.0.0.1:5601.您将被重定向到Kibana的登录页面:

Screenshot of a Browser on Kibana's Login Page

如果您的浏览器无法连接到Kibana,您将在您的终端收到如下消息:

1[secondary_label Output]
2channel 3: open failed: connect failed: No route to host

此错误表明您的 SSH 隧道无法在您的服务器上访问 Kibana 服务. 确保您已为您的 Elasticsearch 服务器指定正确的私人 IP 地址,并在浏览器中重新加载页面。

登录到您的Kibana服务器使用弹性的用户名和您在本教程中先前复制的密码为用户。

浏览Kibana SIEM仪表板

一旦您登录到Kibana,您可以探索Filebeat为您配置的Suricata仪表板。

在Kibana欢迎页面顶部的搜索框中,输入搜索术语 type:dashboard suricata. 此搜索将返回两个结果:Suricata 事件和 Suricata Alerts 仪表板按下面的屏幕截图:

Screenshot of a Browser Using Kibana's Global Search Box to Locate Suricata Dashboards

点击[Filebeat Suricata] 事件概览结果,访问显示所有登录的 Suricata 事件概览的 Kibana 仪表板:

Screenshot of a Browser on Kibana's Suricata Events Dashboard

要访问 Suricata Alerts 仪表板,请重复搜索或单击事件仪表板中包含的Alerts链接。

Screenshot of a Browser on Kibana's Suricata Alerts Dashboard

如果您想检查每个仪表板显示的事件和警报,请向页面的底部滚动,在那里您将找到列出每个事件和警报的表格。

Kibana 还具有内置的安全仪表板,您可以使用浏览器窗口左侧的菜单访问。 浏览到 Network 仪表板以查看地图上显示的事件,以及汇总网络上的事件数据。 您的仪表板应该看起来像下面的屏幕截图:

Screenshot of a Browser on Kibana's Security -> Network Dashboard

您可以滚动到网络仪表板的底部,找到一张列出与您指定的搜索时间框架相匹配的所有事件的表格,您也可以详细检查每个事件,或者选择一个事件来生成Kibana时间线,然后使用它来调查特定流量、警报或社区ID。

结论

在本教程中,您在独立的服务器上安装并配置了 Elasticsearch 和 Kibana. 您配置了两种工具以在私人 IP 地址上可用。

完成 Elasticsearch 和 Kibana 配置步骤后,您还在 Suricata 服务器上安装并配置了 Filebeat. 您使用 Filebeat 填充 Kibana 仪表板并开始向 Elasticsearch 发送 Suricata 日志。

最后,您创建了一个 SSH 隧道到您的 Elasticsearch 服务器,并登录到 Kibana. 您找到新的 Suricata 事件和警报仪表板,以及网络仪表板。

本系列的最后一本教程将指导您使用Kibana的SIEM功能来处理您的Suricata警报,其中您将探索如何创建案例来跟踪特定警报,时间线来相关网络流程,以及规则来匹配您想要更详细地跟踪或分析的特定Suricata事件。

Published At
Categories with 技术
comments powered by Disqus