基于CentOS 8 系统环境下的 Snort 3 安装指南

article/2025/4/20 3:39:47

O、 阅读要求

本教程并不适合初学者,大家在阅读本文之前,需具备CentOS 8 Linux、Snort 2.9的成功安装经验。本次安装对网络依赖很大,所以大家一定要将网络状态调节好,本指南介绍的内容,仅在测试环境中使用。

一、环境

虚拟机:VMware Workstation V15

安装镜像:CentOS 8 (CentOS-8.2.2004-x86_64-minimal.iso )

安装方式:基于网络安全方面的考虑,本实验采用最小化安装CentOS 8、内存(4G+)、CPU(4 core)、磁盘空间(20G+)。

源码位置:将各类安装源码包存放在/root/sources/,试验之初,软件包可从github克隆。

二、CentOS8 系统初始化

当CentOS8初次安装完(安装过程忽略),系统还无法使用。首先我们要配置网络。这里我们为网卡配置静态IP地址。安装系统时仅选择Minimal Install最小化安装,其他任何选项无需勾选。

 

三、启用 EPEL 和 PowerTools软件源

Snort编译过程所需的某些开发包在CentOS 8默认存储库中不可用,所以我们需要在系统中添加EPEL和PowerTools仓库。

[root@localhost ~]#dnf config-manager --add-repo /etc/yum.repos.d/CentOS-PowerTools.repo

[root@localhost ~]# dnf config-manager --set-enabled PowerTools

[root@localhost ~]# dnf install epel-release

Tip:Centos7安装了dnf也可以执行这条命令。

安装PowerTools存储库

启用两个存储库后,请使用以下命令升级所有软件包:

#dnf upgrade

Transaction Summary

===============================Install 13 Packages

Upgrade 259 Packages

Total download size: 291 M

Is this ok [y/N]:

大概升级内容为291M,更新结束后,重启系统。

任务完成之后再次登录系统,在/etc/ld.so.conf.d/目录下创建local.conf配置文件

#vi /etc/ld.so.conf.d/local.conf

添加下面内容:

/usr/local/lib

/usr/local/lib64

保存退出

#ldconfig

四、安装依赖包

安装依赖包的环节非常重要。安装依赖包比较多,我们先分解安装

[root@localhost ~]# dnf install flex bison gcc gcc-c++ make cmake automake autoconf libtool

[root@localhost ~]# dnf install libpcap-devel pcre-devel libdnet-devel hwloc-devel openssl-devel zlib-devel luajit-devel pkgconfig libmnl-devel

[root@localhost ~]# dnf install libnfnetlink-devel libnetfilter_queue-devel

这行命令必须在安装DAQ之前执行。

安装完所有软件包后,下面需要从Git存储库下载LibDAQ,并从下载的源代码中进行编译。

五、安装libDAQ

#cd sources

#git clone snort3/libdaq

#cd libdaq/

#./bootstrap // 该命令执行完毕产生configure文件

#./configure

该命令执行结果如下图所示,如一致,方可继续操作。

#make //make 是单核,make j$(nproc)可以互换。

#make install

这里安装DAQ(数据采集库)。Snort 3和Snort 2.9.x.x系列使用的是不同的DAQ。

六、安装Hyperscan

Snort3将使用Hyperscan快速模式匹配。Hyperscan需要Ragel和Boost头文件,所以我们不能直接安装Hyperscan,为了一次性安装Hyperscan分为下面10个分步:

1.安装 LZMA and UUID

#dnf install xz-devel libuuid-devel

2.安装Python 和 Sqlite

#dnf install python3 sqlite-devel

3.安装colm

[root@localhost sources]# pwd

/root/sources

#tar zxvf colm-0.13.0.7.tar.gz && cd colm-0.13.0.7

#./configure

#make -j$(nproc)

#make -j$(nproc) install

#ldconfig

4.安装ragel

如果ragel包安装不正确,会直接导致hyperscan无法编译。

# curl -LO http://www.colm.net/files/ragel/ragel-7.0.0.12.tar.gz

#tar zxvf ragel-7.0.0.12.tar.gz && cd ragel-7.0.0.12

./configure

如果遇到错误configure: error: check colm: expected version 0.13.0.7, but is installed

可能是colm没安装正确,可通过“dnf install colm”一条命令搞定。下面继续编译ragel

#make -j$(nproc) //多核编译速度比单核快很多

#make -j$(nproc) install

#ldconfig

5.安装boost

