没人讲清楚!我来讲!---- Ubuntu 20.04中下载配置Snort3,参数讲解及实现协议警报

毒爪的小新 2024-07-29 12:37:02 阅读 84

在这里插入图片描述

文章目录

Snort一、Snort介绍1.1 概述1.2 主要功能1.3 关键特性

二、安装Snort三、配置Snort规则集四、配置Snort4.1 配置网卡4.2 启动参数4.3 自定义规则参数4.4 警报测试

最近刚好有网络安全的学习需求,看了好多文章,感觉都没有讲的很清楚。于是总结了一下各位大佬的文章及我自己的看法,分享一下

Snort


一、Snort介绍


1.1 概述


<code>Snort 是一个功能强大的开源网络入侵检测和预防系统(IDS/IPS),由 Martin Roesch1998 年创建,现由 Cisco 旗下的 Sourcefire 进行维护和开发。Snort 通过监控网络流量,根据预定义的规则检测并响应潜在的安全威胁。

1.2 主要功能


入侵检测系统(IDS):Snort 作为 IDS 运行时,能够监控网络流量,检测并记录潜在的攻击行为,生成警报日志供管理员审查。

入侵预防系统(IPS):Snort 作为 IPS 运行时,不仅能够检测攻击,还可以采取措施阻止攻击,如丢弃恶意数据包或阻断连接。

数据包嗅探器:Snort 可以作为数据包嗅探器,实时捕获并显示网络中的数据包,用于网络故障排除和分析。

网络流量分析:Snort 能够分析网络流量的结构和内容,帮助识别网络中的异常活动和潜在威胁。

1.3 关键特性


规则驱动:Snort 使用灵活的规则语言定义检测条件,管理员可以编写和自定义规则来检测特定类型的攻击。协议分析:Snort 能够解析多种网络协议,如 IP、TCP、UDP、ICMP 等,从而深入分析数据包内容。模式匹配:Snort 支持多种模式匹配技术,包括字符串匹配、正则表达式匹配等,用于检测特定的攻击模式。预处理器:Snort 提供了多种预处理器插件,能够在数据包进行规则匹配之前进行初步处理,例如分片重组、流重组、解码等。响应选项:Snort 提供多种响应选项,包括生成警报、记录日志、执行外部命令、动态规则处理等。

二、安装Snort


更新源

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

安装Snort DAQ(数据采集库)

#建一个存放源码的目录

mkdir snortSourceFiles

cd snortSourceFiles

#从github上下载daq源码

git clone https://github.com/snort3/libdaq.git

cd libdaq/

#编译安装

./bootstrap

./configure

make

make install

安装Google开发的线程缓存的mallocTCMalloc,其提供高效的多线程内存管理实现,用于替代操作系统的内存分配相关的函数,具有减少内存碎片、适用于多核、更好的并行性支持等特性

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

从源码安装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

更新共享库

sudo ldconfig

安装完成,查看版本

snort -V

如果能看见版本信息,说明安装成功,我们这里安装是最新的3.1版本

在这里插入图片描述

三、配置Snort规则集


规则集是<code>Snort的核心组成部分,这里我们配置Community Rules (社区规则集),是免费的

首先创建规则文件夹,用于存放社区规则文件

mkdir /usr/local/etc/rules

从官网下载规则集

wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz

解压到目录

tar xzf snort3-community-rules.tar.gz -C /usr/local/etc/rules/

cd /usr/local/etc/rules/snort3-community-rules/

可以查看到以下文件

在这里插入图片描述

配置<code>Snort 3的主配置文件/usr/local/etc/snort/snort.lua

HOME_NET修改为需要进行网络攻击防范检测的网络范围将EXTERNAL_NET设置为除HOME_NET以外的所有网络范围

vi /usr/local/etc/snort/snort.lua

比如

HOME_NET = '10.10.1.1/24'

EXTERNAL_NET = '!$HOME_NET'

在这里插入图片描述

在<code>ips部分,添加上面我们下载的社区规则文件的路径,同时结尾利用逗号进行分隔

include = `/usr/local/etc/rules/snort3-community-rules/snort3-community.rules`

在这里插入图片描述

检查<code>snort配置是否正确,若没有错误会输出成功

snort -c /usr/local/etc/snort/snort.lua

在这里插入图片描述

四、配置Snort


4.1 配置网卡


