将Suricata配置为入侵防御系统(IPS)

由于网络犯罪日益猖獗,企业迫切需要更好的防护措施来抵御黑客的攻击。一个入侵防护系统(IPS)是防范计算机攻击的最佳途径之一。但在在互联网上寻找IPS之前,不妨试试Suricata

在本教程中,您将学习如何在Linux服务器上配置一个完全功能的Suricata IPS,以保护您的网络免受在线威胁。

准备好了吗?继续阅读,开始保护您的网络吧!

先决条件

本教程将进行实际演示。如果您想跟着做,请确保您具备以下条件:

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
  • A non-root user with sudo privileges.
  • 根据您的网络配置以及对Suricata的使用方式,您可能需要更多或更少的CPU和RAM。通常,您计划检查的流量越多,您将为Suricata分配的资源就越多。在开发环境中,计划使用至少2个CPU和8GB的RAM,以确保Suricata能够执行其任务,而不影响所有用户的服务质量。

安装Suricata并添加 PPA存储库

Suricata在Ubuntu上默认未安装,但安装Suricata与在系统上安装其他软件包类似。

1. 运行apt update命令更新系统中可用的软件包。

sudo apt update -y
Updating the list of available packages

2. 接下来,运行add-apt-repository命令添加由Open Information Security Foundation (OISF)维护的PPA存储库。通过添加PPA存储库,您将获取Suricata的最新稳定版本(ppa:oisf/suricata-stable)。

sudo add-apt-repository ppa:oisf/suricata-stable
Adding the PPA repository for Suricata

3. 重新运行sudo apt update命令,以将新添加的Suricata存储库加载到系统的软件包索引中。

sudo apt update -y

4. 现在,运行sudo apt policy命令验证您是否已正确添加Suricata PPA。确保在安装Suricata之前,您在列表中看到了Suricata PPA,就像下面显示的那样

sudo apt policy
Running the sudo apt policy

5. 在系统上运行以下命令install suricata来安装Suricata。

sudo apt install suricata -y
Installing Suricata on your system

6. 安装完成后,运行下面的systemctl status命令检查suricata服务的status

sudo systemctl status suricata

如下所示,您可以看到Suricata服务处于活动状态(正在运行)

Checking the Suricata service status

配置Suricata

Suricata软件包附带一个名为suricata.yaml的配置文件,位于/etc/suricata目录下。此配置文件具有许多不同的设置,适用于许多其他用例。但请注意,在使用Suricata之前,您需要调整默认配置文件中的一些设置。

Suricata的默认模式是入侵检测(IDS)模式,它会记录但不会丢弃任何流量。在配置和熟悉Suricata时使用此模式。一旦您更加熟悉Suricata,并且更好地了解Suricata将提醒您的流量类型,您可以选择打开IPS模式。

Suricata在其JSON格式中附加了一个字段(社区流ID)。社区流ID是一个8字节字段,允许您将其与其他工具生成的记录相关联。当与其他工具(如BroElasticsearch)一起使用Suricata时,此功能非常有用。

1. 在您喜欢的文本编辑器中打开/etc/suricata/suricata.yaml文件。

2. 寻找一行内容为 community-id: false 并将其修改为 community-id: true。保存修改并退出文本编辑器。

每次检查事件时,您都会在其 JSON 输出中看到社区流 ID。

Enabling Community ID

接下来,运行以下命令来查找系统上具有默认路由的设备(route show default)。-p 标志告诉 ip 命令以人类可读的方式打印设备,而 -j 标志则打印 JSON 输出。

Suricata 默认配置为默认从任何可用网络接口嗅探数据包。但您可以更改此行为,并在 Suricata 启动时指定要侦听的接口。

 ip -p -j route show default

如下所示,dev 参数指定 Suricata 将用于嗅探数据包的接口。在此演示中,接口为 eth0,但您的接口可能不同,例如 tun0、wlan0 等。

Previewing the Network Interface

4. 最后,打开 /etc/suricata/suricata.yaml 配置文件,找到 af-packet 部分下的 interface 参数并相应修改。在此演示中,eth0 被用作嗅探数据包的接口。

保存更改,但现在保持文本编辑器处于打开状态。

Editing the /etc/suricata/suricata.yaml configuration file

设置实时规则重新加载功能

您已经配置好了Suricata,但这只是保护网络的开始。通常,您会希望即时添加规则并自动重新加载规则。如何做到?Suricata的实时规则重新加载功能允许您动态更新规则。因此,您无需手动重启Suricata,新规则就会生效。

打开/etc/suricata/suricata.yaml文件,将以下指令复制/粘贴到文件内容的末尾,并保存更改。这些指令可以启用实时规则重新加载功能。

有了这个设置,当您编辑/更新规则集时,更改将在不重新启动Suricata服务的情况下生效。

detect-engine:
  - rule-reload: true
Setting up the Live Rule Reloading

现在运行下面的kill命令来通知您的Suricata进程($(pidof suricata))更新规则而无需重新启动。

该命令向指定的进程ID发送用户定义的信号(-usr2),然后Suricata会自动执行以下操作:

  • 加载新配置以更新规则变量和值。
  • 加载新规则
  • 构建新的检测引擎
  • 交换新旧检测引擎
  • 确保所有线程都已更新
  • 释放旧的检测引擎
sudo kill -usr2 $(pidof suricata)

更新Suricata规则集

