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

news2025/1/21 18:49:43

在这里插入图片描述

文章目录

  • Snort
    • 一、Snort介绍
      • 1.1 概述
      • 1.2 主要功能
      • 1.3 关键特性
    • 二、安装Snort
    • 三、配置Snort规则集
    • 四、配置Snort
      • 4.1 配置网卡
      • 4.2 启动参数
      • 4.3 自定义规则参数
      • 4.4 警报测试


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

Snort


一、Snort介绍


1.1 概述


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


1.2 主要功能


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

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

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

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


1.3 关键特性


  1. 规则驱动:Snort 使用灵活的规则语言定义检测条件,管理员可以编写和自定义规则来检测特定类型的攻击。
  2. 协议分析:Snort 能够解析多种网络协议,如 IP、TCP、UDP、ICMP 等,从而深入分析数据包内容。
  3. 模式匹配:Snort 支持多种模式匹配技术,包括字符串匹配、正则表达式匹配等,用于检测特定的攻击模式。
  4. 预处理器:Snort 提供了多种预处理器插件,能够在数据包进行规则匹配之前进行初步处理,例如分片重组、流重组、解码等。
  5. 响应选项: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规则集


规则集是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/

可以查看到以下文件

在这里插入图片描述

配置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'

在这里插入图片描述

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

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

在这里插入图片描述

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

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

在这里插入图片描述


四、配置Snort


4.1 配置网卡


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

ip link set dev eth1 promisc on
# 或者
ifconfig eth1 promisc

在这里插入图片描述

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

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

ethtool -k eth1 | grep receive-off

在这里插入图片描述

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

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 自定义规则参数


每次都去修改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'

在这里插入图片描述

检查是否成功配置,输出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数据包

在这里插入图片描述

若是匹配所有的数据包,则可以使用【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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1681817.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript-基本数据类型和变量

基本数据类型 JavaScript支持数字、字符串和布尔值3种基本数据类型 字符串型 字符串型是JavaScript用来表示文本的数据类型,字符串通常由单引号或双引号括起来,如果字符串存在特殊字符,可以用转义字符代替 数字型 数字型也是JavaScript中的基…

【自然语言处理】二元文法模型

实验名称 二元文法模型 实验目的1.掌握N-gram文法的公式; 2.理解语言模型的实现过程; 3.掌握简单的平滑方法; 4.用代码编程实现2元语言模型,即一阶马尔可夫链。 实验内容:使用免费的中文分词语料库,如人民…

软考:数据流图案例

阅读下列说明和图,回答问题1至问题4。 一、说明 某医院欲开发病人监控系统。该系统通过各种设备监控病人的生命体征,并在生命体征异常时向医生和护理人员报警。该系统的主要功能如下: (1)本地监控:定期获…

Ubuntu20.4部署Cuda12.4

准备Ubuntu20.4 VM 安装Cuda12.4 1.进入如下界面安装安装Cuda12.4版本: CUDA Toolkit 12.4 Update 1 Downloads | NVIDIA Developerhttps://developer.nvidia.com/cuda-downloads?target_osLinux&target_archx86_64&DistributionUbuntu&target_vers…

Swift知识点(三)

11. init、deinit、可选链、协议、元类型 构造和析构 构造方法 构造方法是一种特殊的方法 一个对象创建完毕后,都需要调用构造方法进行初始化(比如属性的初始化) 验证:init方法是在对象创建完毕的时候调用 回到存储属性 在对…

【资源汇总】GIS/RS相关软件包+数据分享(直接获取附链接)

01软件类 ArcGIS 10.2 链接:https://pan.baidu.com/s/1euHa3eTiaTjiOu-zxsi9eA?pwdnjov ArcGIS Pro 2.8.6 链接:https://pan.baidu.com/s/1Y3AQshCGL7tA1zdUc7s9PQ?pwdlkic ENVI 5.3 链接:https://pan.baidu.com/s/14k4IVlYIheNOr2to…

visual studio 2017重命名解决方案或项目名称