首先把 <code>Snort 监听网络流量的网卡设置为混杂模式(为了监听各种的流量),这里的eth1是需要监听的流量端口

ip link set dev eth1 promisc on

# 或者

ifconfig eth1 promisc

在这里插入图片描述

禁用网卡 <code>Offload功能,以防止 Snort 截断大于 1518 字节的大数据

可以用以下命令检查是否启用了此功能

ethtool -k eth1 | grep receive-off

在这里插入图片描述

若没有工具,直接安装即可

<code>apt-get install ethtool

可以看到我这里两者都是关闭状态,如果开启,用下列命令进行禁用

ethtool -K ens33 gro off lro off

4.2 启动参数


启动Snort,并且指定加载的日志目录,以下是常见的启动参数

-c 指定配置文件的位置-R 指定要加载的规则文件-i 指定要监听的网络接口-s 设置捕获数据包的最大大小-k 设置校验和选项,none 表示忽略数据包的校验和错误-l 指定日志目录-A 参数用于设置警报模式,fast表示输出简化的警报信息-v参数,将以详细的方式输出每个捕获的数据包的信息

利用snort.lua文件中我们写入10.10.1.1/24地址发送数据包,数据流会经过snort,将日志写入刚才我们定义的目录中

snort -c /usr/local/etc/snort/snort.lua -i eth1 -s 65535 -k none -A fast -l /var/log/snort/ -v

snort可捕获icmp的数据包

在这里插入图片描述

4.3 自定义规则参数


每次都去修改<code>snort.lua文件太麻烦,如想要捕获别的类型数据包并输出警报,可以创建自定义规则

vi /usr/local/etc/rules/local.rules

以如下命令来讲解自定义规则的匹配参数,表示当匹配10.10.1.0/24 的任意端口向 10.10.2.0/24的任意端口发送UDP的数据包时,snort会发出警报

alert udp 10.10.1.0/24 any -> 10.10.2.0/24 any (msg:"UDP Traffic Detected from 10.10.1.0/24"; sid:1000003; rev:1;)

alert:动作类型,当规则条件匹配时,则生成警报,除此之外常用的动作还有

log:记录匹配的数据包pass:忽略匹配的数据包drop:丢弃数据包并记录警报(用于 IPS 模式)reject:丢弃数据包并发送 TCP 重置或 ICMP 不可达消息sdrop:静默丢弃数据包,不记录警报 udp:规则应用的协议,表示监听的数据包协议

tcpudpicmp:表示各种消息传输或控制协议ip:适用于所有 IP 流量 10.10.1.0/24 any:表示匹配源地址,any表示任意源端口

单个地址,可以直接使用ip表示ip范围,使用[192.168.1.1,192.168.1.100]表示单个端口,可直接表示端口范围,使用1024:2048表示多个端口,使用80,443,8080表示 10.10.2.0/24 any:表示匹配目的地址,any表示任意目的端口msg:表示输出的警告信息sid:1000004:规则ID,唯一标识符rev:1:规则的版本号(revision),便于版本管理pcre:正则匹配信息(示例中没写),例如pcre:"/GET.*HTTP/";匹配httpget请求

编辑配置文件

vi /usr/local/etc/snort/snort.lua

ips字段,将刚才自定义的规则写入

include = '/usr/local/etc/rules/local.rules'

在这里插入图片描述

检查是否成功配置,输出<code>successfully即无误

snort -c /usr/local/etc/snort/snort.lua

4.4 警报测试


写入udp检测的自定义规则

alert udp 10.10.1.0/24 any -> 10.10.2.0/24 any (msg:"UDP Traffic Detected from 10.10.1.0/24"; sid:1000003; rev:1;)

启动snort

snort -c /usr/local/etc/snort/snort.lua -i eth1 -s 65535 -k none -A fast -l /var/log/snort/ -v

测试udp,服务端启动

iperf3 -s -p 5201

客户端10.10.1.110.10.2.2发送udp数据测试,其中数据流也会经过snort

iperf3 -c 10.10.2.2 -u -p 5201

捕获udp数据包

在这里插入图片描述

若是匹配所有的数据包,则可以使用【<code>ip】字段来表示,即

alert ip 10.10.1.0/24 any -> 10.10.2.0/24 any (msg:"IP Traffic Detected from 10.10.1.0/24"; sid:1000003; rev:1;)

此时可以警告捕获到所有的数据包,例如icmptcp

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。