由于Hyperscan需要Boost C++ Libraries, 要安装Hyperscan,还需要boost库版本为1.58或者更高版本,下面我们下载v1.72(这个包并不需要安装)。

[root@localhost sources]# //当前目录在/root/sources/

下载解压缩bootst

#tar xf boost_1_72_0.tar.gz

将bootst解压到当前目录即可。

6.安装hyperscan

经过上面5个步骤的准备工作之后,下面有请hyperscan正式出场。

#tar xf hyperscan-5.2.1.tar.gz

#mkdir hs-build && cd hs-build

创建软链接文件

[root@localhost hs-build]# ln -s ~/sources/boost_1_72_0/boost ~/sources/hyperscan-5.2.1/include/boost

确保当前目录为/root/sources/hs-build/再输入下列命令。

[root@localhost hs-build]# cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/ ../hyperscan-5.2.1

我们在安装Hyperscan 5.1.1时,需要Boost头文件引用的源目录路径。

安装编译过程中,出现以下显示内容,表示成功安装:

Configuring done

-- Generating done

-- Build files have been written to: /root/sources/hs-build

下面继续编译Hyperscan (过程较慢)

[root@localhost hs-build]# make -j$(nproc) //nproc是读取CPU的核心数量

见到以下内容,表示成功。

Scanning dependencies of target simplegrep

[ 99%] Building C object examples/CMakeFiles/simplegrep.dir/simplegrep.c.o

[100%] Linking CXX executable ../bin/simplegrep

[100%] Built target simplegrep

如果到这一步,表示编译通过,安装就非常简单了。

#make -j$(nproc) install

见到以下内容表示安装完成

-- Install configuration: "RELEASE"

-- Installing: /usr/local/lib64/pkgconfig/libhs.pc

-- Installing: /usr/local/include/hs/hs.h

-- Installing: /usr/local/include/hs/hs_common.h

-- Installing: /usr/local/include/hs/hs_compile.h

-- Installing: /usr/local/include/hs/hs_runtime.h

-- Installing: /usr/local/lib64/libhs_runtime.a

-- Installing: /usr/local/lib64/libhs.a

-- Installing: /usr/local/share/doc/hyperscan/examples/simplegrep.c

-- Installing: /usr/local/share/doc/hyperscan/examples/http://pcapscan.cc

-- Installing: /usr/local/share/doc/hyperscan/examples/http://patbench.cc

-- Installing: /usr/local/share/doc/hyperscan/examples/README.md

执行完成上面的命令,会在bin目录下,将会产生7个文件

[root@localhost bin]# pwd

/root/sources/hs-build/bin

[root@localhost bin]# ls

hsbench hscheck hscollider patbench pcapscan simplegrep unit-hyperscan

7.测试Hyperscan

安装好不好,测试说了算。下面我们来测试一下安装Hyperscan的成果吧。

[root@localhost bin]# ./unit-hyperscan

[==========] Running 3746 tests from 33 test cases.

[----------] Global test environment set-up.

[----------] 9 tests from CustomAllocator

[ RUN ] CustomAllocator.DatabaseInfoBadAlloc

[ OK ] CustomAllocator.DatabaseInfoBadAlloc (0 ms)

8.安装flatbuffers

首先看一下当前目录

[root@localhost sources]# pwd

/root/sources

#curl -Lo flatbuffers-1.12.tar.gz https://github.com/google/flatbuffers/archive/v1.12.0.tar.gz

#tar xf flatbuffers-1.12.tar.gz

#mkdir fb-build && cd fb-build

[root@localhost fb-build]#cmake ../flatbuffers-1.12.0

见到以下内容表示成功

-- Configuring done

-- Generating done

-- Build files have been written to: /root/sources/fb-build

#make -j$(nproc) //编译时间比较长

[100%] Built target flatsamplebinary

#make -j$(nproc) install //在 /usr/local/lib64目录增加了四个文件。

#ldconfig

#cd ../

9.安装Safec

安装safec有两种方法,我们任选其一即可:

方法1:

#dnf install libsafec libsafec-devel

#ln -s /usr/lib64/pkgconfig/safec-3.3.pc /usr/local/lib64/pkgconfig/libsafec.pc

注意上面这条命令,必须在Hyperscan正确安装完成之后,才能执行。

方法2:

如果首选从源码安装那么下面步骤

#curl -LO https://github.com/rurban/safeclib/releases/download/v08112019/libsafec-08112019.0-gad76c7.tar.gz :

#tar xf libsafec-08112019.0-gad76c7.tar.gz

#cd libsafec-08112019.0-gad76c7

