上一篇我们把 AI-miniSOC 跑起来了——登录进控制台、看到 11 个菜单、概览仪表盘上数字在动。但说实话,那一刻它还不是一个 SOC——它只是一个"能用的平台"。
SOC 的真正起点,是第一台主机的告警流进你的控制台的那一刻。
那一刻你会盯着屏幕,意识到:“这台机器刚刚被人扫了 SSH——我是在它真被人扫的时候知道的,不是事后看日志回放。”
本篇接住 上一篇 (02) 部署完成之后:先做这三件事 里挖的坑——用四步把第一台主机纳管进你的 SOC。
老规矩,先看路线:

四步、顺利的话 30 分钟、最慢 1 小时。和上一篇一样:每步都标了"过不过"的标准,出问题时你永远知道卡在哪一格。
为什么要先讲 Wazuh?
一个事实:本系列和我的 Wazuh 系列都把 Wazuh 当作"主机入侵检测"的事实标准。原因很简单——
- 开源免费 + 商业化质量:规则库覆盖 90% 的常见威胁(暴力破解、文件完整性、Rootkit、SCA 配置评估……),维护活跃;
- 架构上与 AI-miniSOC 天然契合:告警结构化、可通过 OpenSearch 暴露给上层做聚合分级;
- 国内有完整中文文档社区,Wazuh Manager + Agent + Indexer 三件套是经过验证的组合。
所以第一台纳管的主机,强烈建议从 Wazuh 开始。其他 HIDS(OSSEC、Suricata 主机的部分)后面单独讲——本篇假设你用 Wazuh。
第 0 步:基础检查(2 分钟)
开始前确认两件事(上一篇已经完成的事):
- AI-miniSOC 跑着:浏览器打开
http://localhost:3006能进控制台; - Wazuh 服务在跑:浏览器打开
https://<wazuh-server>:443能进 Wazuh Dashboard。
如果还没装 Wazuh,参考我的旧教程系列第一篇(《开源安全管理平台 Wazuh——安装与配置》),或者直接用 install.sh 装基础架构。
💡 这一步为什么单列:很多新手的"接入失败"其实不是接错,而是前置环境没就绪——登录页能进、但 Wazuh 那边 Dashboard 崩着。提前 2 分钟确认,把锅甩不到接入了。
过关标准:Wazuh Dashboard 能正常登录(wazuh-wui 用户即可)。
第 1 步:装 agent(5 分钟)
在要被监控的那台主机上装 agent,不是在 AI-miniSOC 服务端。装之前需要从 Wazuh Manager 拿到一个"注册 key"或直接用 Manager 的 IP/主机名。
| |
| |
过关标准:登录 Wazuh Dashboard,Server management → Endpoints → Summary 列表里能看到这台新 agent,状态是 green(active)。同时记下这台 agent 的 Agent ID(本例是 025,AI-miniSOC 同步告警时会用到):

🕳️ 坑 #1:
WAZUH_MANAGER写错或者防火墙阻断了 1514/UDP(agent 注册端口)—— agent 进程在跑但 Dashboard 上一直是Disconnected。排查:sudo tail -f /var/ossec/logs/ossec.log,看是不是一直在Trying to register...。
第 2 步:让 AI-miniSOC 能看到 Wazuh——取舍一
主机装好了,但这台主机的告警现在还只活在 Wazuh Dashboard 里。AI-miniSOC 怎么知道这台主机的存在?告警怎么流过来?
两种方式:

