首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Ubuntu22.04上Snort3的安装与基本配置

Ubuntu22.04上Snort3的安装与基本配置

作者头像
christine-rr
发布2026-01-13 19:04:11
发布2026-01-13 19:04:11
4580
举报

一、实验简介

1、入侵检测系统的概述、作用、原理

针对计算机和网络资源的恶意使用行为进行分析、处理,是一种基于检测计算机中违反安全策略行为的技术,主要是保障计算机系统的安全,检测未授权、异常行为。根据入侵的分类,可分为外部入侵和内部入侵;依据入侵的方向,进行入侵检测,即分为基于网络和基于文件系统变化。

其中基于网络的入侵检测系统的组件有:数据捕获器、数据处理器、响应器、数据库。

流程如图1-1所示:

图1-1 入侵检测系统流程

本次实验是基于网络的入侵检测系统。

2 、Snort简介

Snort是一个开源的入侵检测系统(IDS),由Martin Roesch在1998年使用C语言开发。它已发展成为一个具有多平台支持、实时流量分析、网络IP数据包记录等特性的强大的网络入侵检测/防御系统(NIDS/NIPS)。搭配自定义的规则、不同的插件与其他软件,Snort 能在不同的系统中发挥不同的作用。

Snort 3一些功能特性:

  1. 支持多线程
  2. 共享配置和属性表
  3. 使用简单的、脚本化配置
  4. 关键组件可热插拔
  5. 无端口配置的自动检测服务
  6. 在规则中支持粘性缓冲区
  7. 自动生成参考文档
  8. 更好的跨平台支持

3 、主要功能

  1. 数据包嗅探:从网络上读取数据包。
  2. 数据包分析:对捕获的数据包进行解码和分析。
  3. 数据包检测:根据用户定义的规则检测数据包中是否包含入侵行为。
  4. 响应处理:对检测到的入侵行为采取报警、记录日志等响应措施。

4、 工作模式

  1. 嗅探器模式(Packet Sniffer):仅从网络上读取数据包并显示在终端上。
  2. 数据包记录器模式(Packet Logging):将捕获的数据包记录到硬盘上。
  3. 网络入侵检测模式(Intrusion Prevention System):对数据包进行分析、按规则进行检测、做出响应。

Snort的命令行参数很多,可以使用 Snort-?命令列出这些参数及其简单的解释,详细的解释可以使用 man Snort命令查看帮助页

运行Snort命令的参数:

名称

含义

-A

设置报警模式:fast、full、none(只是使用报警文件)、undock(使用UNIX套接字记入日志,出于测试阶段)

-a

显示ARP(Address resolution protocol,地址解析协议)包

-b

日志文件使用tcpdump格式(更快)

-c

使用规则文件 rules

-C

只使用字符方式打印负载信息(不使用hex方式)

-d

复制应用层

-D

在后台运行 Snort(精灵状态)

-e

显示第二层(数据链路层)包头信息

-F

Read BPF filters from file

-g

初始化完成后,使 Snort的gid为 gname

-h

Home网络为h

-i

在接口if监听

-I

把界面名加入到报警输出界面

-I

设置目录ld为日志目录

-M

把SMB消息发送到文件 wrkst列出的工作站中(Requires smbclient to be in PATH)

-n

收到cnt个包后退出

-N

关闭日志功能(警报功能仍然有效)

-o

把规则测试顺序修改为:Pass|Alert|Log

-O

打乱被日志的IP地址

-p

关闭混杂嗅探模式

-P

设置复制的包的长度为 snaplen(默认:1514)

-q

安静模式。不输出 banner和状态报告

-r

读取并处理 tcpdump文件tf(回放功能)

-s

把所有警告信息记入 syslog

-S

设置规则文件中的n的值等于v的值

-t

初始化完成后 Chroot到dir目录

-u

初始化完成后,把 Snort的uid设置为 uname

-v

设置冗余模式

-V

显示版本号

-X

从链路层开始复制包的数据

-?

显示帮助信息

5 、部署与兼容性

Snort可以在多种操作系统上运行,如Linux、Windows等。其部署非常灵活,可以根据企业网络规模的大小,采用不同的部署结构。

6 、实验环境

实验所用的操作系统为Ubuntu 22.04 LTS(Long Term Support)

代码语言:javascript
复制
# lsb_release -a //查看Linux发行版本
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy

实验前Snort的版本: snort 2.9.15

代码语言:javascript
复制
# sudo apt show snort
Package:snort
Version:2.9.15.1-6build1
Priority: optional
Section: universe/net
Origin: Ubuntu

实验需安装的Snort版本:snort 3.6.0

代码语言:javascript
复制
# snort -V

-* > Snort++ <*-

Version 3.6.0.0
By Martin Roesch & The Snort Team
http://snort.org/contact#team
Copyright (C) 2014-2024 Cisco and/or its affiliates. All rights reserved.
Copyright (C) 1998-2013 Sourcefire, Inc., et al.
Using DAQ version 3.0.17
Using libpcap version 1.10.1 (with TPACKET_V3)
Using LuaJIT version 2.1.0-beta3
Using LZMA version 5.2.5
Using OpenSSL 3.0.2 15 Mar 2022
Using PCRE version 8.39 2016-06-14
Using ZLIB version 1.2.11