实时规则重新加载功能已准备就绪,但除非您更新规则集,否则它将没有任何作用。默认情况下,Suricata软件包具有一个有限的规则集,只能检测位于/etc/suricata/rules目录中的最常见的互联网协议。

这时,当您尝试启动和使用Suricata服务时,您将收到一个没有与该模式匹配的规则文件错误消息,就像下面的那样。这个错误消息表明Suricata没有可用的规则集。

Previewing Error Message when No Rulesets Exist

要解决此错误,请为您的Suricata实例提供规则集文件。幸运的是,Suricata有一个名为suricata-update的工具,可以帮助您从第三方提供者那里获取更多的规则集。

1. 运行下面的命令来为您的Suricata实例获取更新。

sudo suricata-update

如下所示,输出指示suricata-update命令通过连接到https://rules.emergingthreats.net/open/获取了规则,然后将新规则保存到/var/lib/suricata/rules/目录下。

输出还打印出以下内容:

  • 规则集的总数(31737
  • 已启用的规则数(24355
  • 已添加(31737)/已移除(0)的数量。
Updating Your Suricata Rulesets

接下来,运行下面的命令列出所有规则集提供者(list-sources)。

suricata-update命令从许多提供者那里获取规则集,包括免费和商业提供者。

sudo suricata-update list-sources

下面,您可以看到列表的一小部分。请注意您希望Suricata专门获取规则集的规则集名称。本教程演示(第三步)获取et/open规则集。

Listing all ruleset providers

3. 运行以下命令以获取并包含 (enable-source) 到您的 Suricata 规则的 et/open rulesets。

sudo suricata-update enable-source et/open
Fetching the et/open rulesets

最后,重新运行 suricata-update 命令以加载新选择的规则集。

sudo suricata-update

验证 Suricata 配置

您已配置了 Suricata,甚至添加了规则集,现在是验证更改并确保一切按预期工作的时候了。Suricata 软件包内置了一个验证服务,允许您查看与当前配置的任何偏差。

运行下面的 suricata 命令以验证 Suricata 配置文件中的更改(-c /etc/suricata/suricata.yaml)。该命令还会显示所有验证消息(-v)。

-T 标志告诉 Suricata 以“测试模式”和“自上而下”模式运行。这两种模式对匹配数据包有更严格的规则,并且更不容易产生误报。

sudo suricata -T -c /etc/suricata/suricata.yaml -v

由于 Suricata 是一个高度可配置的防火墙,测试可能需要几分钟才能完成。如果没有错误,您将看到类似下面的输出,显示了 complete 消息。

Validating Your Suricata Configuration: complete

如果您的配置文件出现类似下面的错误,Suricata 将打印出每个错误,指示导致问题的具体行。如果遇到这些错误,请逐个解决每个配置问题,直到验证成功。

Validating Your Suricata Configuration: errors

测试 Suricata 规则

现在,您的Suricata配置文件已经通过验证,您可以运行Suricata来确保它们正常工作。您将使用Suricata测试ET Open(2100498)的curl命令来检测可疑的活动/流量。

目前,您的Suricata实例有超过30,000条规则,这些规则是Suricata从各种规则集中获取的。因此,在本教程中无法完全测试所有规则及其解释。

1. 运行以下curl命令,以从TestMyNIDS网站生成一些流量/HTTP请求/活动。TestMyNIDS是一个专门支持NIDS测试、验证和比较的电子学习项目。该网站为NIDS及相关工具的比较分析提供了独特的平台。

您可以使用此网站测试任何可疑的活动/流量,以查看您配置的规则集是否按预期工作。

curl http://testmynids.org/uid/index.html

响应数据被设计成触发一个假警报,假装是一个Linux/Unix root用户。而且这个root用户可能已经受到攻击。

Testing Your Suricata Rules

接下来,运行以下grep命令,检查fast.log文件中是否有匹配的警报消息,该文件位于/var/log/suricata/目录中,用于用户警报。

除了 fast.log 文件外,另一个要注意的日志文件是位于相同目录下的 eve.log。

grep 2100498 /var/log/suricata/fast.log

您将看到类似于下面的输出,显示系统的公共 IPv4 地址。

Examining the fast.log file

3.现在,运行以下 jq 命令来查看 eve.log 文件。eve.log 文件还用于以 JSON 格式记录事件(/var/log/suricata/eve.json)。您将引用 eve.jsonfast.log 文件以查看可疑流量和被阻止的尝试。找到后,根据需要采取行动。

jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json

在下面的输出中,您可以看到 “signature_id”: 2100498,这是您在命令中指定的警报签名 ID。

您还可以看到 “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=”,这是您在 /etc/suricata/suricata.yaml 文件中设置的 Community Flow ID。

当您将 Suricata 与诸如 Elasticsearch 等其他工具一起使用时,这个 community_id 在获得相对低成本的完整“安全监控堆栈”时非常有用。

Examining the eve.log file

结论

在本教程中,您已经学会了如何安装和配置 Suricata 以及使用规则集保护您的网络。您还通过在网络上生成流量来测试规则集是否正常工作。

此时,Suricata已经完美运行,并使用您的自定义规则集检测网络上的可疑活动/流量。

现在,为什么不建立在这种新发现的知识基础上呢?也许可以从安装和配置Suricata、Zeek、Elasticsearch堆栈开始,建立一个完整的“安全监控堆栈”?

Source:
https://adamtheautomator.com/suricata/