snort-ips


Snort 是一个开源的网络入侵检测系统(IDS)和网络入侵防御系统(IPS),用于检测和防御各种网络攻击。它由 Martin Roesch 于1998年开发,并且广泛应用于网络安全领域。Snort 可以实时监控网络流量并分析数据包,以检测潜在的恶意活动。

主要特点

  1. 协议分析:Snort 可以分析多种网络协议,如 TCP/IP、UDP、HTTP、FTP 等,识别异常的通信行为。

  2. 规则集:Snort 使用规则集来定义检测和防御策略。用户可以根据需求定制规则,或者使用由 Snort 社区和其他安全专家提供的标准规则。

  3. 流量捕获与包分析:Snort 可以在不同的网络接口上捕获数据包并对其进行深度分析。它不仅可以检查头部信息,还能够查看包体内容。

  4. 实时检测与记录:Snort 在运行时可以实时分析流量,并将发现的可疑活动记录到日志中,提供详细的攻击信息。

  5. 灵活性和可扩展性:Snort 提供了高度的灵活性,支持插件扩展、脚本编写、与其他安全工具(如防火墙、日志分析工具等)集成。

  6. 防御模式(IPS):Snort 除了可以作为入侵检测系统使用,还可以作为入侵防御系统,在发现攻击时采取主动的阻断措施,如丢弃恶意流量或重置连接。

工作原理

Snort 主要依赖于规则来分析网络流量,基于这些规则判断是否存在可疑或恶意行为。规则可以定义攻击特征、数据包大小、通信模式等内容。Snort 支持三种工作模式:

  1. 监控模式(Sniffer Mode):仅捕获和显示网络流量,不进行任何分析和报警。
  2. 入侵检测模式(IDS):对流量进行深度分析,发现并报告潜在的攻击。
  3. 入侵防御模式(IPS):在检测到攻击时,除了报警外,还能采取主动的防御措施,如丢弃攻击数据包或重置连接。

Snort 规则

Snort 使用规则集来定义检测逻辑,规则通常由以下几个部分组成:

  • 动作:例如 alert(报警)、drop(丢弃数据包)等。
  • 协议:如 TCPUDPICMP 等。
  • 源和目的地址:如源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 检测规则

image.png

配置文件
/etc/snort/snort.lua

配置 ips
image.png

规则文件
 在 /etc/snort/rules/ 目录下创建一个自定义规则文件(如 local.rules):

在规则文件中添加以下规则内容(内置很多规则)

规则

1
2

alert icmp any any -> $HOME_NET any (msg:"ICMP Ping Detected"; sid:1000001; rev: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 # 测试成功

image.png

运行

使用以下命令运行 Snort 并监控网络流量:

snort -c /etc/snort/snort.lua -i eth0 -A fast -v

·  -c:指定配置文件。

·  -i:指定网络接口。

·  -A :参数用于设置警报模式,fast表示输出简化的警报信息

·   -v:将以详细的方式输出每个捕获的数据包的信息
·  -l:指定日志保存路径。

image.png

检测

image.png

联动防火墙

大体思路就是 通过相关操作在规则中加上 exec 去执行shell脚本 ,脚本内容可以是防火墙封堵ip

1
2
3

alert icmp any any -> $HOME_NET any (msg:"ICMP Ping Detected"; sid:1000001; exec:/etc/snort/iptables_block.sh; rev:1;)


文章作者: K1T0
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 K1T0 !
  目录