Ubuntu上源码编译安装snort,使用snort进行数据检测和防御(简单示例)
前言Snort是一个开源的网络入侵检测和防范系统(IDS/IPS),Snort是一个基于libpcap的轻量级网络入侵检测系统,它运行在一个“传感器(sensor)”主机上,监听网络数据。通过将网络数据与规则集进行模式匹配,Snort能够检测大概的入侵筹划,或者使用SPADE插件,使用统计学方法对网络数据进行异常检测。
本次实行在Ubuntu上演示,假如需要在其他版本的Linux下进行,可以以本篇文章做参考,借助大模子将命令适配到差别的操纵系统。
安装snort
1、更新apt源
sudo apt update
2、安装相关依赖
在Linux系统中,特殊是使用基于Debian的发行版(如Ubuntu)时,可以通过apt install命令一次性安装多个软件包。这些软件包之间用空格分隔。
使用这种方式安装多个包可以节省时间,由于不需要为每个包单独执行一条命令。别的,它还可以确保所有相关的依赖项都同时更新到兼容的版本,从而克制潜在的版本辩论。
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能够机动地处置惩罚来自差别网络接口的数据包。
#建一个存放源码的目录
mkdir snortSourceFiles
cd snortSourceFiles
#从github上下载daq源码
git clone https://github.com/snort3/libdaq.git
https://i-blog.csdnimg.cn/direct/f2e26cefc08b4a0da3ad456f523229ec.png
在当前文件夹下(snortSourceFiles)可以看到daq文件夹
https://i-blog.csdnimg.cn/direct/a13f6ae7704a411ba26ac9111c81daf2.png
#转到libdaq目录下
cd libdaq/
#编译安装
./bootstrap
./configure
make
make install
进入libdaq文件夹,进行编译安装
https://i-blog.csdnimg.cn/direct/f1d3bc3040f0449daa089711fb4de508.png
https://i-blog.csdnimg.cn/direct/a068947674db4585a1a24b7eeb9c69dd.png
https://i-blog.csdnimg.cn/direct/66a08b19499f4b4782922a87a21cae4f.png
接着是sudo make install
https://i-blog.csdnimg.cn/direct/2a0c4b6628bf4b96a256907c709faac3.png
由于很多实行都会用到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)来缓存小块内存分配,淘汰了锁竞争,从而进步了多线程环境下的内存分配性能。
cd snortSourceFiles
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.8/gperftools-2.8.tar.gz
tar xzf gperftools-2.8.tar.gz
cd gperftools-2.8/
./configure
make
make install
假如在Ubuntu上使用wegt命令下载不了相关安装包(比如表现请求超时等征象),这里可以在浏览器中输入访问以下网址,直接将下载好的gperftools压缩包传到Ubuntu的snortSourceFiles 文件夹下,在进行相关解压。
GPerftools下载网站
https://i-blog.csdnimg.cn/direct/bd5e705eef0447238017f0175becd6c0.png
https://i-blog.csdnimg.cn/direct/a874f886f4b546dc80c62be6e0039ba2.png
可以检察下geperftoos下的文件
https://i-blog.csdnimg.cn/direct/0fe62928af0841f688b28685d9ad3620.png
在gperftools目录下进行编译安装
https://i-blog.csdnimg.cn/direct/11fc936c6b974a378548f16167d1508f.png
然后是make编译,这个时间会比较长,等待即可。编译成功后使用sudo make install进行安装
https://i-blog.csdnimg.cn/direct/31c14cb8bf9f4493b73f0fb8ed2a31e8.png
5、源码编译snort
cd snortSourceFiles
git clone https://github.com/snort3/snort3.git
cd snort3/
sudo ./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc
cd build/
#编译安装的时间比较长
make
make install
6、更新共享库
共享库通常包罗了很多常用的功能和代码,这些功能和代码可以被多个步调共享,以淘汰内存占用和进步系统性能。
sudo ldconfig
7、查抄snort版本
snort -V
假如表现没有安装snort命令,需要根据系统提示安装snort,在安装时会出现设置项,回车确认即可。(这里我均回车默认的,其中有一项需要输入网络接口检测名称,默认是eth0,我其时是按照默认来的,我的网卡名称为ens33,后来发现没有影响。假如不对的话,建议换成自己的网卡名,使用ifconfig即可检察)
https://i-blog.csdnimg.cn/direct/275634c086f84f9c895f8cb7d2237c6a.png
https://i-blog.csdnimg.cn/direct/e9929fe2bbfd4c9a8f1c2ba0eba668f7.png
此时再使用snort -v检察是否安装成功
出现版本号说明安装成功
https://i-blog.csdnimg.cn/direct/9d56b85772cc44759389f0bba7ef09a3.png
至此,snort安装成功,接下来先容一个简单的实行,实行目的是 在Ubuntu上使用snort软件进行数据检测和防御,以防止外部网络对服务器使用大于800字节的数据包做ping攻击。
简单实行
1、进行规则设置
snort的规则设置文件一般存放在 /etc/snort/rules文件中,可以转到相关目录下进行rules文件的检察
https://i-blog.csdnimg.cn/direct/ba9202b6ad65453f836b24f172b055a3.png
输入命令
vi/etc/snort/rules
https://i-blog.csdnimg.cn/direct/b792a9081d294bf2a05c0fec7816d228.png
由于我们要进行的是icmp设置,因此在rules文件中需要找到icmp的设置文件,然后回车进入,添加以下设置规则:
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,用于在警报中标识该规则。
https://i-blog.csdnimg.cn/direct/af5696982ebc4d398f0181b0f016c373.png
保存退出即可
这里要注意,当你刚进入icmp.rules文件中会发现内里其实已经有很多规则了,下面简单说下添加的规则与原有规则的差别点
在Snort中,sid(安全标识符)是用于唯一标识每条规则的数字。当Snort处置惩罚规则时,它会根据sid来区分差别的规则。rev(修订版本)是用于指示规则版本的字段,它允许您在保持sid不变的情况下更新规则。
假如在添加一条新规则时没有指定rev字段,Snort会默认将其视为修订版本0(或者根据Snort的版本和设置,大概会使用其他默认值,但通常是0)。这不会与已经存在且指定了rev:1的类似sid的规则产生辩论,由于sid和rev的组合才是唯一的标识符。
2、创建snort日志检测存放文件
mkdir /var/log/snort
https://i-blog.csdnimg.cn/direct/9b1ef0eec74e4ee293a51f50b9d259f3.png
一般在安装snort时,会默认将日志检测文件创建好,假如表现已有相关文件,可以无需创建。
3、将snort规则中的路径设置为snort下的rules规则
https://i-blog.csdnimg.cn/direct/c05a69cc41824d67b4e8f2eae19736ab.png
假如在打开snort.conf文件后发现RULES_PATH已经被准确设置为期望的Snort规则路径(RULES_PATH=指向snort目录下的rules文件夹),这表现Snort已经设置为从该路径加载规则文件,无需更改,退出即可。
https://i-blog.csdnimg.cn/direct/e62631c08fdf47c4a14643095323e92a.png
4、使用snort规则对流量进行检测,并将结果输入到对应的日志文件中(这里ens33更换为你的网络接口,可以使用ifconfig进行检察)
https://i-blog.csdnimg.cn/direct/a3ebb7ea74724f56b768f49b3edfdd7b.png输入命令
sudo snort -i ens33 -c /etc/snort/snort.conf -A fast -l /var/log/snort/
https://i-blog.csdnimg.cn/direct/c2d148a5eb75490889f1c71515854356.png
到此,在Ubuntu上可以使用snort进行检测,你可以直接进行步骤5。假如是想要进行规则测试,可以按照下面几条命令进行测试
(可选)可以先使用如下命令检查下snort上的相关配置是否正确
sudo snort -T -c /etc/snort/snort.conf
(可选)规则测试(输出下图的信息说明成功开启检测)
sudo snort -T -c /etc/snort/snort.conf -i ens33
这里发现使用ens0也可以成功
sudo snort -T -c /etc/snort/snort.conf -i ens0
https://i-blog.csdnimg.cn/direct/e3b19ff5fc50452f81ab50d554b7f2d4.png
5、开启检测
依旧是步骤4的命令
sudo snort -i ens33 -c /etc/snort/snort.conf -A fast -l /var/log/snort/
此时Ubuntu上不要做任何操纵,使用局域网内的主机对Ubuntu进行进行>800的攻击
https://i-blog.csdnimg.cn/direct/271c2a8693714f229c0493a3bc467171.png
然后Ubuntu可ctrl+z退出检测页面,接下来检察检测结果
6、检察检测日志
此时打开我们之前创建的(或者是默认创建完成的日志存放文件),可以在日志文件夹下看到有个alert文件,打开该文件可以检察日志信息
cd /var/log/snort
vi alert文件
https://i-blog.csdnimg.cn/direct/0758776c7f65425e8738ccfacbc265ec.png
https://i-blog.csdnimg.cn/direct/d36a94e256a84ad4aaa0c90380313534.pnghttps://i-blog.csdnimg.cn/direct/09ea579ad1a44ea7b58fa923f25f4753.png
参考文章
感谢大佬提供的精彩好文!
没人讲清晰!我来讲!---- Ubuntu 20.04中下载设置Snort3,参数讲解及实现协议警报
Ubuntu16.04搭建入侵检测系统Snort
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]