如何在 Rocky Linux 8 上使用 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和Rocky Linux 8创建自己的安全信息和事件管理(SIEM)工具。

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

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

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

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

前提条件

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

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

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

第1步:安装Elasticsearch和Kibana

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

1[environment second]
2sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

接下来,在您的 /etc/yum/yum.repos.d 目录中创建一个 elasticsearch.repo文件,使用vi' 或您偏好的编辑器,使用以下内容。

1[environment second]
2sudo vi /etc/yum.repos.d/elasticsearch.repo
 1[environment second]
 2[label /etc/yum.repos.d/elasticsearch.repo]
 3[elasticsearch]
 4name=Elasticsearch repository for 7.x packages
 5baseurl=https://artifacts.elastic.co/packages/7.x/yum
 6gpgcheck=1
 7gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
 8enabled=0
 9autorefresh=1
10type=rpm-md

如果您正在使用vi,当您完成更改时,请按ESC,然后按:x,将更改写入文件并停止。

现在使用dnf命令安装Elasticsearch和Kibana,按Y来接受有关GPG密钥指纹的任何提示:

1[environment second]
2sudo dnf install --enablerepo=elasticsearch elasticsearch kibana

使用 --enablerepo 选项来取消在 /etc/yum.repos.d/elasticsearch.repo 文件中的默认禁用设置. 这种方法确保 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。您的设备名称和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 来听取其私人网络接口上的连接。

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

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

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

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

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

接下来,使用vi短语SHIFT+G前往文件的尽头。

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

1[environment second]
2. . .
3discovery.type: single-node
4xpack.security.enabled: true

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

保存并关闭文件,当你完成编辑。

最后,添加防火墙规则,以确保您的 Elasticsearch 服务器可以在其私人网络接口上访问。

1[environment second]
2sudo firewall-cmd --permanent --zone=internal --change-interface=eth1
3sudo firewall-cmd --permanent --zone=internal --add-service=elasticsearch
4sudo firewall-cmd --permanent --zone=internal --add-service=kibana
5sudo systemctl reload firewalld.service

如果您的命令不同,请在第一个命令中代替eth1而不是private网络界面名,该命令会更改界面规则,以便使用内部防火墙d区,这比默认的公共区更为允许。

接下来的命令添加了规则,允许Elasticsearch在端口9200和9300上的流量,以及Kibana在端口5601上的流量。

最后的命令将重新加载 Firewalld 服务,新的永久规则将被放置。

接下来,您将启动 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:

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

「-q」旗压抑了工具的指令,而「--force」旗将确保您创建新的密钥。

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

将这三个密钥复制到安全的地方,然后将它们添加到Kibana的/etc/kibana/kibana.yml配置文件中。

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

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

使用「shift+g」的短縮來到檔案的結尾,將您複製的三行「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

完成编辑后,您将需要配置 Kibana 使用的用户名和密码连接到 Elasticsearch。

配置 Kibana 凭证

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

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

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

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

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

1[environment second]
2cd /usr/share/kibana/bin
3sudo ./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]
2sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

接下来,在您的 /etc/yum/yum.repos.d 目录中创建一个 elasticsearch.repo文件,使用vi' 或您偏好的编辑器:

1[environment third]
2sudo vi /etc/yum.repos.d/elasticsearch.repo
 1[environment third]
 2[label /etc/yum.repos.d/elasticsearch.repo]
 3[elasticsearch]
 4name=Elasticsearch repository for 7.x packages
 5baseurl=https://artifacts.elastic.co/packages/7.x/yum
 6gpgcheck=1
 7gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
 8enabled=0
 9autorefresh=1
10type=rpm-md

完成更改后,保存并退出文件. 现在使用 dnf 命令安装 Filebeat 包:

1[environment third]
2sudo dnf install --enablerepo=elasticsearch filebeat

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

1[environment third]
2sudo vi /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 服务器的私人 IP 地址中,在)部分中生成的弹性用户密码。

完成编辑后,保存并关闭文件,然后使用以下命令启用 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 possble 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 地址替换为 `您私人' 。
  • `203.0.113.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