1.解决方案->右键->重命名->新的名字 2.项目->右键->重命名->新的名字 3.修改程序集和命名空间名称 项目->右键->属性->修改程序集名称和命名空间名称 4.搜索换名 Ctrl-F->输入旧名称->搜索->将所有旧名称改为新名称(注意是整…

【吊打面试官系列】Java高并发篇 - 创建线程的有哪些方式?

大家好,我是锋哥。今天分享关于 【创建线程的有哪些方式?】面试题,希望对大家有帮助; 创建线程的有哪些方式? 1、继承 Thread 类创建线程类 2、通过 Runnable 接口创建线程类 3、通过 Callable 和 Future 创建线程 …

Nginx性能优化系列 | Nginx的location规则配置详解

Nginx性能优化系列 | Nginx的location规则配置详解 1. Nginx设置过滤条件 1. Nginx设置过滤条件 如果请求一个不存在网站接口路径,为避免被听云检测到过多错误次数触发告警,可以在Nginx层面设置对错误的请求路径直接返回200正确码 # vim /usr/local/ngi…

FestDfs快速安装和数据迁移同步。Ubuntu环境

一:防火墙 ufw status 二:下载 分别是(环境依赖,网络模块依赖,安装包) git clone https://github.com/happyfish100/libfastcommon.git git clone https://github.com/happyfish100/libserverframe.git …

[牛客网]——C语言刷题day3

答案&#xff1a;A 解析&#xff1a; A.表示将数组a的首地址赋值给指针变量p B.将一个int型变量直接赋值给一个int型的指针是不行的 C.道理同B D.j2是一个右值&#xff0c;右值是不能进行取地址操作的 #include <iostream> using namespace std;#define N 7 int fun…

武汉星起航深耕亚马逊跨境,助力合作伙伴实现全球业务增长

在数字化浪潮席卷全球的今天&#xff0c;跨境电商业务蓬勃发展&#xff0c;成为推动国际贸易增长的重要引擎。亚马逊&#xff0c;作为全球最大的电商平台之一&#xff0c;以其独特的平台特点和全球化布局&#xff0c;为卖家和买家提供了便捷、高效的交易环境&#xff0c;成为众…

后台菜单数据递归展示

后台菜单数据递归展示 效果示例图aslide.vueaslideItem.vuemenu 效果示例图 aslide.vue <script setup>import {ref} from vue;const props defineProps({isCollapse: {type: Boolean,default: false}});import AslideItem from "./aslideItem.vue"const def…

JETBRAINS IDES 分享一个2099通用试用码!DataGrip 2024 版 ,支持一键升级

文章目录 废话不多说上教程&#xff1a;&#xff08;动画教程 图文教程&#xff09;一、动画教程激活 与 升级&#xff08;至最新版本&#xff09; 二、图文教程 &#xff08;推荐&#xff09;Stage 1.下载安装 toolbox-app&#xff08;全家桶管理工具&#xff09;Stage 2 : 下…

CST电磁仿真软件什么是Schematic?三维模型和电路协同仿真【小白必学教程】

什么是Schematic? 使用CST Design Studio进行的各种分析&#xff01; Schematic 进行三维仿真时&#xff0c;有时需要将3D模型和电路图放在一起进行仿真分析。比如需要天线和匹配电路协同仿真&#xff0c;两者构成完整的电路图可以系统地分析In/0ut特性。按下3D工作界面下方…

了解RFID技术如何改善危化品仓储管理效率

随着科学的发展&#xff0c;我国化工行业也迎来飞速进步的黄金时期&#xff0c;而生产加工快速化的同时也导致一些危险化学品的使用量与存储量不断增加。由于危险化学品种类较多&#xff0c;使用和存储的方法都不一样&#xff0c;还具有易燃、易爆、腐蚀、毒害等特性&#xff0…

c语言中数字字符串和数字互转

#include <getopt.h> #include <stdio.h> #include <stdlib.h>#define MAX_PATH 256 char filename[MAX_PATH 5]; int main(int argc, char** argv) {//数字字符串转数字const char* kk "689";int zhi atoi(kk) 8;//数字字符串转doubledoub…

面对《消费者告知法》严查与技术BUG频发,亚马逊卖家如何巧妙应对挑战?

五一假期期间&#xff0c;亚马逊大量发送《美国消费者告知法案》验证邮件通知&#xff0c;在这个本该是卖家们忙碌而喜悦的时刻&#xff0c;亚马逊平台上的卖家们却遭遇了一场前所未有的“灾难”——《消费者告知法》验证问题的爆发&#xff0c;以及随之而来的一系列技术BUG&am…

Linux ps命令详细参数

一、简介 在Linux系统中&#xff0c;ps(Process Status的缩写)命令常常用来用来列出系统中当前运行的进程。ps命令列出的是当前那些进程的快照&#xff0c;就是执行ps命令的那个时刻的那些进程&#xff0c;如果想要动态的显示进程信息&#xff0c;就可以使用top命令。要对进程…

java基础之对线程的理解

目录 程序、进程、线程 什么是进程&#xff1f; 什么是线程 线程与进程的区别&#xff1f; 二、多线程 实现多线程方式一&#xff1a;继承Thread类 实现多线程方式二&#xff1a;实现Runnable接口 实现多线程方式三: 实现Callable接口 ​ 三种实现方式的对比 设置和获…