二、实验内容

步骤一 安装snort3和相关依赖

  • 更新软件源
代码语言:javascript
复制
sudo apt update     //更新软件源
  • 安装依赖软件包
代码语言:javascript
复制
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 -y
  • 安装Snort DAQ

下载并安装最新版本的 Snort DAQ(数据采集库)。 默认的 Ubuntu 软件库中不是最新版本,所以需要从源代码编译安装

(1)新建一个存放源码的目录snortSourceFiles并进入目录

代码语言:javascript
复制
mkdir snortSourceFiles    //创建snortSourceFiles

cd snortSourceFiles    //进入snortSourceFiles目录

从github上下载daq源码(此时需要手动输入“apt install git”指令安装git,并修改配置文件/etc/hosts添加github.com的IP)

代码语言:javascript
复制
git clone https://github.com/snort3/libdaq.git //从github上下载daq源码

(2)编译安装三部曲

  • 安装Google开发的线程缓存的malloc:TCMalloc(可选)

TCMalloc提供高效的多线程内存管理实现,用于替代操作系统的内存分配相关的函数(malloc、free,new,new[]等),具有减少内存碎片、适用于多核、更好的并行性支持等特性。

代码语言:javascript
复制
​
cd ..                    //回到上级snortSourceFiles目录

wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.8/gperftools-2.8.tar.gz                //从github下载gperftools压缩包

tar -xzf gperftools-2.8.tar.gz //解压gperftools

cd gperftools-2.8/        //进入gperftools-2.8目录

./configure              //配置

make && make install     //编译安装

​
  • 安装 Snort 3

(1)从Snort 3的GitHub 库中获取源码

代码语言:javascript
复制
cd ../         //回到上级snortSourceFiles目录

git clone https://github.com/snort3/snort3.git //获取snort3源码

(2)进入snort目录,编译安装

代码语言:javascript
复制
cd snort3/          //进入snort3目录

./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc //配置snort3

cd build/          //进入build目录

make           //编译

make install         //安装

(3)更新共享库

代码语言:javascript
复制
sudo ldconfig 

(4)查看snort版本:

代码语言:javascript
复制
snort -V 

以上信息说明Snort3安装成功并且可以工作正常了。

步骤二 配置网络接口

  • 网卡配置

首先,需要把 Snort 监听网络流量的网卡设置为混杂模式(在混杂模式下,网络接口会接收所有经过它的数据包,而不仅仅是那些目标MAC地址匹配自己的数据包。这通常用于网络监控和分析工具,如Wireshark,因为它们需要捕获网络上的所有流量。)

输入如下指令配置网卡状态:

代码语言:javascript
复制
ip a show				            //显示了网络接口的配置和状态
ip link set dev ens33 promisc on	//将 ens33 的网络接口设置为混杂模式(promiscuous mode)
ip a show ens33				        //再次查看ens33的状态,为混杂模式
  • 禁用网卡 Offload功能,以防止 Snort 截断大于 1518 字节的大数据包。

此时的禁用和开启网卡混杂模式都是临时的,可以通过把命令写入开机启动项中,让它重启后依然生效。

步骤三 配置snort规则集

规则集是Snort的核心组成部分,载和配置后,Snort 规则将分为两组:“社区规则集”和“Snort 订阅者规则集”。Snort 用户规则集由 Cisco Talos 开发、测试和批准。

  • Snort 订阅者规则集(Snort Subscriber Ruleset)的订阅者将收到 规则集。可以通过 Snort.org 网站下载规则并将其部署到网络中。
  • 社区规则集(Community Ruleset)由 Snort 社区开发,并由 Cisco Talos 进行 QAed。所有用户都可以免费使用它。
  • 从Snort官网下载snort3社区规则集

https://www.snort.org/downloads#rules

  • 创建Snort规则存放目录

在/usr/local/etc/snort/snort_defaults.lua配置文件中,默认的规则集存放路径(RULE_PATH)为/usr/local/etc/rules。

代码语言:javascript
复制
$sudo mkdir /usr/local/etc/rules         //创建默认规则集存放路径
$sudo tar xzf snort3-community-rules.tar.gz -C /usr/local/etc/rules/    //解压Snort规则规则集
$ls /usr/local/etc/rules/snort3-community-
rules/            //查看Snort规则集文件夹
AUTHORS  LICENSE  sid-msg.map  snort3-community.rules  VRT-License.txt
  • 接下来,需要配置Snort 3

Snort的主配置文件为:/usr/local/etc/snort/snort.lua。修改其中的HOME_NET变量和EXTERNAL_NET变量,并在ips部分定义规则集的路径

代码语言:javascript
复制
 sudo vim /usr/local/etc/snort/snort.lua
  • 将HOME_NET修改为需要进行网络攻击防范检测的网络范围(这里是本机所在的网段)。
