如何在 Rocky Linux 8 上安装和配置 Suricata IDS 以及 Elastic Stack
在此页
- 先决条件
- 配置防火墙
- 第 1 部分
- 第 1 步 - 安装 Suricata
- 第 2 步 - 配置 Suricata
- 启用社区 ID
- 选择网络接口
- 实时规则重新加载
- 配置目录权限
- 添加规则集提供商
- 配置防火墙
- 启动 Elasticsearch
- 创建 Elasticsearch 密码
- 配置 Kibana 端口
- 配置 Kibana 访问
- 启动 Kibana
- 使用 SSH 本地隧道
- 使用 Nginx 反向代理
- 配置防火墙
- 安装和配置 SSL
- 安装和配置 Nginx
Suricata 是一种网络监控工具,可检查和处理流经您服务器的每个互联网流量数据包。它可以在检测到任何可疑活动时生成日志事件、触发警报并丢弃流量。
您可以在单台机器上安装 Suricata 以监控其流量,也可以部署在网关主机上以扫描来自连接到它的其他服务器的所有传入和传出流量。您可以将 Suricata 与 Elasticsearch、Kibana 和 Filebeat 结合起来,创建一个安全信息和事件管理 (SIEM) 工具。
在本教程中,您将在 Rocky Linux 8 服务器上安装 Suricata IDS 和 ElasticStack。堆栈的各个组件是:
- Elasticsearch 用于存储、索引、关联和搜索来自服务器的安全事件。
- Kibana 用于显示存储在 Elasticsearch 中的日志。
- Filebeat 解析 Suricatas
eve.json
日志文件并将每个事件发送到 Elasticsearch 进行处理。 - Suricata 扫描网络流量以查找可疑事件并丢弃无效数据包。
本教程分为两部分,第一部分将介绍安装和配置 Suricata,第二部分将介绍安装和配置 Elastic Stack。
在我们的教程中,我们将在不同的服务器上安装 Suricata 和 Elastic stack。
先决条件
-
The servers hosting the Elastic Stack and Suricata should have a minimum of 4GB RAM and 2 CPU cores.
-
The servers should be able to communicate with each other using private IP addresses.
-
The servers should be running Rocky Linux 8 with a non-root sudo user.
-
If you want to access Kibana dashboards from everywhere, set up a domain (
kibana.example.com
) pointing to the server where Suricata will be installed. -
Install essential packages on both servers.
$ sudo dnf install yum-utils nano curl
配置防火墙
第1部分
第 1 步 - 安装 Suricata
要安装 Suricata,您需要将开放信息安全基金会 (OISF) 软件包存储库添加到您的服务器。
$ sudo dnf install 'dnf-command(copr)' $ sudo dnf copr enable @oisf/suricata-6.0
第一个命令为
dnf
包安装程序启用社区项目 (copr
)。第二个命令启用 OISF 存储库并将其添加到您的系统。suricata-6.0
为软件的最新稳定版本启用存储库。每次出现提示时按y
和ENTER
。接下来,添加 EPEL 存储库。
$ sudo dnf install epel-release
安装 Suricata。
$ sudo dnf install suricata
启用 Suricata 服务。
$ sudo systemctl enable suricata
第 2 步 - 配置 Suricata
Suricata 将其配置存储在
/etc/suricata/suricata.yaml
文件中。 Suricata 的默认模式是 IDS(入侵检测系统)模式,其中仅记录流量而不停止。如果您是 Suricata 的新手,您应该保持模式不变。配置完成并了解更多信息后,您可以打开 IPS(入侵防御系统)模式。启用社区 ID
社区 ID 字段可以更轻松地关联不同监控工具生成的记录之间的数据。由于我们将 Suricata 与 Elasticsearch 一起使用,因此启用社区 ID 会很有用。
打开文件
/etc/suricata/suricata.yaml
进行编辑。$ sudo nano /etc/suricata/suricata.yaml
找到
# Community Flow ID
行并将变量community-id
的值设置为true
。. . . # Community Flow ID # Adds a 'community_id' field to EVE records. These are meant to give # records a predictable flow ID that can be used to match records to # output of other tools such as Zeek (Bro). # # Takes a 'seed' that needs to be same across sensors and tools # to make the id less predictable. # enable/disable the community id feature. community-id: true . . .
现在,您的事件将带有一个 ID,例如
1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ=
,您可以使用它来匹配不同监控工具中的数据集。选择网络接口
默认的 Suricata 配置文件检查
eth0
设备/网络接口上的流量。如果您的服务器使用不同的网络接口,您将需要在配置中更新它。使用以下命令检查网络接口的设备名称。
$ ip -p -j route show default
您将收到如下输出。
[ { "dst": "default", "gateway": "164.90.192.1", "dev": "eth0", "protocol": "static", "metric": 100, "flags": [ ] } ]
dev
变量指的是网络设备。在我们的输出中,它显示eth0
作为网络设备。根据您的系统,您的输出可能会有所不同。现在您知道了您的设备名称,请打开配置文件。
$ sudo nano /etc/suricata/suricata.yaml
找到第 580 行附近的
af-packet:
行。在它下面,将变量interface
的值设置为您系统的设备名称。# Linux high speed capture support af-packet: - interface: eth0 # Number of receive threads. "auto" uses the number of cores #threads: auto # Default clusterid. AF_PACKET will load balance packets based on flow. cluster-id: 99 . . .
如果你想添加额外的接口,你可以通过将它们添加到
af-packet
部分底部的第 650 行左右来实现。要添加新接口,请将其插入
- interface: default
部分的正上方,如下所示。# For eBPF and XDP setup including bypass, filter and load balancing, please # see doc/userguide/capture-hardware/ebpf-xdp.rst for more info. - interface: enp0s1 cluster-id: 98 ... - interface: default #threads: auto #use-mmap: no #tpacket-v3: yes
我们在示例中添加了新接口
enp0s1
和cluster-id
变量的唯一值。您需要在添加的每个接口中包含一个唯一的集群 ID。实时规则重新加载
每次添加、删除和编辑其规则时都需要重新启动 Suricata。通过启用 Live Rule,Suricata 可以在不重新启动的情况下处理任何规则更改。
要启用实时重新加载,请在配置文件的底部添加以下行。
. . . detect-engine: - rule-reload: true
启用实时重新加载后,您可以使用以下命令重新加载规则,而无需重新启动 Suricata 进程。
$ sudo kill -usr2 $(pidof suricata)
$ (pidof suricata)
标志定位 Suricata 进程的进程 ID。-usr2
命令的kill
部分向 Suricata 进程发送一个SIGUSR2
信号。SIGUSR2
信号配置有 Suricata 以重新加载规则。完成后,按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
配置目录权限
Suricata 在安装过程中自动创建了一个名为
suricata
的系统用户和组。您需要为安装提供适当的目录权限才能正常工作。运行以下命令将
suricata
设置为 Suricatas 目录的组。$ sudo chgrp -R suricata /etc/suricata $ sudo chgrp -R suricata /var/lib/suricata/rules $ sudo chgrp -R suricata /var/lib/suricata/update $ sudo chgrp -R suricata /var/log/suricata
设置组读写权限。
$ sudo chmod -R g+r /etc/suricata/ $ sudo chmod -R g+rw /var/lib/suricata/rules $ sudo chmod -R g+rw /var/lib/suricata/update $ sudo chmod -R g+rw /var/log/suricata
将您当前的用户名添加到 suricata 组中,这样您就可以直接执行操作而无需 sudo。
$ sudo usermod -a -G suricata $USER
要应用新的组成员资格,请退出服务器并重新登录,或键入以下内容:
$ su - ${USER}
系统将提示您输入用户密码以继续。
通过键入以下内容确认您的用户现在已添加到 suricata 组:
$ id -nG username sudo suricata
第 3 步 - 配置 Suricata 规则
默认情况下,Suricata 仅使用一组有限的规则来检测网络流量。您可以使用名为
suricata-update
的工具从外部提供商添加更多规则集。运行以下命令以包含其他规则。$ suricata-update 16/2/2022 -- 07:00:16 - <Info> -- Using data-directory /var/lib/suricata. 16/2/2022 -- 07:00:16 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml 16/2/2022 -- 07:00:16 - <Info> -- Using /usr/share/suricata/rules for Suricata provided rules. ..... 16/2/2022 -- 07:00:16 - <Info> -- No sources configured, will use Emerging Threats Open ('https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz', None, True) 16/2/2022 -- 07:00:16 - <Info> -- Checking https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz.md5. 16/2/2022 -- 07:00:16 - <Info> -- Fetching https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz. 100% - 3162050/3162050 ..... 16/2/2022 -- 07:00:23 - <Info> -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 32004; enabled: 24611; added: 8; removed 1; modified: 1218 16/2/2022 -- 07:00:23 - <Info> -- Writing /var/lib/suricata/rules/classification.config 16/2/2022 -- 07:00:23 - <Info> -- Testing with suricata -T. 16/2/2022 -- 07:01:16 - <Info> -- Done.
添加规则集提供者
您可以通过添加更多提供商来扩展 Suricatas 规则。它可以从各种免费和商业提供商那里获取规则。
您可以使用以下命令列出默认提供程序列表。
$ suricata-update list-sources
例如,如果你想包含
tgreen/hunting
规则集,你可以使用以下命令启用它。$ suricata-update enable-source tgreen/hunting
再次运行
suricata-update
命令下载并更新新规则。第 4 步 - 验证 Suricata 配置
Suricata 附带一个验证工具来检查配置文件和规则是否有错误。运行以下命令以运行验证工具。
$ sudo suricata -T -c /etc/suricata/suricata.yaml -v 22/2/2022 -- 23:20:10 - <Info> - Running suricata under test mode 22/2/2022 -- 23:20:10 - <Notice> - This is Suricata version 6.0.4 RELEASE running in SYSTEM mode 22/2/2022 -- 23:20:10 - <Info> - CPUs/cores online: 2 22/2/2022 -- 23:20:10 - <Info> - dropped the caps for main thread 22/2/2022 -- 23:20:10 - <Info> - fast output device (regular) initialized: fast.log 22/2/2022 -- 23:20:10 - <Info> - eve-log output device (regular) initialized: eve.json 22/2/2022 -- 23:20:10 - <Info> - stats output device (regular) initialized: stats.log 22/2/2022 -- 23:20:21 - <Info> - 1 rule files processed. 24611 rules successfully loaded, 0 rules failed 22/2/2022 -- 23:20:21 - <Info> - Threshold config parsed: 0 rule(s) found 22/2/2022 -- 23:20:21 - <Info> - 24614 signatures processed. 1216 are IP-only rules, 4120 are inspecting packet payload, 19074 inspect application layer, 108 are decoder event only 22/2/2022 -- 23:21:02 - <Notice> - Configuration provided was successfully loaded. Exiting. 22/2/2022 -- 23:21:03 - <Info> - cleaning up signature grouping structure... complete
-T
标志指示 Suricata 在测试模式下运行,-c
标志配置配置文件的位置,-v
标志打印命令的详细输出。根据您的系统配置和添加的规则数量,该命令可能需要几分钟才能完成。第 5 步 - 运行 Suricata
现在 Suricata 已配置和设置,是时候运行该应用程序了。
$ sudo systemctl start suricata
检查进程的状态。
$ sudo systemctl status suricata
如果一切正常,您应该会看到以下输出。
? suricata.service - Suricata Intrusion Detection Service Loaded: loaded (/usr/lib/systemd/system/suricata.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-02-16 07:14:22 UTC; 32min ago Docs: man:suricata(1) Process: 1494 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS) Main PID: 1496 (Suricata-Main) Tasks: 8 (limit: 23479) Memory: 367.5M CGroup: /system.slice/suricata.service ??1496 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -i eth0 --user suricata Feb 16 07:14:22 suricata systemd[1]: Starting Suricata Intrusion Detection Service... Feb 16 07:14:22 suricata systemd[1]: Started Suricata Intrusion Detection Service.
该过程可能需要几分钟才能完成对所有规则的解析。因此,上述状态检查并不能完全表明 Suricata 是否已准备就绪。您可以使用以下命令监视日志文件。
$ sudo tail -f /var/log/suricata/suricata.log
如果您在日志文件中看到以下行,则表示 Suricata 正在运行并准备好监控网络流量。
16/02/2022 -- 07:18:39 - <Info> - All AFP capture threads are running.
第 6 步 - 测试 Suricata 规则
我们将检查 Suricata 是否检测到任何可疑流量。 Suricata 指南建议使用以下命令测试 ET Open 规则编号 2100498。
$ curl http://testmynids.org/uid/index.html
您将得到以下响应。
uid=0(root) gid=0(root) groups=0(root)
上述命令假装返回可以在受感染系统上运行的
id
命令的输出。要测试 Suricata 是否检测到流量,您需要使用指定的规则编号检查日志文件。$ grep 2100498 /var/log/suricata/fast.log
如果您的请求使用 IPv6,您应该会看到以下输出。
02/22/2022-23:24:33.997371 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 2600:9000:2204:5c00:0018:30b3:e400:93a1:80 -> 2a03:b0c0:0002:00d0:0000:0000:0fc2:b001:41468
如果您的请求使用 IPv4,您将看到以下输出。
02/22/2022-23:21:46.783476 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 204.246.178.81:80 -> 164.90.192.1:36364
Suricata 还使用 JSON 格式将事件记录到
/var/log/suricata/eve.log
文件中。要阅读和解释这些规则,您需要安装jq
,这超出了本教程的范围。我们完成了教程的第一部分,我们安装了 Suricata 并对其进行了测试。下一部分涉及安装 ELK 堆栈并设置它以可视化 Suricata 及其日志。除非另有说明,否则本教程的第二部分应该在第二台服务器上完成。
第 7 步 - 安装 Elasticsearch 和 Kibana
安装 Elasticsearch 的第一步涉及将 Elastic GPG 密钥添加到您的服务器。
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
通过创建并打开文件
/etc/yum/yum.repos.d/elasticsearch.repo
进行编辑,为 Elasticsearch 包创建存储库。$ sudo nano /etc/yum.repos.d/elasticsearch.repo
将以下代码粘贴到其中。
[elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
安装 Elasticsearch 和 Kibana。
$ sudo dnf install --enablerepo=elasticsearch elasticsearch kibana
您每次都需要使用标志
--enablerepo=elasticsearch
,因为我们默认情况下禁用存储库。这可以防止意外升级这些包。使用以下命令找到您的服务器私有 IP 地址。
$ ip -brief address show lo UNKNOWN 127.0.0.1/8 ::1/128 eth0 UP 164.90.205.77/20 10.18.0.7/16 2a03:b0c0:2:d0::fef:b001/64 fe80::340a:6eff:fe5c:76ed/64 eth1 UP 10.133.0.3/16 fe80::906f:b5ff:fec4:c7b8/64
记下服务器的私有 IP(在本例中为 10.133.0.3)。我们将其称为
your_private_IP
。服务器的公共 IP 地址 (164.90.205.77) 在其余教程中将称为your_public_IP
。另外,请注意您的服务器的网络名称eth1
。第 8 步 - 配置 Elasticsearch
Elasticsearch 将其配置存储在
/etc/elasticsearch/elasticsearch.yml
文件中。打开文件进行编辑。$ sudo nano /etc/elasticsearch/elasticsearch.yml
Elasticsearch 默认只接受本地连接。我们需要更改它,以便 Kibana 可以通过私有 IP 地址访问它。
找到
#network.host: 192.168.0.1
行并在其正下方添加以下行,如下所示。# By default Elasticsearch is only accessible on localhost. Set a different # address here to expose this node on the network: # #network.host: 192.168.0.1 network.bind_host: ["127.0.0.1", "your_private_IP"] # # By default Elasticsearch listens for HTTP traffic on the first free port it # finds starting at 9200. Set a specific HTTP port here:
这将确保 Elastic 仍然可以接受本地连接,同时通过私有 IP 地址供 Kibana 使用。
下一步是打开一些安全功能并确保 Elastic 配置为在单个节点上运行。为此,请在文件末尾添加以下行。
. . . discovery.type: single-node xpack.security.enabled: true
如果您打算使用多个 Elastic 搜索节点,则可以省略第一行。
完成后,按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
配置防火墙
为 Elasticsearch 添加适当的防火墙规则,以便可以通过专用网络访问它。
$ sudo firewall-cmd --permanent --zone=internal --change-interface=eth1 $ sudo firewall-cmd --permanent --zone=internal --add-service=elasticsearch $ sudo firewall-cmd --permanent --zone=internal --add-service=kibana $ sudo firewall-cmd --reload
确保在第一个命令中选择接口名称,就像您从第 7 步中获得的一样。以上命令将防火墙的默认区域更改为内部,并为 Elasticsearch 打开端口 9200、9300,为 Kibana 打开端口 5601。
启动 Elasticsearch
现在您已经配置了 Elasticsearch,是时候启动该服务了。
$ sudo systemctl start elasticsearch
创建 Elasticsearch 密码
启用 Elasticsearch 的安全设置后,下一步就是为默认用户生成一些密码。 Elasticsearch 在
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords
中附带了一个密码创建实用程序,它可以生成随机密码。创建密码。
$ cd /usr/share/elasticsearch/bin $ sudo ./elasticsearch-setup-passwords auto
您将获得如下所示的输出。出现提示时按
y
继续。Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user. The passwords will be randomly generated and printed to the console. Please confirm that you would like to continue [y/N]y Changed password for user apm_system PASSWORD apm_system = EtwMg8maU67o5tvD5rse Changed password for user kibana_system PASSWORD kibana_system = dTanR7Q2HtgDtATRvuJv Changed password for user kibana PASSWORD kibana = dTanR7Q2HtgDtATRvuJv Changed password for user logstash_system PASSWORD logstash_system = XGSjxNktuNMWVfGYibox Changed password for user beats_system PASSWORD beats_system = JXTr7CeHkMue608qVTQa Changed password for user remote_monitoring_user PASSWORD remote_monitoring_user = Q6JTJNl3lPy0fhy6QuMP Changed password for user elastic PASSWORD elastic = bd1YJfhSa8RC8SMvTIwg
您只能运行该实用程序一次,因此请将所有密码保存在安全位置。
第 9 步 - 配置 Kibana
配置 Kibana 的第一步是通过生成密钥来启用
xpack
安全功能。 Kibana 使用这些密钥在 Elasticsearch 中存储数据。可以从/usr/share/kibana/bin
目录访问用于生成密钥的实用程序。$ cd /usr/share/kibana/bin/ $ sudo ./kibana-encryption-keys generate -q --force
-q
标志抑制命令指令,--force
标志确保生成新的秘密。您将收到如下输出。xpack.encryptedSavedObjects.encryptionKey: 0f4e5e1cf8fad1874ffed0faac6be0da xpack.reporting.encryptionKey: d435c78a4e37521e539c0e905420c9f5 xpack.security.encryptionKey: 7ba0e2a02747bb90fb0f9a3c267b99ed
复制输出。打开位于
/etc/kibana/kibana.yml
的 Kibanas 配置文件进行编辑。$ sudo nano /etc/kibana/kibana.yml
将上一个命令中的代码粘贴到文件末尾。
. . . # Specifies locale to be used for all localizable strings, dates and number formats. # Supported languages are the following: English - en , by default , Chinese - zh-CN . #i18n.locale: "en" xpack.encryptedSavedObjects.encryptionKey: 0f4e5e1cf8fad1874ffed0faac6be0da xpack.reporting.encryptionKey: d435c78a4e37521e539c0e905420c9f5 xpack.security.encryptionKey: 7ba0e2a02747bb90fb0f9a3c267b99ed
配置 Kibana 端口
需要配置 Kibana,以便在服务器私有 IP 地址上可以访问它。在文件中找到行
#server.host: \localhost\
并在其正下方添加以下行,如图所示。# Kibana is served by a back end server. This setting specifies the port to use. #server.port: 5601 # Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values. # The default is 'localhost', which usually means remote machines will not be able to connect. # To allow connections from remote users, set this parameter to a non-loopback address. #server.host: "localhost" server.host: "your_private_IP"
完成后,按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
配置 Kibana 访问
下一步是创建 Kibana 可用于身份验证的用户名和密码。您可以通过直接编辑 Kibanas 配置文件来做到这一点,但这可能会导致安全问题。安全方法涉及使用
kibana-keystore
应用程序。运行以下命令来设置用户名。输入
kibana_system
作为用户名。$ cd /usr/share/kibana/bin $ sudo ./kibana-keystore add elasticsearch.username Enter value for elasticsearch.username: *************
再次运行命令设置密码。确保使用在第 8 步中为 Kibana 创建的密码。对于我们的教程,密码是
dTanR7Q2HtgDtATRvuJv
。$ sudo ./kibana-keystore add elasticsearch.password Enter value for elasticsearch.password: ********************
启动 Kibana
现在您已经为 Kibana 配置了安全访问和网络,开始该过程。
$ sudo systemctl start kibana
检查状态以查看它是否正在运行。
$ sudo systemctl status kibana
第 10 步 - 安装和配置 Filebeat
请务必注意,我们将在 Suricata 服务器上安装 Filebeat。因此,切换回它并添加 Elastic GPG 密钥以开始使用。
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
创建并打开弹性存储库。
$ sudo nano /etc/yum.repos.d/elasticsearch.repo
粘贴以下代码。
[elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
安装 Filebeat。
$ sudo dnf install --enablerepo=elasticsearch filebeat
Filebeat 将其配置存储在
/etc/filebeat/filebeat.yml
文件中。打开它进行编辑。$ sudo nano /etc/filebeat/filebeat.yml
您需要做的第一件事是将它连接到 Kibanas 仪表板。在 Kibana 部分找到行
#host: \localhost:5601\
并在其正下方添加以下行,如图所示。. . . # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. # This requires a Kibana endpoint configuration. setup.kibana: # Kibana Host # Scheme and port can be left out and will be set to the default (http and 5601) # In case you specify and additional path, the scheme is required: http://localhost:5601/path # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 #host: "localhost:5601" host: "your_private_IP:5601" . . .
接下来,找到文件的 Elasticsearch 输出部分并编辑
hosts
、username
和password
的值> 如下图。对于用户名,选择elastic
作为值,对于密码,使用本教程第 8 步中生成的值。output.elasticsearch: # Array of hosts to connect to. hosts: ["your_private_IP:9200"] # Protocol - either `http` (default) or `https`. #protocol: "https" # Authentication credentials - either API key or username/password. #api_key: "id:api_key" username: "elastic" password: "bd1YJfhSa8RC8SMvTIwg" . . .
完成后,按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
接下来,启用 Filebeats 内置的 Suricata 模块。
$ sudo filebeat modules enable suricata
配置 Filebeat 的最后一步是使用
filebeat setup
命令将 SIEM 仪表板和管道加载到 Elasticsearch 中。$ sudo filebeat setup
该命令可能需要几分钟才能完成。完成后,您应该会收到以下输出。
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling. Index setup finished. Loading dashboards (Kibana must be running and reachable) Loaded dashboards Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead. See more: https://www.elastic.co/guide/en/machine-learning/current/index.html It is not possble to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat. Loaded machine learning job configurations Loaded Ingest pipelines
启动 Filebeat 服务。
$ sudo systemctl start filebeat
检查服务的状态。
$ sudo systemctl status filebeat
第 11 步 - 访问 Kibana 仪表板
由于 KIbana 配置为仅通过其私有 IP 地址访问 Elasticsearch,因此您有两种访问方式。第一种方法是使用 SSH 隧道从您的 PC 连接到 Elasticsearch 服务器。这会将端口 5601 从您的 PC 转发到服务器的私有 IP 地址,您将能够通过
http://localhost:5601
从您的 PC 访问 Kibana。但是这种方法意味着您将无法从其他任何地方访问它。选项是在您的 Suricata 服务器上安装 Nginx,并将其用作反向代理,通过其私有 IP 地址访问 Elasticsearchs 服务器。我们将讨论这两种方式。您可以根据您的要求选择任何一种方式。
使用 SSH 本地隧道
如果您使用的是 Windows 10 或 Windows 11,则可以从 Windows Powershell 运行 SSH LocalTunnel。在 Linux 或 macOS 上,您可以使用终端。如果您还没有配置 SSH 访问,您可能需要配置它。
在您的计算机终端中运行以下命令以创建 SSH 隧道。
$ ssh -L 5601:your_private_IP:5601 _public_IP -N
-L
标志指的是本地 SSH 隧道,它将流量从您的 PC 端口转发到服务器。private_IP:5601
是您的流量在服务器上转发到的 IP 地址。在这种情况下,将其替换为您的 Elasticsearch 服务器的私有 IP 地址。your_public_IP
是 Elasticsearch 服务器的公共 IP 地址,用于打开 SSH 连接。-N
标志告诉 OpenSSH 不要执行任何命令,只要隧道运行就保持连接。
现在隧道已打开,您可以通过在 PC 浏览器上打开 URL
http://localhost:5601
来访问 Kibana。您将看到以下屏幕。只要您需要访问 Kibana,您就需要保持命令运行。在终端中按 Ctrl + C 关闭隧道。
使用 Nginx 反向代理
如果您想从世界任何地方访问仪表板,则此方法最适合。
配置防火墙
在继续之前,您需要在防火墙中打开 HTTP 和 HTTPS 端口。
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
重新加载防火墙以启用更改。
$ sudo firewall-cmd --reload
安装和配置 SSL
第一步是安装 Lets Encrypt SSL 证书。由于我们已经设置了 EPEL 存储库,因此请安装 Certbot 工具。
$ sudo dnf install certbot
为域
kibana.example.com
生成 SSL 证书。$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d kibana.example.com
上面的命令会将证书下载到服务器上的
/etc/letsencrypt/live/kibana.example.com
目录。生成 Diffie-Hellman 组证书。
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
为 Lets Encrypt 自动更新创建一个挑战网站根目录。
$ sudo mkdir -p /var/lib/letsencrypt
创建 Cron 作业以更新 SSL。它将每天运行以检查证书并在需要时更新。为此,首先,创建文件
/etc/cron.daily/certbot-renew
并打开它进行编辑。$ sudo nano /etc/cron.daily/certbot-renew
粘贴以下代码。
#!/bin/sh certbot renew --cert-name kibana.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
更改任务文件的权限以使其可执行。
$ sudo chmod +x /etc/cron.daily/certbot-renew
安装和配置 Nginx
Rocket Linux 8.5 附带了最新的稳定版 Nginx 作为一个模块。使用以下命令安装它。
$ sudo dnf module install nginx:1.20
您可以使用以下命令检查要安装的版本。
$ dnf module list nginx Rocky Linux 8 - AppStream Name Stream Profiles Summary nginx 1.14 [d] common [d] nginx webserver nginx 1.16 common [d] nginx webserver nginx 1.18 common [d] nginx webserver nginx 1.20 [e] common [d] [i] nginx webserver Extra Packages for Enterprise Linux Modular 8 - x86_64 Name Stream Profiles Summary nginx mainline common nginx webserver nginx 1.20 [e] common [d] [i] nginx webserver
确认 Nginx 安装。
$ nginx -v nginx version 1.20.1
启用 Nginx 服务。
$ sudo systemctl enable nginx
为 Kibana 创建并打开 Nginx 配置文件。
$ sudo nano /etc/nginx/conf.d/kibana.conf
将以下代码粘贴到其中。将 IP 地址替换为您的 Elasticsearch 服务器的私有 IP 地址。
server { listen 80; listen [::]:80; server_name kibana.example.com; return 301 https://$host$request_uri; } server { server_name kibana.example.com; charset utf-8; listen 443 ssl http2; listen [::]:443 ssl http2; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; ssl_certificate /etc/letsencrypt/live/kibana.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kibana.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/kibana.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; resolver 8.8.8.8; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://your_private_IP:5601; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
打开文件
/etc/nginx/nginx.conf
进行编辑。$ sudo nano /etc/nginx/nginx.conf
在行
include /etc/nginx/conf.d/*.conf;
之前添加以下行。server_names_hash_bucket_size 64;
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
验证配置。
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
启动 Nginx 服务。
$ sudo systemctl start nginx
您的 Kibana 仪表板应该可以通过 URL
https://kibana.example.com
从任何地方访问。第 12 步 - 管理 Kibana 仪表板
在进一步管理仪表板之前,您需要在 Kibanas 配置中添加基本 URL 字段。
打开 Kibanas 配置文件。
$ sudo nano /etc/kibana/kibana.yml
找到注释行
#server.publicBaseUrl: \\
并通过删除其前面的散列进行如下更改。server.publicBaseUrl: "https://kibana.example.com"
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
重新启动 Kibana 服务。
$ sudo systemctl restart kibana
等待几分钟,然后在浏览器中加载 URL
https://kibana.example.com
。使用用户名elastic
和您之前生成的密码 (bd1YJfhSa8RC8SMvTIwg
) 登录,您将看到以下屏幕。在顶部的搜索框中键入
type:data suricata
以查找 Suricatas 信息。单击第一个结果([Filebeat Suricata] Alert Overview),您将看到类似于下图的屏幕。默认情况下,它仅显示最近 15 分钟的条目,但我们在更大的时间跨度内显示它以显示教程的更多数据。
单击“事件”按钮可查看所有记录的事件。
在事件和警报页面上向下滚动时,您可以通过协议类型、源和目标端口以及源的 IP 地址来识别每个事件和警报。您还可以查看产生流量的国家/地区。
您可以使用 Kibana 和 Filebeat 访问和生成其他类型的仪表板。您可以立即使用的有用的内置仪表板之一是安全仪表板。单击左侧汉堡菜单中的网络仪表板,您将看到以下屏幕。
您可以通过启用和配置内置的 Filebeat 模块来添加更多仪表板,例如 Nginx。
结论
在基于 Rocky Linux 8 的服务器上使用 Elastic Stack 安装和配置 Suricata IDS 的教程到此结束。您还将 Nginx 配置为反向代理以从外部访问 Kibana 仪表板。如果您有任何问题,请在下面的评论中发表。