Snort 是一个开源的网络入侵检测系统(IDS)和网络入侵防御系统(IPS),用于检测和防御各种网络攻击。它由 Martin Roesch 于1998年开发,并且广泛应用于网络安全领域。Snort 可以实时监控网络流量并分析数据包,以检测潜在的恶意活动。
主要特点
协议分析:Snort 可以分析多种网络协议,如 TCP/IP、UDP、HTTP、FTP 等,识别异常的通信行为。
规则集:Snort 使用规则集来定义检测和防御策略。用户可以根据需求定制规则,或者使用由 Snort 社区和其他安全专家提供的标准规则。
流量捕获与包分析:Snort 可以在不同的网络接口上捕获数据包并对其进行深度分析。它不仅可以检查头部信息,还能够查看包体内容。
实时检测与记录:Snort 在运行时可以实时分析流量,并将发现的可疑活动记录到日志中,提供详细的攻击信息。
灵活性和可扩展性:Snort 提供了高度的灵活性,支持插件扩展、脚本编写、与其他安全工具(如防火墙、日志分析工具等)集成。
防御模式(IPS):Snort 除了可以作为入侵检测系统使用,还可以作为入侵防御系统,在发现攻击时采取主动的阻断措施,如丢弃恶意流量或重置连接。
工作原理
Snort 主要依赖于规则来分析网络流量,基于这些规则判断是否存在可疑或恶意行为。规则可以定义攻击特征、数据包大小、通信模式等内容。Snort 支持三种工作模式:
- 监控模式(Sniffer Mode):仅捕获和显示网络流量,不进行任何分析和报警。
- 入侵检测模式(IDS):对流量进行深度分析,发现并报告潜在的攻击。
- 入侵防御模式(IPS):在检测到攻击时,除了报警外,还能采取主动的防御措施,如丢弃攻击数据包或重置连接。
Snort 规则
Snort 使用规则集来定义检测逻辑,规则通常由以下几个部分组成:
- 动作:例如
alert
(报警)、drop
(丢弃数据包)等。 - 协议:如
TCP
、UDP
、ICMP
等。 - 源和目的地址:如源IP地址、目标IP地址。
- 端口:源端口、目标端口。
- 内容:用于匹配数据包内容的字符串模式。
- 选项:一些特定的参数,用于进一步定义规则(如流量大小、TTL 值等)。
ips 和ids 模式
1. 启动模式配置
在 Snort 的配置文件(snort.conf
)中,设置 Snort 运行在不同的模式来决定是 IDS 还是 IPS。
- IDS 模式:默认配置,Snort 只检测流量并生成警报,不会主动干预。
- IPS 模式:通过启用阻止功能,Snort 在检测到攻击时会采取动作(比如丢弃数据包或重置连接)。
2. 配置 Snort 在 IDS 模式
如果你只希望 Snort 作为入侵检测系统运行(IDS),你可以确保以下配置项在 snort.conf
中设置为 警报模式:
#启用报警机制 output alert_fast: stdout
在这个配置中,Snort 将仅生成警报而不会采取任何防御措施。通过 snort
命令启动时,可以使用如下命令:
snort -c /etc/snort/snort.conf -A fast -i eth0
3. 配置 Snort 在 IPS 模式
要让 Snort 作为入侵防御系统(IPS)工作,必须启用 阻止数据包的功能。通常需要配置 inline 模式,这样 Snort 能够直接控制流量,并在检测到攻击时主动丢弃恶意流量。
在 snort.conf
中,你需要启用 inline
配置,并启用适当的 IPS 配置:
# 设置 Snort 在 Inline 模式下运行 config policy_mode:inline
然后启动 Snort 时,使用以下命令:
snort -c /etc/snort/snort.conf -Q -i eth0
实验
安装配置 snort & icmp 检测规则
配置文件
/etc/snort/snort.lua
配置 ips
规则文件
在 /etc/snort/rules/ 目录下创建一个自定义规则文件(如 local.rules):
在规则文件中添加以下规则内容(内置很多规则)
规则
1 |
|
- alert: 指定规则的动作是触发报警。当匹配到该规则时,Snort 会生成一个警报。
- icmp: 这是协议字段,表示规则关注的是 ICMP 协议,通常用于 Ping 操作。
- any any: 这部分指定源地址和源端口。
any
表示匹配任何源 IP 地址和端口。 - ->: 表示流量的方向,从源到目的。
- $HOME_NET any: 目标地址和目标端口。
$HOME_NET
是一个变量,通常定义为你内部网络的地址范围。any
表示匹配任何目标端口。 - (msg:”ICMP Ping Detected”; sid:1000001; rev:1;): 规则选项部分:
- msg: 指定规则触发时显示的消息。在本例中,如果规则匹配,消息将是“ICMP Ping Detected”。
- sid: 指定规则的唯一标识符(SID)。
sid:1000001
表示这是规则的 ID,必须是唯一的,避免与其他规则冲突。 - rev: 规则的版本号,通常在规则修改时增加。
snort -c /etc/snort/snort.lua # 测试成功
运行
使用以下命令运行 Snort 并监控网络流量:
snort -c /etc/snort/snort.lua -i eth0 -A fast -v
· -c:指定配置文件。
· -i:指定网络接口。
· -A :参数用于设置警报模式,fast表示输出简化的警报信息
· -v:将以详细的方式输出每个捕获的数据包的信息
· -l:指定日志保存路径。
检测
联动防火墙
大体思路就是 通过相关操作在规则中加上 exec 去执行shell脚本 ,脚本内容可以是防火墙封堵ip
1 |
|