[root@localhost libsafec-08112019.0-gad76c7]# ./configure

#make

# make install

# cd ../

10.安装Tcmalloc

#wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.8/gperftools-2.8.tar.gz

解包后执行下面命令

#./configure

#make

#make install

七、安装Snort3

第六步中的10个分步骤是最难的一个环节,只有他们都安装正确,才能进行这一步的安装。

[root@localhost sources]#tar xvf snort3.tar.gz cd snort3

[root@localhost sources]# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

[root@localhost sources]# export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH

[root@localhost sources]# echo $PKG_CONFIG_PATH //查看环境变量

Snort 3需要配置几个环境变量才能正确运行。我们将这些变量暂时存储在当前会话并且永久保存到本地.bashrc文件中.直接添加到.bashrc文件中。例如:

#sh -c "echo 'export SNORT_LUA_PATH=/opt/snort/etc/snort' >> ~/.bashrc"

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

其中/usr/local/snort就是snort3的安装路径。

--prefix=/usr/local/snort

上面这个参数,表示snort将文件安装在/usr/local/snort目录中。

#tree /usr/local/snort/ -Ld 3 //查看三层目录

开始编译snort3

[root@localhost snort3]# cd build/

[root@localhost snort3]#make -j$(nproc)

[root@localhost snort3]make -j$(nproc) install

[root@localhost snort3]cd ../../

典型编译报错:

Scanning dependencies of target rna

[ 80%] Building CXX object src/network_inspectors/rna/CMakeFiles/rna.dir/rna_event_handler.cc.o

[ 80%] Building CXX object src/network_inspectors/rna/CMakeFiles/rna.dir/rna_fingerprint_tcp.cc.o

In file included from /root/sources/snort3/src/network_inspectors/rna/rna_fingerprint_tcp.h:30,

from /root/sources/snort3/src/network_inspectors/rna/rna_fingerprint_tcp.cc:25:

/root/sources/snort3/src/network_inspectors/rna/rna_fingerprint.h:24:10: fatal error: uuid/uuid.h: No such file or directory

#include <uuid/uuid.h>

^~~~~~~~~~~~~

compilation terminated.

make[2]: *** [src/network_inspectors/rna/CMakeFiles/rna.dir/build.make:76: src/network_inspectors/rna/CMakeFiles/rna.dir/rna_fingerprint_tcp.cc.o] Error 1

make[1]: *** [CMakeFiles/Makefile2:5293: src/network_inspectors/rna/CMakeFiles/rna.dir/all] Error 2

make: *** [Makefile:152: all] Error 2

[root@localhost build]#

心得:如果编译到80%失败,经过调试后重新编译,前面0~80%的部分会非常快。

八、启动snort3

[root@localhost ~]# /usr/local/snort/bin/snort -V

,,_ -*> Snort++ <*-

o" )~ Version 3.0.2 (Build 5)