代码语言:javascript
复制
HOME_NET = ‘any’---> HOME_NET = ‘192.168.127.1/24’
  • 将EXTERNAL_NET设置为除HOME_NET以外的所有网络范围。
代码语言:javascript
复制
EXTERNAL_NET = ‘any’ ---> EXTERNAL_NET ‘!$HOME_NET
  • 在ips部分定义规则集的路径,添加上:
代码语言:javascript
复制
include=‘/usr/local/etc/rules/snort3-community-rules/snort3-community-rules’

注意:可以把自定义规则路径写进/usr/local/etc/snort/snort.lua配置文件中,同样是在ips部分定义规则集的路径,在include = ‘自定义规则集的路径’

如我创建了一个/usr/local/etc/rules/local.rules本地规则,那么可以在ips部分添加上如下内容:

代码语言:javascript
复制
include = ‘/usr/local/etc/rules/local.rules’,

步骤四 安装 Snort OpenAppID

OpenAppID 是一个应用程序层插件,它使 Snort 能够检测网络中使用的各种应用程序,如 Facebook、Netflix、Twitter等。

  • 从 Snort 官网下载Snort OpenAppID
  • 解压并复制到相应的目录:
代码语言:javascript
复制
~/桌面/snortSourceFiles$  tar -xzf snort-openappid.tar.gz     //解压Snort OpenAppID
~/桌面/snortSourceFiles$ sudo cp -R odp /usr/local/lib/    //复制到/usr/local/lib/目录下
  • 编辑 Snort 3 配置文件并指定 OpenAppID 库的位置
代码语言:javascript
复制
~/桌面/snortSourceFiles$ sudo vim /usr/local/etc/snort/snort.lua
  • 创建Snort日志存放目录
代码语言:javascript
复制
~/桌面/snortSourceFiles$ sudo mkdir /var/log/snort
  • 检查snort配置是否正确:

提示Snort successfully validated the configuration (with 0 warnings). o")~ Snort exiting表示配置文件正确

代码语言:javascript
复制
~/桌面/snortSourceFiles$ snort -c /usr/local/etc/snort/snort.lua
--------------------------------------------------
o")~   Snort++ 3.6.0.0
--------------------------------------------------
Loading /usr/local/etc/snort/snort.lua:
Loading snort_defaults.lua:
Finished snort_defaults.lua:
......
--------------------------------------------------

search engine (ac_bnfa)
                instances: 334
                 patterns: 10776
            pattern chars: 175132
               num states: 123161
         num match states: 10496
             memory scale: MB
             total memory: 3.67905
           pattern memory: 0.577772
        match list memory: 1.33451
        transition memory: 1.726
        fast pattern only: 7097
appid: MaxRss diff: 226944
appid: patterns loaded: 11537
--------------------------------------------------
pcap DAQ configured to passive.
Snort successfully validated the configuration (with 0 warnings).
o")~   Snort exiting

步骤五 设置Snort 为服务模式运行

虽然可以使用-D参数将snort设置为后台运行,但为了更加方便,我们可以为Snort创建一个systemd服务单元,让Snort以服务模式运行。

  • 为了安全起见,单独为snort创建一个用户,并设置用户shell为nologin
代码语言:javascript
复制
~/桌面/snortSourceFiles$ sudo useradd -r -s /usr/sbin/nologin -M -c SNORT_IDS snort 
  • 创建snort3服务
代码语言:javascript
复制
~/桌面/snortSourceFiles$ sudo vim /etc/systemd/system/snort3.service

添加如下内容:

代码语言:javascript
复制
[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 ens33 -m 0x1b -u snort -g snort

[Install]
WantedBy=multi-user.target 
  • 重新加载systemd配置,并修改/var/log/snort目录权限。
代码语言:javascript
复制
~/桌面/snortSourceFiles$ sudo systemctl daemon-reload		//重新加载systemd的系统和服务管理器配置
~/桌面/snortSourceFiles$  sudo chmod -R 777 /var/log/snort		//给/var/log/snort目录赋予权限
~/桌面/snortSourceFiles$ sudo chown -R snort:snort /var/log/snort 		//改变/var/log/snort目录及其内容的所有者和所属组为snort
  • 启动snort服务并配置开机启动
代码语言:javascript
复制
~/桌面/snortSourceFiles$ sudo systemctl enable --now snort3.service 
  • 检查运行状态
代码语言:javascript
复制
~/桌面/snortSourceFiles$  sudo systemctl status snort3.service 

状态显示Active: active (running) ,说明服务运行正常。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、实验简介
    • 1、入侵检测系统的概述、作用、原理
    • 2 、Snort简介
    • 3 、主要功能
    • 4、 工作模式
      • 运行Snort命令的参数:
    • 5 、部署与兼容性
    • 6 、实验环境
  • 二、实验内容
    • 步骤一 安装snort3和相关依赖
    • 步骤二 配置网络接口
    • 步骤三 配置snort规则集
    • 步骤四 安装 Snort OpenAppID
    • 步骤五 设置Snort 为服务模式运行
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档