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

网络安全网络技术Linux
一、snort简介

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

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

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

        流程如图所示:

picture.image

        以下是其流程的详细描述:

  1. 数据包捕获:Snort 3 使用 libpcap 库来实现数据包捕获功能,通过网络接口卡的混杂模式,从网络上捕获经过的所有数据包。

  2. 预处理:捕获到的数据包会进入预处理阶段,Snort 3 包含一组称为检查器的可配置插件,这些检查器可以检测和分析特定类型网络协议的流量,对数据包进行规范化处理,如分解成各个协议层、重新组装等,为后续的检测分析做准备。

  3. 检测分析

    • 规则匹配:预处理后的数据包会被送入规则引擎,规则引擎依据预先定义的入侵规则来检查数据包。这些规则定义了特定的攻击签名、网络协议异常或恶意软件行为等特征。
    • 流检测:流过滤器会对实时流量进行重组和检测,对于检测某些复杂的多包攻击尤其重要,例如可以有效地重组 TCP 流量,使得检测 SQL 注入和其他需要跨多个数据包分析的攻击成为可能。
  4. 响应

    • 报警:如果数据包与规则集中的某条规则匹配,Snort 3 会根据规则定义的动作来响应。如果规则的动作是 “alert”,则会生成警报并记录到警报文件中,警报信息可以通过网络、UNIX socket、SNMP 协议的 trap 命令等传送给日志文件,甚至可以将报警传送给第三方插件。

    • 阻断:在一些配置中,Snort 3 可以与防火墙组件如 iptables 或 netfilter 集成,当检测到恶意流量时,通过与防火墙的联动直接阻断来自攻击源的 IP 地址的所有进一步访问请求,实现对恶意流量的实时阻断。

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

2 、Snort简介

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

picture.image

        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命令查看帮助页

5 、部署与兼容性

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

6 、实验环境

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

# 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

# sudo apt show snort
Package:snort
Version:2.9.15.1-6build1
Priority: optional
Section: universe/net
Origin: Ubuntu

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

# 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
二、snort安装相关内容

步骤一  安装snort3和相关依赖

  • 更新软件源

sudo apt update     //更新软件源
  • 安装依赖软件包

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

picture.image

  • 安装Snort DAQ

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

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

mkdir snortSourceFiles    //创建snortSourceFiles

cd snortSourceFiles    //进入snortSourceFiles目录

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

git clone https://github.com/snort3/libdaq.git //从github上下载daq源码

picture.image

        (2)编译安装三部曲

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

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

​
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     //编译安装

picture.image

  • 安装 Snort 3

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

cd ../         //回到上级snortSourceFiles目录

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

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

cd snort3/          //进入snort3目录

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

cd build/          //进入build目录

make           //编译

make install         //安装

picture.image picture.image

        (3)更新共享库

sudo ldconfig 

        (4)查看snort版本:

snort -V 

picture.image

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

步骤二  配置网络接口

  • 网卡配置

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

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

ip a show				            //显示了网络接口的配置和状态
ip link set dev ens33 promisc on	//将 ens33 的网络接口设置为混杂模式(promiscuous mode)
ip a show ens33				        //再次查看ens33的状态,为混杂模式

picture.image

  • 禁用网卡 Offload功能,以防止 Snort 截断大于 1518 字节的大数据包。

picture.image

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

步骤三  配置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

picture.image

  • 创建Snort规则存放目录

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

$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部分定义规则集的路径

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

picture.image

picture.image

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

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

include = ‘/usr/local/etc/rules/local.rules’,

步骤四  安装 Snort OpenAppID

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

  • 从 Snort 官网下载Snort OpenAppID

picture.image

  • 解压并复制到相应的目录:

~/桌面/snortSourceFiles$  tar -xzf snort-openappid.tar.gz     //解压Snort OpenAppID
~/桌面/snortSourceFiles$ sudo cp -R odp /usr/local/lib/    //复制到/usr/local/lib/目录下

picture.image

  • 编辑 Snort 3 配置文件并指定 OpenAppID 库的位置

~/桌面/snortSourceFiles$ sudo vim /usr/local/etc/snort/snort.lua

picture.image

  • 创建Snort日志存放目录

~/桌面/snortSourceFiles$ sudo mkdir /var/log/snort
  • 检查snort配置是否正确:

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

~/桌面/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

~/桌面/snortSourceFiles$ sudo useradd -r -s /usr/sbin/nologin -M -c SNORT_IDS snort 
  • 创建snort3服务

~/桌面/snortSourceFiles$ sudo vim /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 ens33 -m 0x1b -u snort -g snort

[Install]
WantedBy=multi-user.target 
  • 重新加载systemd配置,并修改/var/log/snort目录权限。

~/桌面/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服务并配置开机启动

~/桌面/snortSourceFiles$ sudo systemctl enable --now snort3.service 
  • 检查运行状态

~/桌面/snortSourceFiles$  sudo systemctl status snort3.service 

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

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
CV 技术在视频创作中的应用
本次演讲将介绍在拍摄、编辑等场景,我们如何利用 AI 技术赋能创作者;以及基于这些场景,字节跳动积累的领先技术能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论