Snort 入侵检测系统是业界使用最广泛的开源网络入侵检测工具,通过分析流经网卡的流量特征并与规则库匹配,实时发现端口扫描、漏洞利用、恶意软件通信等攻击行为。本文以 Snort 3 为例,完整演示从安装部署、监听配置到规则编写与告警分析的实战流程。
适用场景
本方案适合以下场景:
- 需要低成本搭建网络入侵检测能力的中小企业
- 部署在网关或核心交换机旁路,监控南北向流量
- 配合防火墙、WAF 构成纵深防御体系,补足应用层检测盲区
- 安全实验室用于流量分析和攻击行为复现
前置条件
- Linux 服务器(推荐 Ubuntu 22.04+ 或 CentOS 7+),至少 2 核 CPU、4GB 内存
- 一张可用于监听的管理网卡和一张被监控网卡(或使用端口镜像/SPAN)
- root 权限
原理说明
Snort 采用「抓包-解码-检测-告警」四阶段流水线:先用 DAQ(Data Acquisition)模块抓取数据包,再按协议栈逐层解码,随后将解析结果与加载的规则集逐条匹配,命中规则的流量按动作(alert/block/drop)输出告警或阻断。Snort 3 相比 2.x 大幅改进了多线程支持与规则语法,检测性能提升数倍,推荐新部署直接使用 Snort 3。
操作步骤
第一步:安装 Snort 3
Ubuntu/Debian 系统使用官方 PPA 安装:
sudo add-apt-repository ppa:oisf/snort3
sudo apt update
sudo apt install -y snort3
安装后确认版本:
snort -V
# Snort++ 3.1.x.x
第二步:配置监听网卡
将监听网卡设为混杂模式,并查看 Snort 3 支持的接口:
sudo ip link set eth1 promisc on
snort --daq-dir /usr/local/lib/daq --help 2>&1 | grep -i interface
snort -c /usr/local/etc/snort/snort.lua --daq afpacket -i eth1
若仅验证抓包能力,可先运行测试模式:
sudo snort -c /usr/local/etc/snort/snort.lua --daq afpacket -i eth1 -A alert_fast
第三步:配置并更新规则集
Snort 3 主配置为 snort.lua,规则文件通过 ips.rules 引入。启用社区规则:
sudo sed -i 's/^# include \$RULE_PATH\/snort3-community.rules/include \$RULE_PATH\/snort3-community.rules/' /usr/local/etc/snort/snort.lua
sudo snort -c /usr/local/etc/snort/snort.lua --daq afpacket -i eth1 -T
-T 为测试模式,验证配置无误后启动守护进程:
sudo systemctl start snort3
sudo systemctl enable snort3
第四步:编写自定义规则
在 /usr/local/etc/rules/local.rules 中添加规则,并在 snort.lua 中引入:
alert tcp any any -> $HOME_NET 22 (msg:"SSH brute force attempt"; flow:to_server,established; content:"SSH-2.0"; sid:1000001; rev:1;)
该规则检测发往本机 22 端口的 SSH 握手流量。检查规则语法:
sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -T
配置验证
运行中的 Snort 3 输出告警至日志文件:
tail -f /var/log/snort/alert_fast.txt
用本机 nmap 扫描模拟攻击,验证规则生效:
nmap -sS 192.168.1.10
# 告警日志出现 "SSH brute force attempt" 即检测成功
常见问题
FAQ 1:Snort 3 与 Suricata 如何选择?
两者都是主流开源 IDS。Snort 3 规则生态成熟、资料丰富,适合传统 IDS 场景;Suricata 原生多线程、GPU 加速与 IPS 内联模式更突出,适合高吞吐部署。已在跑 Suricata 的团队无需迁移,新部署可按吞吐量选择。
FAQ 2:规则命中后没有告警输出怎么办?
按顺序排查:① 确认网卡处于混杂模式且流量确实经过监听口;② 用 snort -T 确认规则语法与路径正确;③ 检查告警文件权限,Snort 进程需对 /var/log/snort 有写权限;④ 用 tcpdump 对比确认抓包层是否正常。
FAQ 3:Snort 3 如何自动更新规则?
开源版可通过 snort3-community-rules 包手动更新,商业规则(Talos/ET)需订阅账号。可配置 crontab 定期拉取规则并执行 systemctl restart snort3 生效。
总结
Snort 入侵检测系统以极低成本提供了实时流量监测能力,配合防火墙与日志平台可形成完整的检测响应闭环。建议将告警日志接入 ELK 或 Wazuh 做集中关联分析,并把高频告警源 IP 自动同步至防火墙封禁,实现检测到处置的自动化。