如何在 Ubuntu 20.04 上安装 Snort

Snort 是一个开源的轻量级网络入侵防御系统,用于运行网络入侵检测系统 (NIDS)。 Snort 用于监视通过特定网络接口发送/接收的包数据。 网络入侵检测系统可以使用基于签名的检测和协议分析技术来捕获针对您的系统弱点和漏洞的威胁。

当 NIDS 软件安装和配置正确时,可以识别不同类型的攻击和怀疑,如 CGI 攻击、网络策略违规、SMB 探测、恶意软件感染、受感染的系统、隐形端口扫描等。

在本教程中,我们将学习如何 安装 Snort 3Ubuntu 20.04.

Snort 3 的一些新功能:

  • 支持多包处理线程
  • 允许多个数据包处理
  • 自动生成参考文档
  • 使用简单的脚本化配置
  • 使关键组件可插拔
  • 允许用户编写自己的插件
  • 共享配置和属性表
  • 允许规则运行得更快

第一步:更新系统

一、更新升级你的Ubuntu系统

sudo apt update sudo apt upgrade

第 2 步:安装所需的依赖项

Ubuntu 默认存储库有 snort 包。 那里可用的 snort 包是旧版本。 要安装 Snort 3,我们必须从源代码构建。 在安装 Snort 3 之前,我们需要安装先决条件和必需的库。

使用以下命令安装 Snort 3 依赖包:

sudo apt install build-essential libpcap-dev libpcre3-dev libnet1-dev zlib1g-dev luajit hwloc libdnet-dev libdumbnet-dev bison flex liblzma-dev openssl libssl-dev pkg-config libhwloc-dev cmake cpputest libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev autotools-dev libluajit-5.1-dev libunwind-dev

安装依赖项后,创建一个目录,您可以在其中使用以下命令编译和保存 Snort 的源文件:

mkdir snort-source-files cd snort-source-files

然后,下载并安装最新版本的 Snort 数据采集库 (LibDAQ)。 用于安装 LibDAQ 我们需要使用以下命令从源代码构建和安装它。

git clone https://github.com/snort3/libdaq.git cd libdaq ./bootstrap ./configure make make install

下一个依赖项是 Tcmalloc,它将优化内存分配并提供更好的内存使用。

安装 内存分配器 使用以下命令。

cd ../ wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.9/gperftools-2.9.tar.gz tar xzf gperftools-2.9.tar.gz  cd gperftools-2.9/ ./configure make  make install

第 3 步:在 Ubuntu 20.04 上安装 Snort 3

设置依赖项后,我们将在 Ubuntu 20.04 上下载并安装 Snort 3。

01. 克隆 Snort 3 官方 GitHub 存储库。

cd ../ git clone git://github.com/snortadmin/snort3.git

02.将目录更改为Snort3

cd snort3/

03.从那里使用以下命令配置和启用tcmalloc。

./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc

04. 导航到 build 目录并使用 make 和 make install 使用以下命令编译和安装 Snort 3。

cd build make  make install

05.安装完成后,更新共享库。

sudo ldconfig

Snort 默认安装在 /usr/local/bin/snort 目录下,为 /usr/sbin/snort 创建符号链接是一个好习惯

sudo ln -s /usr/local/bin/snort /usr/sbin/snort

06. 验证 Snort 3 安装

snort -V

输出:

,,_     -> Snort++ <-    o"  )~   Version 3.1.10.0     ''''    By Martin Roesch & The Snort Team             https://snort.org/contact#team             Copyright (C) 2014-2021 Cisco and/or its affiliates. All rights reserved.             Copyright (C) 1998-2013 Sourcefire, Inc., et al.             Using DAQ version 3.0.4             Using LuaJIT version 2.1.0-beta3             Using OpenSSL 1.1.1f  31 Mar 2020             Using libpcap version 1.9.1 (with TPACKET_V3)             Using PCRE version 8.39 2016-06-14             Using ZLIB version 1.2.11             Using LZMA version 5.2.4

如果您看到类似的输出,则 Snort 3 安装成功。

配置网络接口卡

找到 Snort 侦听网络流量的接口并启用 淫乱 模式,以便能够查看发送给它的所有网络流量。

ip link set dev eh0 promisc on

使用以下命令进行验证。

ip add sh eth0

输出:

2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER UP> mtu 1500 qdisc mq state UP group default qlen 1000      link/ether f2:3c:92:ed:7e:d8 brd ff:ff:ff:ff:ff:ff      inet 74.207.230.186/24 brd 74.207.230.255 scope global dynamic eth0         valid_lft 72073sec preferred_lft 72073sec      inet6 2600:3c02::f03c:92ff:feed:7ed8/64 scope global dynamic mngtmpaddr noprefixroute          valid_lft 60sec preferred_lft 20sec      inet6 fe80::f03c:92ff:feed:7ed8/64 scope link          valid_lft forever preferred_lft forever

接下来,禁用接口卸载以防止 Snort 3 截断大数据包,最大为 1518 字节。 使用以下命令检查是否启用了此功能。

ethtool -k eth0 | grep receive-offload

如果看到此输出,则 GRO 已启用,而 LRO 已固定或 LRO 已启用。

输出。

generic-receive-offload: on large-receive-offload: on

使用以下命令禁用它。

ethtool -K eth0 gro off lro off

两个确保更改在系统重启后仍然存在,我们需要创建并启用一个 systemd 服务单元来实现更改。

sudo nano /etc/systemd/system/snort3-nic.service

粘贴以下指向您的网络接口的配置。

