上一节我们学了 Wireshark 手动抓包分析,而 Snort 和 Zeek 是企业级的自动化流量分析工具:
- Snort 是基于特征检测的轻量级 IDS/IPS
- Zeek(原 Bro)是基于协议分析的行为流量监控工具两者互补,是企业内网安全监控的核心搭档。
一、先搞懂:Snort vs Zeek 核心差异
表格
| 维度 | Snort | Zeek |
|---|---|---|
| 核心定位 | 基于规则的入侵检测 / 防御系统 | 基于协议分析的行为流量监控平台 |
| 工作原理 | 用特征库匹配攻击流量(类似杀毒软件) | 解析完整协议栈,生成标准化事件日志,用脚本扩展分析 |
| 核心输出 | 告警日志(匹配规则即告警 / 阻断) | 全量协议日志(连接、DNS、HTTP、文件传输等) |
| 优势 | 轻量、部署快、规则丰富,适合快速检测已知攻击 | 协议解析能力强,可做未知攻击 / 行为分析,日志可溯源 |
| 适用场景 | 边界 IDS/IPS 部署,检测已知漏洞利用、暴力破解 | 内网流量监控,分析异常行为、数据外发、横向移动 |
二、Snort 使用指南
Snort 有三种工作模式,核心是规则驱动的检测。
1. 三种工作模式
表格
| 模式 | 作用 | 适用场景 |
|---|---|---|
| 嗅探器模式 | 只抓包,不检测、不告警 | 临时流量采集,类似简化版 Wireshark |
| 包记录器模式 | 抓包并保存为 pcap 文件 | 事后分析流量,配合 Wireshark 排查问题 |
| 入侵检测 / 防御模式 | 加载规则库,检测攻击并告警 / 阻断(IPS 模式) | 企业 IDS/IPS 部署,实时监控攻击 |
2. 核心配置文件与目录
- 主配置文件:
/etc/snort/snort.conf - 核心配置项:
var HOME_NET 192.168.1.0/24:定义受保护的内网网段var RULE_PATH /etc/snort/rules:规则文件存放路径output alert_syslog: LOG_AUTH LOG_ALERT:告警日志输出方式(本地日志 / Syslog)
3. 规则配置与更新
Snort 的核心是规则,分为三类:
- 社区规则:免费公开,覆盖常见攻击(如漏洞利用、暴力破解)
- 付费规则:Sourcefire 官方规则,更新更快,覆盖新型攻击
- 自定义规则:针对企业业务场景编写,比如防护内部服务的暴力破解
规则示例(SSH 暴力破解检测):
plaintext
alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"SSH Bruteforce Attempt"; flow:to_server,established; content:"Failed password"; sid:1000001; rev:1;)
4. 常用命令
bash
运行
# 1. 嗅探器模式(抓包)
snort -v -i eth0
# 2. 包记录器模式(保存为pcap)
snort -dev -l /var/log/snort -i eth0
# 3. IDS模式(加载配置文件运行)
snort -c /etc/snort/snort.conf -i eth0
三、Zeek 使用指南
Zeek 的核心是协议解析 + 事件日志,它不依赖攻击特征,而是通过还原完整协议交互,生成标准化日志,再用脚本做行为分析。
1. 核心概念
- 事件(Event):Zeek 解析流量时生成的结构化事件(如连接建立、DNS 查询、HTTP 请求)
- 日志(Log):事件持久化后的文件,按协议分类(
conn.log/dns.log/http.log等) - 脚本(Script):用 Zeek 语言编写,扩展日志分析和告警逻辑,比如检测数据外发、异常 DNS 查询
2. 部署模式
- 单节点部署:适合小型网络,直接监听网卡流量
- 集群部署:适合大型网络,多节点采集流量,中心节点汇总分析
3. 常用命令
bash
运行
# 1. 前台运行(监听eth0网卡)
zeek -i eth0
# 2. 后台运行(服务模式)
zeekctl start
# 3. 查看运行状态
zeekctl status
# 4. 停止服务
zeekctl stop
4. 日志分析示例
Zeek 的日志默认保存在/usr/local/zeek/logs/current/,常见日志用途:
conn.log:TCP/UDP 连接日志,可分析端口扫描、异常外联dns.log:DNS 查询日志,可检测 DNS 隧道、恶意域名访问http.log:HTTP 请求日志,可分析 Web 攻击、数据外发
示例:用zeek-cut快速分析日志(统计访问次数最多的 IP)
bash
运行
cat conn.log | zeek-cut id.orig_h | sort | uniq -c | sort -nr | head -10
四、Snort + Zeek:企业内网监控的黄金搭档
两者结合,能实现 “特征检测 + 行为分析” 的双层防护:
- Snort 补 “已知攻击” 短板:用规则快速识别漏洞利用、暴力破解等已知攻击,实时告警
- Zeek 补 “未知威胁” 盲区:通过协议日志分析异常行为(如数据外发、内网横向移动),弥补 Snort 只能检测已知攻击的不足
- 日志联动溯源:Snort 告警后,可通过 Zeek 的全量日志还原攻击完整路径,定位入口和影响范围
五、企业落地常见误区(避坑指南)
- Snort 规则乱开,误报泛滥:直接启用所有规则,导致大量误报,告警堆压无人管。需根据业务场景精简规则,仅开启必需的防护规则。
- Zeek 日志不做外发,本地存储爆炸:Zeek 日志量很大,不配置外发和滚动留存,会很快占满磁盘。需同步到 ELK/Splunk,并设置按时间 / 大小滚动留存。
- 规则长期不更新,Snort 漏报新型攻击:社区规则更新慢,不及时同步会导致无法检测新型漏洞利用攻击。
- 只部署不监控,告警 / 日志无人管:Snort 告警和 Zeek 日志都不处置,等于没部署,必须建立告警分级处置闭环。
六、落地实践流程(可直接套用)
- 评估阶段:梳理企业网络规模和防护需求,确定部署模式(单节点 / 集群)
- 部署阶段:先部署 Snort 做 IDS/IPS,再部署 Zeek 做流量监控
- 配置阶段:Snort 精简规则,Zeek 配置日志外发和滚动留存
- 测试阶段:用模拟攻击(如端口扫描、SQL 注入)验证防护效果,调整误报规则
- 上线与监控:正式上线,建立告警处置闭环,定期审计日志和告警
- 持续优化:同步 Snort 规则库,更新 Zeek 脚本,根据业务变化调整配置
No responses yet