Ubuntu上源码编译安装snort,使用snort进行数据检测和防御(简单示例) ...

打印 上一主题 下一主题

主题 969|帖子 969|积分 2907

前言

Snort是一个开源的网络入侵检测和防范系统(IDS/IPS),Snort是一个基于libpcap的轻量级网络入侵检测系统,它运行在一个“传感器(sensor)”主机上,监听网络数据。通过将网络数据与规则集进行模式匹配,Snort能够检测大概的入侵筹划,或者使用SPADE插件,使用统计学方法对网络数据进行异常检测。
本次实行在Ubuntu上演示,假如需要在其他版本的Linux下进行,可以以本篇文章做参考,借助大模子将命令适配到差别的操纵系统。
安装snort

1、更新apt源
  1. sudo apt update
复制代码
2、安装相关依赖
在Linux系统中,特殊是使用基于Debian的发行版(如Ubuntu)时,可以通过apt install命令一次性安装多个软件包。这些软件包之间用空格分隔。
使用这种方式安装多个包可以节省时间,由于不需要为每个包单独执行一条命令。别的,它还可以确保所有相关的依赖项都同时更新到兼容的版本,从而克制潜在的版本辩论。
  1. 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
复制代码
这条命令包罗的依赖包比较对,以下对相关依赖包的简单说明
   build-essential:这是一个编译环境的基础包,包罗了编译器(如gcc)、构建工具(如make)和须要的库文件。它是编译大多数源代码包所必须的。
libpcap-dev:libpcap(Packet CAPture)是一个用于网络流量捕获的库。Snort需要它来分析网络数据包。
  libpcre3-dev:PCRE(Perl Compatible Regular Expressions)是一个用于处置惩罚正则表达式的库。Snort使用PCRE来匹配规则中的模式。
libnet1-dev:libnet是一个用于构建和发送网络数据包的库。固然Snort自己不直接发送数据包,但它大概依赖于这个库来处置惩罚或解析网络数据。
  zlib1g-dev:zlib是一个用于数据压缩的库。Snort大概使用zlib来压缩或解压缩日志数据。
  luajit:LuaJIT是一个高性能的Lua语言表明器。Snort大概使用Lua脚原来扩展其功能或处置惩罚规则。
hwloc、libhwloc-dev:hwloc(Hardware Locality)是一个用于检测和使用硬件拓扑信息的库。Snort大概使用hwloc来优化其性能或资源分配。
libdnet-dev、libdumbnet-dev:这些库提供了用于网络编程的函数和接口。Snort大概使用它们来处置惩罚网络数据包或进行网络操纵。
bison、flex:Bison是一个语法分析器天生器,Flex是一个词法分析器天生器。它们通常用于编译器的开发,但也大概被Snort用于解析设置文件或规则。
liblzma-dev:LZMA是一个压缩算法,liblzma提供了该算法的库接口。Snort大概使用它来压缩数据。
openssl、libssl-dev:OpenSSL是一个强大的加密库,提供了SSL和TLS协议的实现。Snort大概使用OpenSSL来加密或解密网络数据。
pkg-config:pkg-config是一个帮助编译器和链接器找到库文件的工具。它简化了依赖库的管理。
  cmake:CMake是一个跨平台的自动化构建系统。固然Snort自己大概不使用CMake进行构建,但某些依赖项大概使用它。
  cpputest:CppUTest是一个C/C++单元测试框架。固然Snort的安装命令中包罗了它,但Snort自己大概不直接使用它进行单元测试。这大概是为了开发或测试与Snort相关的其他组件。
libsqlite3-dev:SQLite是一个轻量级的嵌入式关系数据库管理系统。Snort大概使用SQLite来存储日志数据或设置信息。
  uuid-dev:UUID(Universally Unique Identifier)库提供了天生全局唯一标识符的功能。Snort大概使用UUID来标识日志条目或会话。
libcmocka-dev:cmocka是一个用于C语言的轻量级单元测试框架。与CppUTest类似,它大概用于测试与Snort相关的组件。
  libnetfilter-queue-dev、libmnl-dev:这些库提供了与Linux内核netfilter框架交互的接口。Snort大概使用它们来实现某些高级的网络过滤或处置惩罚功能。