[Unit] Description=Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot After=network.target  [Service] Type=oneshot ExecStart=/usr/sbin/ip link set dev eth0 promisc on ExecStart=/usr/sbin/ethtool -K eth0 gro off lro off  TimeoutStartSec=0  RemainAfterExit=yes  [Install] WantedBy=default.target

重新加载 systemd 配置设置:

sudo systemctl daemon-reload

使用以下命令在启动时启动并启用服务:

sudo systemctl enable --now snort3-nic.service

输出。

Created symlink /etc/systemd/system/default.target.wants/snort3-nic.service → /etc/systemd/system/snort3-nic.service.

使用以下命令验证 snort3-nic.service:

sudo systemctl status snort3-nic.service

输出。

● snort3-nic.service - Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot       Loaded: loaded (/etc/systemd/system/snort3-nic.service; enabled; vendor preset: enabled)       Active: active (exited) since Sat 2021-09-18 12:35:17 UTC; 4min 59s ago      Process: 182782 ExecStart=/usr/sbin/ip link set dev eth0 promisc on (code=exited, status=0>      Process: 182783 ExecStart=/usr/sbin/ethtool -K eth0 gro off lro off (code=exited, status=0>     Main PID: 182783 (code=exited, status=0/SUCCESS)  Sep 18 12:35:17 li72-186 systemd[1]: Starting Set Snort 3 NIC in promiscuous mode and Disable >  Sep 18 12:35:17 li72-186 systemd[1]: Finished Set Snort 3 NIC in promiscuous mode and Disable >

安装 Snort 3 社区规则集

在 Snort 中,规则集是入侵检测引擎的主要优势。 Snort 规则分为三种类型:社区规则、注册规则、订阅者规则。 社区规则由开源社区或 snort 集成商提交。

我们将展示如何安装社区规则。

首先,在 /usr/local/etc/snort 中为规则创建一个目录

mkdir /usr/local/etc/rules

下载 Snort 3 社区规则。 你可以在官方找到 Snort3 下载页面.

wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz

解压下载的规则,放到我们之前创建的目录/usr/local/etc/rules/

tar xzf snort3-community-rules.tar.gz -C /usr/local/etc/rules/

Snort 3 包括两个主要的配置文件, snort_defaults.luasnort.lua.

snort.lua 文件包含 Snort 的主要配置,允许实现和配置 Snort 预处理器、规则文件包含、日志记录、事件过滤器、输出等。

snort_defaults.lua 文件包含默认值,例如规则路径、AppID、情报列表和网络变量。

当规则文件被提取并放置时,我们将配置这些名为的配置文件之一 snort.lua。 用你最喜欢的编辑器打开文件,会看到类似的配置。

... -- HOME_NET and EXTERNAL_NET must be set now -- setup the network addresses you are protecting HOME_NET = 'server_public_IP/32'  -- set up the external network addresses. -- (leave as "any" in most situations) EXTERNAL_NET = 'any' EXTERNAL_NET = '!$HOME_NET' ... 

将要防御攻击的网络设置为 首页_网络 变量和点 外部网络 变量到 首页_网络 多变的。

Save 并退出。

您还可以在 /usr/local/etc/snort/snort_defaults.lua 和 IPS 部分下编辑 Snort 默认值,您可以定义规则的位置。

ips =  {      -- use this to enable decoder and inspector alerts      --enable_builtin_rules = true,       -- use include for rules files; be sure to set your path      -- note that rules files can include other rules files      include="/usr/local/etc/rules/snort3-community-rules/snort3-community.rules"  }  ...

Save 并退出。

作为服务运行 Snort

如果您打算在后台将 Snort 作为服务守护进程运行,也可以为 Snort 创建一个 systemd 服务单元。 以非特权系统用户身份运行它是谨慎的

创建非登录系统用户帐户。

sudo useradd -r -s /usr/sbin/nologin -M -c SNORT_IDS snort

然后,为 Snort 创建一个 systemd 服务单元以作为 snort 用户运行。 调整并匹配您的网络接口。

sudo nano /etc/systemd/system/snort3.service

粘贴以下配置。

[Unit] Description=Snort 3 NIDS Daemon After=syslog.target network.target  [Service] Type=simple ExecStart=/usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 -k none -l /var/log/snort -D -i eht0 -m 0x1b -u snort -g snort  [Install] WantedBy=multi-user.target

重新加载 systemd 配置。

sudo systemctl daemon-reload

设置日志文件的所有权和权限。

sudo chmod -R 5775 /var/log/snort sudo chown -R snort:snort /var/log/snort

启动并启用 Snort 以在系统启动时运行:

sudo systemctl enable --now snort3

检查服务状态以确认它是否正在运行。

sudo systemctl status snort3

输出。

● snort3.service - Snort 3 NIDS Daemon       Loaded: loaded (/etc/systemd/system/snort3.service; enabled; vendor preset: enabled)       Active: active (running) since Sat 2021-09-18 12:44:32 UTC; 6s ago     Main PID: 182886 (snort)        Tasks: 2 (limit: 1071)       Memory: 62.6M       CGroup: /system.slice/snort3.service               └─182886 /usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 -k none >  Sep 18 12:44:32 li72-186 systemd[1]: Started Snort 3 NIDS Daemon.

结论

在本教程中,如何在 Ubuntu 20.04 上安装 Snort 3 网络入侵检测系统。

Linux 并非 100% 不受病毒和可疑事物的影响,安装一些工具并确保没有人在您的设备和网络上尝试可疑事物总是更好。 您可以研究的 Snort 的其他替代方案:Ossec、Palo Alto Networks 下一代防火墙、下一代入侵防御系统 (NGIPS)。

感谢您的阅读,请在评论部分提供您的反馈和建议。