'''' By Martin Roesch & The Snort Team

Snort - Contact

Copyright (C) 2014-2020 Cisco and/or its affiliates. All rights reserved.

Copyright (C) 1998-2013 Sourcefire, Inc., et al.

Using DAQ version 3.0.0

Using LuaJIT version 2.0.4

Using OpenSSL 1.1.1c FIPS 28 May 2019

Using libpcap version 1.9.0-PRE-GIT (with TPACKET_V3)

Using PCRE version 8.42 2018-03-20

Using ZLIB version 1.2.11

Using FlatBuffers 1.12.0

Using Hyperscan version 5.2.1 2020-08-16

Using LZMA version 5.2.4

九、安装snort3 Extra

[root@localhost sources]# git clone https://github.com/snort3/snort_extra.git

Cloning into 'snort_extra'...

Username for 'GitHub: Where the world builds software': ossimuser

Password for 'GitHub: Where the world builds software':

[root@192 ~]# git clone snort3/snort3_extra

正克隆到 'snort3_extra'...

remote: Enumerating objects: 545, done.

remote: Counting objects: 100% (545/545), done.

remote: Compressing objects: 100% (316/316), done.

remote: Total 3724 (delta 322), reused 433 (delta 227), pack-reused 3179

接收对象中: 100% (3724/3724), 713.88 KiB | 650.00 KiB/s, 完成.

处理 delta 中: 100% (2490/2490), 完成.

进行本实验如果是在线下载源码,必须注册github账户。

在构建额外的插件之前,必须设置环境变量PKG_CONFIG_PATH。可以通过列出Snort安装目录来验证路径。

[root@192 tmp]# cd snort3_extra/

[root@192 snort3_extra]# export PKG_CONFIG_PATH=/usr/local/snort/lib64/pkgconfig:$PKG_CONFIG_PATH

[root@192 snort3_extra]#

[root@192 snort3_extra]# ./configure_cmake.sh --prefix=/usr/local/snort/extra

见到下面输出信息,表示成功

snort_extra version 1.0.0

Install options:

prefix: /usr/local/snort/extra

Compiler options:

CC: /usr/bin/cc

CXX: /usr/bin/c++

EXE_LDFLAGS:

MODULE_LDFLAGS:

-- Configuring done

-- Generating done

-- Build files have been written to: /root/snort3_extra/build

以上介绍的安装Snort3.0扩展为可选项,主要安装就基本到这,后期还有大量有关Snort3配置的话题,我们下期再聊吧。


http://chatgpt.dhexx.cn/article/Yx5pMBLZ.shtml

相关文章

msys2+mingw64+ragel安装

[msys2mingw64ragel安装] [简介] 这几天部门老大让解析几个东西&#xff0c;要求用ragel编写&#xff0c;在Windows环境下&#xff0c;要运用到mingw64&#xff0c;安装时发现mingw里没有pacman&#xff0c;需要现安装&#xff0c;然后发现Wget也没有。。。&#xff0c;所以改…

Ragel State Machine Compiler 的速度测试

据说Ragel生成的自动机程序&#xff0c;速度飞快&#xff0c;特地测试了一下&#xff0c;所得结果如下。 测试环境&#xff1a; VC6 Release下编译 测试规模&#xff1a; 一亿次 测试用例&#xff1a; Ragel编译r_atoi.rl文件 vs crt lib的 atoi函数 测试结果&…

Hello Ragel -- 生成状态机的神器

Ragel 是个很 NB 的能生成状态机的编译器&#xff0c;而且支持一堆语言&#xff1a;C、C、Object-C、C#、D、Java、Go 以及 Ruby。 原来的文本解析器是用正则表达式实现的&#xff0c;随着状态&#xff08;if-else&#xff09;越来越多&#xff0c;修改越来越麻烦。。。 安装 M…

嵌入式系统开发流程

一、嵌入式系统开发流程 1、系统需求分析&#xff1a;根据需求&#xff0c;确定设计任务和设计目标&#xff0c;指定设计说明书。 2、体系结构设计&#xff1a;描述系统如何实现所述的功能需求&#xff0c;包括对硬件、软件和执行装置的功能划分以及系统的软件、硬件选型。 …

嵌入式系统开发设计

嵌入式系统开发设计 嵌入式系统设计的主要任务是定义系统的功能、决定系统的架构&#xff0c;并将功能映射到系统实现架构上。系统架构既包括软件系统架构也包括硬件系统架构。 嵌入式系统设计具有以下特点&#xff1a; 软、硬件协同并行开发&#xff1b; 微处理器的类型多种…

嵌入式系统的概念,嵌入式系统的组成及特点,嵌入式系统的基本开发流程

1. 嵌入式系统的概念 嵌入式系统( Embedded system) , 是一种 "完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。 2 . 嵌入式系统的组…

配置嵌入式系统开发环境(教程)

配置嵌入式系统开发环境 前言一. 安装VMware Workstation&#xff1f;二、在虚拟机中安装Windows XP镜像1.创建虚拟机启动虚拟机进入PE系统 关于pdf中预实验的补充说明 前言 嵌入式实时操作系统及应用开发&#xff08;第三版&#xff09;罗蕾主编光盘镜像 链接&#xff1a;htt…

嵌入式Linux系统开发笔记(七)

嵌入式Linux系统开发笔记&#xff08;七&#xff09; 七、U-Boot基础 1.概述 在移植 Linux之前我们需要先移植一个 bootloader 代码&#xff0c;这个 bootloader 代码用于启动 Linux 内核&#xff0c; bootloader有很多&#xff0c;常用的就是 U-Boot。 移植好 U-Boot 以后再…

迅为-iMX6ULL开发板原创嵌入式开发文档系统化学习

iTOP-IMX6ULL核心板采用单核Cortex-A7架构&#xff0c;主频高达528 MHz&#xff0c;CPU集成电源管理&#xff0c;146 PIN引脚全部引出。核心板接口引出串口8路、CAN 2路、网口2路、I2C1路、SPI 2路、PWM8路、ADC5路、USB1路等功能。核心板在IMX6UL开发板上进行了深度优化&#…

Vxworks嵌入式开发系统入门基础概念学习

1.VxWorks应用 自动化设备、工业控制&#xff08;实时性好&#xff09;、军用设备以及消费电子。 2.实时性 实时性包括硬实时、软实时。硬实时系统有一个刚性的、不可改变的deadlines&#xff0c;它不允许任何超出deadlines的错误。而软实时是一个柔性灵活的&#xff0c;它可以…

嵌入式系统的开发流程

嵌入式系统的开发流程 摘要&#xff1a;本文以 HHARM9-EDU为例&#xff0c;简要说明一下嵌入式系统的开发流程。 整个流程很简单&#xff0c;流程图如下&#xff1a; 一、配置Linux及MINIGUI ①配置Linux&#xff1a; 由于 HHARM9-EDU推荐使用Redhat 9&#xff0c;所以这里只介…

嵌入式开发系统的简介

小白日志&#xff08;一&#xff09; 嵌入式开发系统的简介 嵌入式系统是一种以硬件为载体&#xff0c;以计算机技术为基础&#xff0c;以应用程序为核心&#xff0c;满足特定功能、要求以及应用环境的专用计算机系统。所谓“嵌入式”&#xff0c;顾名思义&#xff0c;嵌入到…

嵌入式系统开发环境概述

嵌入式系统开发环境主要包括&#xff1a; 集成开发工具交叉编译器批处理文件makefileLink Script调试工具下载工具其它工具(Offline Tools)模拟器版本控制工具 接下来分别讲解以上各个工具&#xff1a; 1、集成开发工具 一般CPU厂商会提供针对该CPU的集成开发环境(IDE)&…

嵌入式系统概述3-嵌入式系统的开发流程和学习基础、方法

嵌入式系统的开发流程 以带有操作系统的32位微处理器为核心的嵌入式系统为例&#xff1a; 第一步&#xff1a;建立开发环境 操作系统一般使用Redhat Linux&#xff0c;选择定制安装或全部安装&#xff0c;通过网络下载相应的GCC交叉编译器进行安装(比如&#xff0c;arm-linu…

嵌入式系统开发概述

1、嵌入式系统是什么 2、嵌入式系统的组成 3、嵌入式开发与传统单片机开发不同 4、嵌入式应用和就业方向 5、学习路线 1、嵌入式系统是什么&#xff1f; 嵌入式系统&#xff08;百度&#xff09;&#xff1a;嵌入式系统是以应用为中心&#xff0c;以计算机技术为基础&#…

mysql给用户授予某数据库权限_mysql 数据库授权(给某个用户授权某个数据库)

mysql 数据库授权(给某个用户授权某个数据库) 2016-10-10 带你飞 1.新建用户。 //登录MYSQL >mysql -u root -p >密码 //创建用户 mysql> insert into mysql.user(Host,User,Password) values("localhost","phplamp",password("1234"))…

MySQL数据库用户管理以及数据库用户授权

目录 一、数据库用户管理 1、新建用户 2、查看用户信息 3、重命名用户 4、删除用户 5、修改当前登录用户密码 6、修改其他用户密码 7、忘记 root 密码的解决办法 7.1 修改 /etc/my.cnf 配置文件&#xff0c;不使用密码直接登录到 mysql 7.2 使用 update 修改 root 密…

Mysql8数据库如何给用户授权

查看用户已有权限 SHOW GRANTS FOR [用户名];使用root用户授予所有权限 -- 授权 GRANT ALL PRIVILEGES ON [数据库名].[表明] TO [用户名][连接地址] WITH GRANT OPTION; -- 刷新权限 FLUSH PRIVILEGES;例如给numb用户的所有连接地址授权numb数据库所有表权限如下&#xff1a…

mysql授权用户多个数据库_MySQL创建用户授权数据库

MySQL等主流数据库的最高权限一般是root用户. 有时我们需要提供数据库的账号和密码以使用某些服务. 但实际上每个服务只会使用1个左右的数据库. 直接将root账号和密码随意分配是一件很危险的事情. 所以我们需要单独的创建用户, 并授权需要的数据库给它. 用户管理 创建用户 创建…

Mysql数据库给用户添加权限

1、Mysql下创建新的用户 新创建的用户默认是没有任何权限的。 语法格式&#xff1a; create user 用户名 identified by 密码; 2、给用户分配权限 语法结构&#xff1a; grant 权限 on 数据库.数据表 to 用户 主机名; 3、精确的控制用户的权限 略 参考博文&#xff1a; m…