| 维度 | 🟢 方式 A:Webhook 实时同步 | 🔵 方式 B:手动全量同步 |
|---|---|---|
| 触发时机 | 告警一产生,几秒内送达 | 1~5 分钟轮询一次 |
| 配置位置 | Wazuh 端(写集成脚本 + ossec.conf) | AI-miniSOC 端(wazuh-collector 容器) |
| 复杂度 | 高:要写 Python 集成脚本 + Wazuh 端配 hook + 后端加 API Key 验签 | 低:起个容器,配个 .env 就完事 |
| Wazuh API 压力 | 几乎无(事件级) | 有(按周期拉全量,agent 多时容易爆速率限制) |
| 对网络的要求 | Wazuh 必须能反向连回 AI-miniSOC | AI-miniSOC 出向拉(01 篇的"拉模型"红利) |
| 告警实时性 | 秒级 | 分钟级 |
取舍建议(来自我的踩坑):
先用方式 B 跑起来(最小阻力,业务跑稳了再升级到方式 A)。
原因:你刚部署完平台,第一天大概率连三台主机都没有,告警分钟级到达完全够用。等你真正感受到"告警到我手里晚了一分钟"那条痛线,再花一晚上配 Webhook 不迟——那时候你已经知道自己的真实需求了。
这一篇接下来两个都讲——B 是默认路径(你应该走的),A 是进阶路径(你想做"实时 SOC"再走)。先讲 B。
方式 B(默认路径):启动 wazuh-collector
回到 上一篇 (02) 部署的根目录,采集器层是 Docker Compose 起的。Wazuh 采集器是三个 service 之一:
| |
把 Wazuh 接入凭据写到采集器专属 .env(注意:这不是后端那个 .env,是采集器自己的):
| |
启动采集器:
| |
过关标准:日志里看到 registered to AI-miniSOC backend, agent count: N 之类的成功消息;同时 soc_assets 表里应该出现这台新装 agent 的主机记录(你可以在 AI-miniSOC 控制台"资产管理"里搜到)。
比如 pve-LXC-wazuh-Ubuntu01 这台新接进来的主机:

点开它的资产详情,可以看到 Wazuh Agent ID = 025——这正是 Wazuh Dashboard 里那个编号,采集器正确地把两端的主机对应起来了:

再翻到"数据来源"tab,可以看到这行 来源 = Wazuh / 状态 = 在线——AI-miniSOC 不仅知道有这台主机,还知道它的数据是从哪个数据源来的:

