如何在 Linux 上使用 Snort 入侵检测系统

在 Linux 上运行 Snort 并通过实时流量分析和威胁检测保护您的网络。安全就是一切,而 Snort 是世界一流的。这头猪可能会拯救你的培根。
什么是 Snort?
Snort 是最著名和广泛使用的网络入侵检测系统 (NIDS) 之一。它被称为有史以来最重要的开源项目之一。它最初由 Sourcefire 开发,自 2013 年思科收购 Sourcefire 以来一直由思科的 Talos 安全情报和研究小组维护。
Snort 实时分析网络流量并标记任何可疑活动。特别是,它会查找任何可能表明未授权访问尝试和其他网络攻击的信息。一套全面的规则定义了什么是“可疑的”,以及在触发规则时 Snort 应该做什么。
就像防病毒和反恶意软件软件包依赖最新的病毒签名定义来识别和保护您免受最新威胁一样,Snort 的规则会经常更新和重新发布,以便 Snort 始终以最佳状态运行效力。
Snort 规则
共有三组规则:
- 社区规则:这些是免费提供的规则集,由 Snort 用户社区创建。
- 注册规则:这些规则集由 Talos 提供。它们也可以免费获得,但您必须注册才能获得它们。注册是免费的,只需要一点时间。您将收到一个个人oinkcode,您需要将其包含在下载请求中。
- 订阅规则:这些规则与注册规则相同。但是,订阅者会在规则作为注册用户的免费规则集发布前大约一个月收到规则。在撰写本文时,个人使用的 12 个月订阅起价为 29 美元,企业使用起价为 399 美元。
安装喷鼻息
曾几何时,安装 Snort 是一个漫长的手动过程。这并不难,但步骤很多,很容易漏掉一个。主要的 Linux 发行版通过在其软件存储库中提供 Snort 使事情变得更简单。
存储库中的版本有时会落后于 Snort 网站上提供的最新版本。如果需要,您可以从源代码下载并安装。只要您拥有最新的规则,即使您的 Snort 不是最新最好的也没关系——只要它不是过时的。
为了研究本文,我们在 Ubuntu 20.04、Fedora 32 和 Manjaro 20.0.1 上安装了 Snort。
要在 Ubuntu 上安装 Snort,请使用以下命令:
sudo apt-get install snort

随着安装的进行,系统会询问您几个问题。您可以在开始安装之前使用 ip addr
命令或在单独的终端窗口中找到这些问题的答案。
ip addr

记下您的网络接口名称。在这台研究计算机上,它是 enp0s3。
另外,请查看您的 IP 地址。此计算机的 IP 地址为 192.168.1.24
。额外的“/24
”是无类域间路由 (CIDR) 表示法。这告诉我们网络地址范围。这意味着该网络的子网掩码为 255.255.255.0
,它具有三组前导八位(3 x 8=24)。您不必为此担心太多,只需记录您的 IP 地址,包括 CIDR 符号。您需要提供此作为其中一个问题的答案,并将 IP 地址的最后一个八位字节更改为零。在我们的示例中,这是 192.168.1.0/24。
按“Tab”突出显示“OK”按钮,然后按“Enter”。

键入网络接口名称,然后按“Tab”突出显示“确定”按钮,然后按“Enter”。

以 CIDR 格式键入网络地址范围,按“Tab”突出显示“确定”按钮,然后按“Enter”。

要在 Fedora 上安装 Snort,您需要使用两个命令:
rpm -Uvh https://forensics.cert.org/cert-forensics-tools-release-32.rpm

sudo dnf install snort

在Manjaro上,我们需要的命令不是通常的pacman
,而是pamac
。而且我们不需要使用 sudo
:
pamac install snort

当系统询问您是否要从 AUR(Arch 用户存储库)构建 Snort 时,按“Y”并按“Enter”。我们不想编辑构建文件,因此请按“N”并按“Enter”来回答这个问题。当系统询问您是否应应用交易时,按“Y”并按“Enter”。
系统会提示您输入密码。
安装的 Snort 版本是:
- Ubuntu:2.9.7.0
- Fedora:2.9.16.1
- Manjaro:2.9.16.1
您可以使用以下方法检查您的版本:
snort --version

