下面给你一套在 Ubuntu 上搭建 Suricata(可做 IDS 监测,也可扩展到 IPS 联动阻断)的企业级“可落地”流程。目标是:装得对、跑得起来、规则能更新、日志能看懂,并且为后续性能调优留足接口🙂
0)先定部署形态(别一上来就“全都要”)
推荐顺序:先 IDS 后 IPS。
IDS 模式:只告警不拦截,适合先验证环境与规则噪音。
IPS 模式:可拦截,适合网关/旁路桥接等明确边界场景,变更要更谨慎。(docs.suricata.io)
1)安装(用官方稳定源,保证版本与依赖一致)
sudo apt-get install software-properties-common sudo add-apt-repository ppa:oisf/suricata-stable sudo apt-get update sudo apt-get install suricata解释:
software-properties-common:提供add-apt-repository能力,否则你加不了 PPA。add-apt-repository ppa:oisf/suricata-stable:引入官方维护的稳定仓库,通常能拿到较新的稳定版本。(docs.suricata.io)apt-get update:刷新软件索引,让系统“看到”新仓库里的包。apt-get install suricata:安装引擎与基础配置文件(通常在/etc/suricata/)。(docs.suricata.io)
2)规则体系上线(不靠手工下载,靠统一管理)
sudo suricata-update解释:
suricata-update:官方推荐的规则管理方式,会把规则下载/合并到默认规则目录(常见在/var/lib/suricata/rules/)。(docs.suricata.io)价值:让“规则更新”变成可自动化的运维动作,而不是靠人肉拷文件。
建议同步确认配置文件里规则路径(通常已默认合理,但企业落地要“验”):
grep -nE "default-rule-path|rule-files" /etc/suricata/suricata.yaml | head -n 20解释:
grep ...:快速定位suricata.yaml里规则加载位置。你要看到类似:
default-rule-path: /var/lib/suricata/rules与rule-files: - suricata.rules这一类结构,才能确保 Suricata 真会加载更新后的规则。(docs.suricata.io)
3)基础配置(先把“自己人网络”定义清楚)
sudo sed -n '1,120p' /etc/suricata/suricata.yaml | sed -n '1,80p'解释:
这是“只读查看”,不修改。
重点检查并规划:
HOME_NET(你保护的网段)与EXTERNAL_NET(外部网络)。这一步决定告警的准确性:定义得越清晰,误报越少,运营成本越低🙂
4)配置自检(上线前必须过这一关)
sudo suricata -T -c /etc/suricata/suricata.yaml解释:
-T:测试配置与规则加载,不真正抓包。-c ...:指定配置文件路径。目标:看到 “configuration provided was successfully loaded” 一类成功信息;若失败,先修再跑,别把故障带进生产。
5)跑起来(IDS 模式,先验证链路与日志)
sudo suricata -c /etc/suricata/suricata.yaml -i eth0解释:
-i eth0:在指定网卡抓包(把eth0换成你的实际业务网卡名,如ens3)。这属于 IDS:只检测与记录,不做拦截,适合第一阶段试运行。
查看日志与告警输出:
sudo tail -n 50 /var/log/suricata/suricata.log sudo tail -n 50 /var/log/suricata/fast.log sudo ls -lh /var/log/suricata/eve.json解释:
suricata.log:引擎运行状态(启动失败、抓包权限、规则加载等都看它)。fast.log:人类可读的告警摘要,适合快速验收。eve.json:结构化事件流,适合后续接入 ELK / ClickHouse / SIEM(企业玩法的主干数据)。
6)可选:升级到 IPS(NFQUEUE,适合网关/主机防护)
先确认你的 Suricata 构建支持 NFQ:
suricata --build-info | grep -i nfq || true解释:
--build-info:打印编译特性列表。grep -i nfq:检索是否启用 NFQUEUE 支持;没有的话,IPS 这条路先别走。(docs.suricata.io)
启动 NFQUEUE 模式(示例用队列 0):
sudo suricata -c /etc/suricata/suricata.yaml -q 0解释:
-q 0:监听 netfilter queue 0,从内核队列接收包并做判定。(docs.suricata.io)
把流量送入 NFQUEUE(两种典型场景二选一):
# 网关场景:转发流量走 FORWARD sudo iptables -I FORWARD -j NFQUEUE # 主机场景:本机入/出流量走 INPUT/OUTPUT(谨慎启用) sudo iptables -I INPUT -j NFQUEUE sudo iptables -I OUTPUT -j NFQUEUE解释:
iptables -I ...:插入规则到链头部,优先匹配。FORWARD:适合“保护下游网络”的网关形态。INPUT/OUTPUT:保护本机,但误拦截会直接影响你自己出入网,务必灰度。(docs.suricata.io)风险提示:如果 Suricata 停了,NFQUEUE 默认可能导致流量受影响;生产建议配合明确的回滚策略。
工作流程图(上线视角)
<span style="color:red">安装 Suricata</span> ↓ <span style="color:red">suricata-update 拉规则</span> ↓ <span style="color:red">suricata -T</span> 配置自检 ↓ 先跑 <span style="color:red">IDS</span>(-i 网卡)观察误报与性能 ↓ 需要阻断再切 <span style="color:red">IPS</span>(-q NFQUEUE + iptables) ↓ 告警入库(eve.json)→ 可视化/联动处置原理/组件说明表(运维视角,一眼能审计)
| 模块 | 作用 | 关键点 | 你要盯的风险 |
|---|---|---|---|
| suricata.yaml | 主配置 | HOME_NET、规则路径、输出 | 配错网段导致误报/漏报 |
| suricata-update | 规则管理 | 定期更新、合并规则文件 | 规则过新/过多带来噪音与负载 (docs.suricata.io) |
| IDS | 检测不拦截 | -i 网卡抓包 | 易上线但要做容量规划 |
| IPS | 可阻断 | -q+ NFQUEUE + iptables | 误拦截会直接影响业务 (docs.suricata.io) |
| eve.json | 结构化日志 | 可对接日志平台 | 文件增长快,需要轮转与落库 |
你现在可以怎么用这套方案
如果你是“单机验证/学习”:按IDS流程做到
fast.log和eve.json有数据即可算成功。🙂如果你是“网关/边界防护”:先 IDS 观察 24 小时,再小范围把特定端口/协议送入 NFQUEUE 做 IPS 灰度(别直接全量 FORWARD 一把梭)。
如果你愿意,我可以按你当前机器的角色(业务主机 / 网关 / 旁路镜像口)给一份更贴近生产的“最小误伤”参数清单(HOME_NET 规划、日志轮转、规则降噪与性能基线)。