NIDS

IDS入侵检测系统

基于主机的 HIDS:检查网络中计算机上的事件

基于网络的 NIDS:检查网络网络上的流量恶意问题

NIDS-Snort

一个IDS和IPS(入侵防御系统)

规则库,自写规则,重要

官方规则:Snort Rules and IDS Software Download

安装

Ubuntu22.04上Snort3的安装与基本配置 _ubuntu安装snort-CSDN博客

1
sudo apt update

安装依赖

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 -y

Snort DAQ(数据采集库)

需要root权限

1
2
3
4
5
6
7
8
git clone https://github.com/snort3/libdaq.git

生成./configure
./bootstrap

./configure
make
make install

snort3

官方下载源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//进入snort3目录
cd snort3/

//配置snort3
./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc

路上缺少的包
sudo apt install libpcre2-dev
sudo apt install google-perftools libgoogle-perftools-dev

//进入build目录
cd build/

//编译
make
//安装
make install

配置网络接口

监听的网卡设置为混杂模式,这里使用Ubuntu系统

1
2
3
4
ip a show
ip link set dev ens37 promisc on

ip a show ens37

前后对比

1
2
ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> 
ens37: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP>

禁用网卡 Offload功能

以防止 Snort 截断大于 1518 字节的大数据包。

1
2
3
查看是否全为off
ethtool -k ens37 | grep receive-off
ethtool -K ens37 gro off lro off

修改是临时的,重启会再次开启

配置规则集

社区规则集下载

Snort Rules and IDS Software Download

1
2
3
4
5
6
7
#创建默认规则集存放路径
sudo mkdir /usr/local/etc/rules

sudo tar xzf snort3-community-rules.tar.gz -C /usr/local/etc/rules/
ls /usr/local/etc/rules/snort3-community-
rules/
# AUTHORS LICENSE sid-msg.map snort3-community.rules VRT-License.txt

修改配置文件

1
sudo vim /usr/local/etc/snort/snort.lua

ips栏目添加

1
include='/usr/local/etc/rules/snort3-community-rules/snort3-community.rules',

字段之间必须用逗号隔开

image-20250417114054005

检测配置是否正确

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

启动

可以参考,我们安装是snort3

Snort命令行参数详解-CSDN博客

常用配置文件及目录

1
2
3
4
5
配置文件
/usr/local/etc/snort/snort.lua

规则目录
/usr/local/etc/rules
1
/usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 -k none -l /var/log/snort -D -i ens33 -m 0x1b -u snort -g snort

参数 | 含义
-i | 指定监听的网络接口
-c | 指定配置文件
-A | 设置报警模式(例如 alert_fast)
-l

| 指定日志目录
-K | 指定日志格式(如 ascii, pcap)

自写规则

snort2.9规则-学习笔记_snort规则库-CSDN博客
Snort3: 规则语法规范(三) - 魔神八号 - 博客园

可借助AI

规则实例

规则动作

也支持自定义的规则

1
2
3
4
5
alert 警报并记录
pass 忽略
log 记录
activation 报警并启动另一个动态规则链
dynamic 由其他规则包调用

协议

核心支持的协议

1
2
3
4
ip 检查IP分片攻击,IP协议号异常流量
icmp Ping洪水攻击,ICMP重定向
tcp 检测HTTP,SSH,FTP等基于TCP的协议流量
udp 检测DNS,DHCP,QUIC等

其他协议

1
2
3
4
IPv6
SCTP
GRE
ICMPv6

数据包的来源和目标地址

1
2
ip 端口 <> 目标ip 端口
网络层不需要写端口

ip表示

1
2
3
4
5
any 全部
$EXTERNAL_NET 预定义变量,外部网络IP
192.168.8.0/24 C类地址
192.168.2.0/24,192.168.8.0/24 多个C类地址
![192.168.2.0/24,192.168.8.0/24] 不包括

端口表示

1
2
3
4
5
:1024表示比1024小,包含1024的所有端口
1000: 表示比1000大,包括1000的所有端口
!53 不是53端口
错误:53,54
正确:53:54

方向

1
2
-> 左为源头,右为目标
<> 双向

检测从外部访问者到服务器的请求(如 HTTP 请求):

1
alert tcp $EXTERNAL_NET any -> $HOME_NET 80 (msg:"Inbound HTTP Request"; ...)

检测服务器对客户端的响应(如 HTTP 响应):

1
alert tcp $HOME_NET 80 -> $EXTERNAL_NET any (msg:"Outbound HTTP Response"; ...)

其他

msg
1
2
保存到日志中的信息
msg:"find sqlmap attack";
content
1
检测内容
nocase

不区分大小写

示例

NIDS-Suricata

Suricata是一个高性能的网络IDS、IPS和网络安全监控引擎。它是开源的,由一个社区经营的非营利性基金会,开放的信息安全基金会所有。

官方文档Suricata 7.0.0

6. 司法规则 — Suricata 7.0.0-dev 文档

看到文档很完善,想在服务器装一个,服务器装不起,一直报错,docker装也崩了。

小摊

后面补一下,安装真的崩溃了,花了大量时间,还没成功。

其实主要是学习一下规则的书写,写规则要了解攻击的流量来完善规则的检测条件


NIDS
https://rpniu.github.io/2025/04/17/NIDS/
作者
rPniu
发布于
2025年4月17日
许可协议