配置 Snort
在运行 Snort 之前,需要完成几个步骤。我们需要编辑“snort.conf”文件。
sudo gedit /etc/snort/snort.conf

找到读取“ipvar HOME_NET any
”的行并编辑它以将“any”替换为网络的 CIDR 表示法地址范围。

保存更改并关闭文件。
更新 Snort 规则
为确保您的 Snort 副本提供最高级别的保护,请将规则更新为最新版本。这确保 Snort 可以访问最新的攻击定义和保护操作集。
如果您已经注册并获得了自己的oinkcode,您可以使用以下命令为注册用户下载规则集。 Snort 下载页面列出了可用的规则集,包括不需要注册的社区规则集。
下载适用于您安装的 Snort 版本的规则集。我们正在下载 2.9.8.3 版本,它最接近 Ubuntu 存储库中的 2.9.7.0 版本的 Snort。
wget https://www.snort.org/rules/snortrules-snapshot-2983.tar.gz?oinkcode=<your oink code goes here> -O snortrules-snapshot-2983.tar.gz

下载完成后,使用此命令提取规则并将它们安装在“/etc/snort/rules”目录中。
sudo tar -xvzf snortrules-snapshot-2983.tar.gc -C /etc/snort/rules

混杂模式
网络接口卡通常会忽略不是发往其 IP 地址的流量。我们希望 Snort 检测发往网络上任何设备的可疑网络流量,而不仅仅是恰好发送到安装了 Snort 的计算机的网络流量。
为了让 Snort 计算机的网络接口监听所有网络流量,我们需要将其设置为混杂模式。以下命令将导致网络接口 enp0s3
在混杂模式下运行。将 enp0s3
替换为您在计算机上使用的网络接口的名称。
sudo ip link set enp0s3 promisc on

如果您在虚拟机中运行 Snort,还请记住为您的虚拟机使用的虚拟网卡调整管理程序中的设置。例如,在 VirtualBox 中,您需要转到 Settings > Network > Advanced
并将“Promiscuous Mode”下拉菜单更改为“Allow All”。

跑步打鼾
您现在可以启动 Snort。命令格式为:
sudo snort -d -l /var/log/snort/ -h 192.168.1.0/24 -A console -c /etc/snort/snort.conf

用您自己的网络 IP 范围代替 192.168.1.0/24
。
此命令中使用的命令行选项是:
- -d:过滤掉应用层数据包。
- -l /var/log/snort/:设置日志目录。
- -h 192.168.1.0/24: 这不设置家庭网络,这是在“snort.conf”文件中设置的。将此值设置为与家庭网络相同的值后,日志的结构将来自可疑远程计算机的内容记录到以每台远程计算机命名的目录中。
- -A console:将警报发送到控制台窗口。
- -c /etc/snort/snort.conf:指示要使用的 Snort 配置文件。
Snort 在终端窗口中滚动大量输出,然后进入其监控分析模式。除非它看到一些可疑活动,否则您不会再看到任何屏幕输出。

在另一台计算机上,我们开始生成直接针对运行 Snort 的测试计算机的恶意活动。

Snort 将网络流量识别为潜在恶意,向控制台窗口发送警报,并将条目写入日志。
归类为“信息泄漏”攻击的攻击表示已尝试询问您的计算机以获取可能有助于攻击者的某些信息。这可能表明有人正在对您的系统进行侦察。
归类为“拒绝服务”攻击的攻击表示试图用虚假网络流量淹没您的计算机。攻击试图使您的计算机不堪重负,以至于无法继续提供服务。
为了验证混杂模式是否正常运行以及我们是否在保护整个网络地址范围,我们将在另一台计算机上触发一些恶意流量,并查看 Snort 是否检测到它。

该活动已被检测并报告,我们可以看到此攻击针对的是另一台 IP 地址为 192.168.1.26
的计算机。 Snort 正在监视该网络的整个地址范围。
下一步
为了保持警惕,Snort 需要最新的规则。您可以编写一个小脚本并在其中放入下载和安装规则的命令,然后设置一个 cron
作业以通过定期调用脚本来自动执行该过程。 pulledpork 脚本是一个现成的脚本,如果您不喜欢自己编写,它的设计目的就是为了做到这一点。
Snort 没有前端或图形用户界面。第三方项目已经创建了多个,您可能想要研究其中的一些,例如 Snorby 和 Squil。