🕳️ 坑 #2(血的教训):8 月 23 日我们栽过一个跟头——
wazuh-collector的配置用yaml.safe_load加载,但它不展开${VAR}占位符。结果密码字面量${WAZUH_PASSWORD}当值发出去,Wazuh API 返回 401,采集器一直连不上。修法:采集器框架加了resolve()函数,env 优先 → YAML 兜底,占位符没 default 直接抛错(让问题早暴露)。所以——你如果用的不是最新代码、或者自己有定制 yaml,先确认${VAR}都被解析了。🕳️ 坑 #3:
WAZUH_PASSWORD错配也会 401,但报错信息不一致——Wazuh 4.x 会返回Invalid credentials,4.7 之前可能只返回Unauthorized。养成习惯:用wazuh-wui账号测一次原 API(curl -k -u "wazuh-wui:password" https://<wazuh-server>:55000/security/user/authenticate),通不了就别怪采集器。
方式 A(进阶路径):Webhook 实时同步
当分钟级延迟开始影响你的响应节奏(通常是等保来袭、或者你想做告警时间窗口在 1 分钟内的合规报告时),可以升级到 Webhook。
先决条件:Wazuh Server 必须能反向连到 AI-miniSOC(拉模型架构的红利在这里反过来——AI-miniSOC 不能躲在 NAT 后面,必须有公网或内网可达地址)。生产部署时,AI-miniSOC 通常在堡垒机/VPC 内部,Wazuh 端能访问即可。
步骤 1:写 Wazuh 集成脚本(在 Wazuh Server 上):
| |
步骤 2:配 ossec.conf——在 <ossec_config> 里加:
| |
步骤 3:后端 .env 接收 webhook:
| |
步骤 4:重启 Wazuh manager 让集成生效:
| |
过关标准:故意停掉一台 agent(sudo systemctl stop wazuh-agent),几秒内 AI-miniSOC 告警页出现"agent disconnected"事件。实时性达成。
🕳️ 坑 #4:API Key 字符里有
&=这类 URL 保留字符,但 Wazuh 集成脚本通过sys.argv接收——不会做 URL 编码。所以生成 Key 时避免特殊字符,或者在集成脚本里urllib.parse.quote处理。
第 3 步:验收——确认它真在"你的 SOC"里(10 分钟)
这一步是"用起来"和"看着它能跑"的区别。挑一台最想被"看着"的主机,人为触发一个安全事件:
| |
这就是 02 篇结尾挖的坑——“找一台你的服务器装 Wazuh agent,看它的日志和告警第一次流进你的控制台"那一刻。
💡 自检小技巧:如果你暂时没人/没机器做安全事件,用
logger工具写一条 Wazuh 能识别的日志(比如logger -p auth.warning "test alert from xiejava"),Wazuh 内部规则会立刻生成事件——保证端到端联通。
过关标准:
- ① Wazuh Dashboard 看到触发的事件
- ② AI-miniSOC 告警页出现对应条目(手动同步就等 1~5 分钟,Webhook 秒级)
来自wazuh的告警事件

踩坑总表(对号入座用)
把这次的坑集中列一遍,接入卡住时直接对表:
| # | 症状 | 根因 | 解法 |
|---|---|---|---|
| 1 | Wazuh Dashboard 上 agent 一直 Disconnected | WAZUH_MANAGER 配错 / 1514/UDP 端口被挡 | 终端 tail -f /var/ossec/logs/ossec.log 排查 |
| 2 | wazuh-collector 报 401 认证失败 | ${WAZUH_PASSWORD} 没被解析 / 密码错 | 终端 curl 直测 API;确认 yaml 用 resolve() 解析 env |
| 3 | Webhook 集成脚本无输出 | 文件权限错(应 root:wazuh -rwxr-x---) | ls -la /var/ossec/integrations/custom-minisoc 核对 |
| 4 | Webhook API Key 含特殊字符导致推送失败 | 集成脚本不 URL 编码 | Key 避免 & = 等;或在脚本里 urllib.parse.quote |
这张表以后会持续更新——你在接入中踩到的新坑,欢迎到仓库提 Issue。
收尾:常见问题
Q:我有 50 台主机,要装 50 次 agent?
A:是的,每台都得装。但 agent 包可以用 Ansible / SaltStack / 自带配置批量推(你公司如果有 CMDB,配个下发任务就行)。本篇讲的是"接入第一台”——批量分发是运维自动化的事,不在 SOC 的范围。
Q:Wazuh 太重,我只是想看 SSH 登录失败和文件变化,有更轻的吗?
A:有。轻量场景可以直接跑 auditd + inotifywait,把日志推给 Loki(01 篇的"日志分级存储"框架支持)。但 Wazuh 的 SCA 配置评估、CIS 基线检查、Rootkit 检测等是它的护城河,等你的场景明确后再选——不要为了"轻量"丢掉了"覆盖度"。
Q:告警风暴怎么办?Wazuh 默认规则库有几千条规则。
A:这是告警治理的事。AI-miniSOC 内置了"13/10/7/4"四级告警分级(13=Critical, 10=High, 9=Medium, ≤4=噪音)+ 聚合降噪——所有 Wazuh 告警会先经过 soc_alerts 表的预处理,再推送给你。具体在 第 14 篇《告警治理》展开(连载中)。
写在最后
00 篇回答"为什么做",01 篇回答"凭什么行",02 篇回答"怎么跑起来"——这一篇回答**“你亲手接的机器上的告警你能不能看到”**。
回头看这四步:装 agent / 接采集器 / 触发测试 / 验收。你管的任何 SOC 系统,跑起来之后能不能"用起来",区别就在这一步。 告警没流进来,前面三篇的努力只是把一个漂亮的控制台挂在那里。
写完这一篇,我想多说一句:本文的姊妹篇——我那七篇 Wazuh 旧教程(侧重单工具:装、规则、FIM、暴力破解……),从今天起正式"收编"进《一个人的SOC》系列——它们负责讲"工具怎么用",本系列负责讲"工具怎么组成平台"。两边互补,wazuh 7 篇旧文头部会加导语指向本系列,老读者从单工具过来、新读者从平台角度再回到单工具深读,都能找到入口。
下一篇 (04):用一台 TP-Link 路由器做内网资产发现与上网行为审计——零成本起步,把家里的设备/办公室的小网络也纳入资产台账。同时也预告 第 09 篇《GLM 统一底座:9 个 AI 消费点如何接进安全运营》——本系列灵魂的第二篇。
老李的第一台主机已经在他的 SOC 里了。你的呢?
【系列导航】《一个人的SOC》总目录(持续更新)
【系列开篇】(00) 中小企业为什么需要自己的安全运营中心
【姊妹篇·收编】 开源安全管理平台 Wazuh 七篇系列(从单工具视角讲 Wazuh)
【项目地址】AI-miniSOC - GitHub · MIT 开源,欢迎 Star ⭐
https://github.com/xiejava1018/AI-miniSOC
【交流】 Wazuh 接入卡住了?把 tail -f /var/log/wazuh/integrations.log 和 docker compose logs wazuh-collector 的输出发到 Issue,我会逐个回复。
下一篇(预告):(04) 用一台 TP-Link 路由器做内网资产发现与上网行为审计(连载中,敬请关注)
作者博客:http://xiejava.ishareread.com/

关注:微信公众号,一起学习成长!