IDS入侵检测系统
基于主机的 HIDS:检查网络中计算机上的事件
基于网络的 NIDS:检查网络网络上的流量恶意问题
NIDS-Snort
一个IDS和IPS(入侵防御系统)
规则库,自写规则,重要
官方规则:Snort Rules and IDS Software Download
安装
Ubuntu22.04上Snort3的安装与基本配置 _ubuntu安装snort-CSDN博客
安装依赖
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/
|
修改配置文件
1
| sudo vim /usr/local/etc/snort/snort.lua
|
ips栏目添加
1
| include='/usr/local/etc/rules/snort3-community-rules/snort3-community.rules',
|
字段之间必须用逗号隔开

检测配置是否正确
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
| 源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
|
方向
检测从外部访问者到服务器的请求(如 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
nocase
不区分大小写
示例
NIDS-Suricata
Suricata是一个高性能的网络IDS、IPS和网络安全监控引擎。它是开源的,由一个社区经营的非营利性基金会,开放的信息安全基金会所有。
官方文档Suricata 7.0.0
6. 司法规则 — Suricata 7.0.0-dev 文档
看到文档很完善,想在服务器装一个,服务器装不起,一直报错,docker装也崩了。
小摊
后面补一下,安装真的崩溃了,花了大量时间,还没成功。
其实主要是学习一下规则的书写,写规则要了解攻击的流量来完善规则的检测条件