autotools-dev:这是一组用于自动化构建和测试的工具和库的聚集。它们大概用于构建Snort的某些依赖项。
libluajit-5.1-dev:这是LuaJIT 5.1的开发库。与luajit类似,它用于支持Lua脚本的执行。
  libunwind-dev:libunwind是一个用于栈回溯和调试的库。Snort大概使用它来处置惩罚错误报告或调试信息。
  3、安装Snort DAQ(数据收罗库)
   在Ubuntu上安装Snort时,安装DAQ(Data Acquisition Library,数据收罗库)是一个重要的步骤。DAQ是Snort的一个组件,它提供了一个抽象层,用于调用差别的包捕获库。这个抽象层使得Snort能够机动地处置惩罚来自差别网络接口的数据包。
  1. #建一个存放源码的目录
  2. mkdir snortSourceFiles
  3. cd snortSourceFiles
  4. #从github上下载daq源码
  5. git clone https://github.com/snort3/libdaq.git
复制代码

在当前文件夹下(snortSourceFiles)可以看到daq文件夹

  1. #转到libdaq目录下
  2. cd libdaq/
  3. #编译安装
  4. ./bootstrap
  5. ./configure
  6. make
  7. make install
复制代码
进入libdaq文件夹,进行编译安装



接着是sudo make install

由于很多实行都会用到make和make install,这里简单说明下两者
    make命令主要负责编译源代码,而make install命令则负责将编译后的软件安装到指定的位置。这两个命令在软件开发和部署过程中通常是一连使用的,先使用make命令进行编译,然后使用make install命令进行安装。
需要注意的是,在执行make和make install命令之前,通常需要先运行设置脚本(如./configure)来天生Makefile文件,并为编译和安装过程设置须要的参数和选项。别的,执行make install命令通常需要具有root权限,由于安装过程会向系统写入文件。这也说明了假如使用make install而不加sudo有时会报错。
  4、安装Google开发的线程缓存的malloc:TCMalloc,其提供高效的多线程内存管理实现,用于替代操纵系统的内存分配相关的函数,具有淘汰内存碎片、适用于多核、更好的并行性支持等特性。别的,TCMalloc通过使用线程当地存储(TLS)来缓存小块内存分配,淘汰了锁竞争,从而进步了多线程环境下的内存分配性能。
  1. cd snortSourceFiles
  2. wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.8/gperftools-2.8.tar.gz
  3. tar xzf gperftools-2.8.tar.gz
  4. cd gperftools-2.8/
  5. ./configure
  6. make
  7. make install
复制代码
假如在Ubuntu上使用wegt命令下载不了相关安装包(比如表现请求超时等征象),这里可以在浏览器中输入访问以下网址,直接将下载好的gperftools压缩包传到Ubuntu的snortSourceFiles 文件夹下,在进行相关解压。
GPerftools下载网站


可以检察下geperftoos下的文件

在gperftools目录下进行编译安装

然后是make编译,这个时间会比较长,等待即可。编译成功后使用sudo make install进行安装

5、源码编译snort
  1. cd snortSourceFiles
  2. git clone https://github.com/snort3/snort3.git
  3. cd snort3/
  4. sudo ./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc
  5. cd build/
  6. #编译安装的时间比较长
  7. make
  8. make install
复制代码
6、更新共享库
共享库通常包罗了很多常用的功能和代码,这些功能和代码可以被多个步调共享,以淘汰内存占用和进步系统性能。
  1. sudo ldconfig
复制代码
7、查抄snort版本
  1. snort -V
复制代码
假如表现没有安装snort命令,需要根据系统提示安装snort,在安装时会出现设置项,回车确认即可。(这里我均回车默认的,其中有一项需要输入网络接口检测名称,默认是eth0,我其时是按照默认来的,我的网卡名称为ens33,后来发现没有影响。假如不对的话,建议换成自己的网卡名,使用ifconfig即可检察)


此时再使用snort -v检察是否安装成功
出现版本号说明安装成功

至此,snort安装成功,接下来先容一个简单的实行,实行目的是 在Ubuntu上使用snort软件进行数据检测和防御,以防止外部网络对服务器使用大于800字节的数据包做ping攻击。
简单实行

1、进行规则设置
snort的规则设置文件一般存放在 /etc/snort/rules文件中,可以转到相关目录下进行rules文件的检察

输入命令
  1. vi  /etc/snort/rules
复制代码

由于我们要进行的是icmp设置,因此在rules文件中需要找到icmp的设置文件,然后回车进入,添加以下设置规则:
  1. alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"ICMP Large ICMP Packet"; dsize:>800; reference:arachnids,246; classtype:bad-unknown; sid:499; )
复制代码
简单先容下这段规则的寄义:
    alert:这个字段指定了规则的动作类型。在这里,alert表现当规则匹配到流量时,Snort将天生一个警报。
  icmp:这个字段指定了要查抄的协议类型。在这里,icmp表现Internet控制消息协议(ICMP),它是一种用于在IP网络中发送控制消息的协议,常用于ping操纵、错误报告等。
     $EXTERNAL_NET any -> $HOME_NET any:
这部门定义了规则的作用范围和方向。
$EXTERNAL_NET是一个变量,通常表现外部网络的IP地址范围。
any表现任何端口。
->表现流量的方向,从左边到右边。
$HOME_NET是另一个变量,通常表现受保护网络的IP地址范围。
第二个any同样表现任何端口。
总的来说,这部门指定了从外部网络到受保护网络的任何ICMP流量。
     (msg:"ICMP Large ICMP Packet"; dsize:>800; reference:arachnids,246; classtype:bad-unknown; sid:499; ):
这部门是规则的检测条件和附加信息。
msg:“ICMP Large ICMP Packet”:这是一个形貌性消息,当规则触发时,Snort会在警报中包罗这条消息。
dsize:>800:这指定了要检测的数据包大小条件。在这里,它表现数据包大小(data size)大于800字节。ICMP数据包通常很小,因此大于800字节的ICMP数据包大概是异常的,值得进一步调查。
reference:arachnids,246:这是一个参考字段,提供了有关该规则或检测到的活动的额外信息来源。在这里,它大概指向一个安全数据库或文章,表明了为什么这种类型的ICMP数据包被视为可疑。
classtype:bad-unknown:这指定了规则所属的分类类型。在这里,bad-unknown表现检测到的活动是不良的且未知的,这通常意味着它不符合已知的精良举动模式,但也没有充足的信息来确定它是具体的哪种攻击。
sid:499:这是规则的唯一标识符(signature ID)。每个Snort规则都有一个唯一的SID,用于在警报中标识该规则。
  

保存退出即可
这里要注意,当你刚进入icmp.rules文件中会发现内里其实已经有很多规则了,下面简单说下添加的规则与原有规则的差别点
   在Snort中,sid(安全标识符)是用于唯一标识每条规则的数字。当Snort处置惩罚规则时,它会根据sid来区分差别的规则。rev(修订版本)是用于指示规则版本的字段,它允许您在保持sid不变的情况下更新规则。
假如在添加一条新规则时没有指定rev字段,Snort会默认将其视为修订版本0(或者根据Snort的版本和设置,大概会使用其他默认值,但通常是0)。这不会与已经存在且指定了rev:1的类似sid的规则产生辩论,由于sid和rev的组合才是唯一的标识符。
  2、创建snort日志检测存放文件
  1. mkdir /var/log/snort
复制代码

一般在安装snort时,会默认将日志检测文件创建好,假如表现已有相关文件,可以无需创建。
3、将snort规则中的路径设置为snort下的rules规则

假如在打开snort.conf文件后发现RULES_PATH已经被准确设置为期望的Snort规则路径(RULES_PATH=指向snort目录下的rules文件夹),这表现Snort已经设置为从该路径加载规则文件,无需更改,退出即可。

4、使用snort规则对流量进行检测,并将结果输入到对应的日志文件中(这里ens33更换为你的网络接口,可以使用ifconfig进行检察)
输入命令
  1. sudo snort -i ens33 -c /etc/snort/snort.conf -A fast -l /var/log/snort/
复制代码

到此,在Ubuntu上可以使用snort进行检测,你可以直接进行步骤5。假如是想要进行规则测试,可以按照下面几条命令进行测试
  1. (可选)可以先使用如下命令检查下snort上的相关配置是否正确
  2. sudo snort -T -c /etc/snort/snort.conf
  3. (可选)规则测试(输出下图的信息说明成功开启检测)
  4. sudo snort -T -c /etc/snort/snort.conf -i ens33
  5. 这里发现使用ens0也可以成功
  6. sudo snort -T -c /etc/snort/snort.conf -i ens0
复制代码

5、开启检测
依旧是步骤4的命令
  1. sudo snort -i ens33 -c /etc/snort/snort.conf -A fast -l /var/log/snort/
复制代码
此时Ubuntu上不要做任何操纵,使用局域网内的主机对Ubuntu进行进行>800的攻击

然后Ubuntu可ctrl+z退出检测页面,接下来检察检测结果
6、检察检测日志
此时打开我们之前创建的(或者是默认创建完成的日志存放文件),可以在日志文件夹下看到有个alert文件,打开该文件可以检察日志信息
  1. cd /var/log/snort
  2. vi alert文件
复制代码


参考文章

感谢大佬提供的精彩好文!
没人讲清晰!我来讲!---- Ubuntu 20.04中下载设置Snort3,参数讲解及实现协议警报
Ubuntu16.04搭建入侵检测系统Snort

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表