由于网络犯罪日益猖獗,企业迫切需要更好的防护措施来抵御黑客的攻击。一个入侵防护系统(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
命令更新系统中可用的软件包。

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

3. 重新运行sudo apt update
命令,以将新添加的Suricata存储库加载到系统的软件包索引中。
4. 现在,运行sudo apt policy
命令验证您是否已正确添加Suricata PPA。确保在安装Suricata之前,您在列表中看到了Suricata PPA,就像下面显示的那样

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

6. 安装完成后,运行下面的systemctl status
命令检查suricata
服务的status
。
如下所示,您可以看到Suricata服务处于活动状态(正在运行)

配置Suricata
Suricata软件包附带一个名为suricata.yaml的配置文件,位于/etc/suricata目录下。此配置文件具有许多不同的设置,适用于许多其他用例。但请注意,在使用Suricata之前,您需要调整默认配置文件中的一些设置。
Suricata的默认模式是入侵检测(IDS)模式,它会记录但不会丢弃任何流量。在配置和熟悉Suricata时使用此模式。一旦您更加熟悉Suricata,并且更好地了解Suricata将提醒您的流量类型,您可以选择打开IPS模式。
Suricata在其JSON格式中附加了一个字段(社区流ID)。社区流ID是一个8字节字段,允许您将其与其他工具生成的记录相关联。当与其他工具(如Bro或Elasticsearch)一起使用Suricata时,此功能非常有用。
1. 在您喜欢的文本编辑器中打开/etc/suricata/suricata.yaml文件。
2. 寻找一行内容为 community-id: false 并将其修改为 community-id: true。保存修改并退出文本编辑器。
每次检查事件时,您都会在其 JSON 输出中看到社区流 ID。

接下来,运行以下命令来查找系统上具有默认路由的设备(route show default
)。-p
标志告诉 ip
命令以人类可读的方式打印设备,而 -j
标志则打印 JSON 输出。
Suricata 默认配置为默认从任何可用网络接口嗅探数据包。但您可以更改此行为,并在 Suricata 启动时指定要侦听的接口。
如下所示,dev 参数指定 Suricata 将用于嗅探数据包的接口。在此演示中,接口为 eth0,但您的接口可能不同,例如 tun0、wlan0 等。

4. 最后,打开 /etc/suricata/suricata.yaml 配置文件,找到 af-packet 部分下的 interface 参数并相应修改。在此演示中,eth0 被用作嗅探数据包的接口。
保存更改,但现在保持文本编辑器处于打开状态。

设置实时规则重新加载功能
您已经配置好了Suricata,但这只是保护网络的开始。通常,您会希望即时添加规则并自动重新加载规则。如何做到?Suricata的实时规则重新加载功能允许您动态更新规则。因此,您无需手动重启Suricata,新规则就会生效。
打开/etc/suricata/suricata.yaml文件,将以下指令复制/粘贴到文件内容的末尾,并保存更改。这些指令可以启用实时规则重新加载功能。
有了这个设置,当您编辑/更新规则集时,更改将在不重新启动Suricata服务的情况下生效。

现在运行下面的kill
命令来通知您的Suricata进程($(pidof suricata)
)更新规则而无需重新启动。
该命令向指定的进程ID发送用户定义的信号(-usr2
),然后Suricata会自动执行以下操作:
- 加载新配置以更新规则变量和值。
- 加载新规则
- 构建新的检测引擎
- 交换新旧检测引擎
- 确保所有线程都已更新
- 释放旧的检测引擎
更新Suricata规则集
实时规则重新加载功能已准备就绪,但除非您更新规则集,否则它将没有任何作用。默认情况下,Suricata软件包具有一个有限的规则集,只能检测位于/etc/suricata/rules目录中的最常见的互联网协议。
这时,当您尝试启动和使用Suricata服务时,您将收到一个没有与该模式匹配的规则文件错误消息,就像下面的那样。这个错误消息表明Suricata没有可用的规则集。

要解决此错误,请为您的Suricata实例提供规则集文件。幸运的是,Suricata有一个名为suricata-update
的工具,可以帮助您从第三方提供者那里获取更多的规则集。
1. 运行下面的命令来为您的Suricata实例获取更新。
如下所示,输出指示suricata-update
命令通过连接到https://rules.emergingthreats.net/open/获取了规则,然后将新规则保存到/var/lib/suricata/rules/目录下。
输出还打印出以下内容:
- 规则集的总数(31737)
- 已启用的规则数(24355)
- 已添加(31737)/已移除(0)的数量。

接下来,运行下面的命令列出所有规则集提供者(list-sources
)。
suricata-update
命令从许多提供者那里获取规则集,包括免费和商业提供者。
下面,您可以看到列表的一小部分。请注意您希望Suricata专门获取规则集的规则集名称。本教程演示(第三步)获取et/open规则集。

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

最后,重新运行 suricata-update
命令以加载新选择的规则集。
验证 Suricata 配置
您已配置了 Suricata,甚至添加了规则集,现在是验证更改并确保一切按预期工作的时候了。Suricata 软件包内置了一个验证服务,允许您查看与当前配置的任何偏差。
运行下面的 suricata
命令以验证 Suricata 配置文件中的更改(-c /etc/suricata/suricata.yaml
)。该命令还会显示所有验证消息(-v
)。
-T
标志告诉 Suricata 以“测试模式”和“自上而下”模式运行。这两种模式对匹配数据包有更严格的规则,并且更不容易产生误报。
由于 Suricata 是一个高度可配置的防火墙,测试可能需要几分钟才能完成。如果没有错误,您将看到类似下面的输出,显示了 complete 消息。

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

测试 Suricata 规则
现在,您的Suricata配置文件已经通过验证,您可以运行Suricata来确保它们正常工作。您将使用Suricata测试ET Open(2100498)的curl
命令来检测可疑的活动/流量。
目前,您的Suricata实例有超过30,000条规则,这些规则是Suricata从各种规则集中获取的。因此,在本教程中无法完全测试所有规则及其解释。
1. 运行以下curl
命令,以从TestMyNIDS网站生成一些流量/HTTP请求/活动。TestMyNIDS是一个专门支持NIDS测试、验证和比较的电子学习项目。该网站为NIDS及相关工具的比较分析提供了独特的平台。
您可以使用此网站测试任何可疑的活动/流量,以查看您配置的规则集是否按预期工作。
响应数据被设计成触发一个假警报,假装是一个Linux/Unix root用户。而且这个root用户可能已经受到攻击。

接下来,运行以下grep
命令,检查fast.log
文件中是否有匹配的警报消息,该文件位于/var/log/suricata/目录中,用于用户警报。
除了 fast.log 文件外,另一个要注意的日志文件是位于相同目录下的 eve.log。
您将看到类似于下面的输出,显示系统的公共 IPv4 地址。

3.现在,运行以下 jq
命令来查看 eve.log 文件。eve.log 文件还用于以 JSON 格式记录事件(/var/log/suricata/eve.json
)。您将引用 eve.json 和 fast.log 文件以查看可疑流量和被阻止的尝试。找到后,根据需要采取行动。
在下面的输出中,您可以看到 “signature_id”: 2100498,这是您在命令中指定的警报签名 ID。
您还可以看到 “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=”,这是您在 /etc/suricata/suricata.yaml 文件中设置的 Community Flow ID。
当您将 Suricata 与诸如 Elasticsearch 等其他工具一起使用时,这个 community_id 在获得相对低成本的完整“安全监控堆栈”时非常有用。

结论
在本教程中,您已经学会了如何安装和配置 Suricata 以及使用规则集保护您的网络。您还通过在网络上生成流量来测试规则集是否正常工作。
此时,Suricata已经完美运行,并使用您的自定义规则集检测网络上的可疑活动/流量。
现在,为什么不建立在这种新发现的知识基础上呢?也许可以从安装和配置Suricata、Zeek、Elasticsearch堆栈开始,建立一个完整的“安全监控堆栈”?