介绍
此前的教程(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服务器。
- 如果你仍然需要安装Suricata,那么你可以遵循这个教程,解释如何在Rocky Linux 8上安装Suricata(https://andsky.com/tech/tutorials/how-to-install-suricata-on-rocky-linux-8)。
您还需要另一个服务器来托管 Elasticsearch 和 Kibana. 这个服务器将被称为您的 Elasticsearch 服务器 。
- 4GB RAM 和 2 个 CPU 与非 root sudo 用户一起设置. 您可以通过遵循 Initial Server Setup with Rocky Linux 8来实现此目标。
对于本教程的目的,两台服务器都应该能够使用私人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.0
至10.255.255.255
(10/8 序列) *172.16.0.0
至172.31.255.255
(172.16/12 序列) *192.168.0.0
至192.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
,然后按RETURN
或ENTER
:
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.username
和elasticsearch.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 密钥,您可能会被要求输入密码,然后键入或粘贴到提示中,然后按ENTER
或RETURN
。
在 macOS 和 Linux 上,您的终端将与以下屏幕截图相似:
一旦您已通过 SSH 连接到您的 Elasticsearch 服务器,然后打开浏览器并访问 http://127.0.0.1:5601.您将被重定向到Kibana的登录页面:
如果您的浏览器无法连接到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 仪表板按下面的屏幕截图:
点击[Filebeat Suricata] 事件概览
结果,访问显示所有登录的 Suricata 事件概览的 Kibana 仪表板:
要访问 Suricata Alerts 仪表板,请重复搜索或单击事件仪表板中包含的Alerts
链接。
如果您想检查每个仪表板显示的事件和警报,请向页面的底部滚动,在那里您将找到列出每个事件和警报的表格。
Kibana 还具有内置的安全仪表板,您可以使用浏览器窗口左侧的菜单访问。 浏览到 Network 仪表板以查看地图上显示的事件,以及汇总网络上的事件数据。 您的仪表板应该看起来像下面的屏幕截图:
您可以滚动到网络仪表板的底部,找到一张列出与您指定的搜索时间框架相匹配的所有事件的表格,您也可以详细检查每个事件,或者选择一个事件来生成Kibana时间线,然后使用它来调查特定流量、警报或社区ID。
结论
在本教程中,您在独立的服务器上安装并配置了 Elasticsearch 和 Kibana. 您配置了两种工具以在私人 IP 地址上可用。
完成 Elasticsearch 和 Kibana 配置步骤后,您还在 Suricata 服务器上安装并配置了 Filebeat. 您使用 Filebeat 填充 Kibana 仪表板并开始向 Elasticsearch 发送 Suricata 日志。
最后,您创建了一个 SSH 隧道到您的 Elasticsearch 服务器,并登录到 Kibana. 您找到新的 Suricata 事件和警报仪表板,以及网络仪表板。
本系列的最后一本教程将指导您使用Kibana的SIEM功能来处理您的Suricata警报,其中您将探索如何创建案例来跟踪特定警报,时间线来相关网络流程,以及规则来匹配您想要更详细地跟踪或分析的特定Suricata事件。