一个运维人的真实记录:用 AI 助手 WorkBuddy 在阿里云 ECS 上从零部署 Wazuh 安全监控系统,覆盖 24 台跨区域服务器的实战全过程。
前言:为什么要搞这个?
话说,服务器安全这事儿,一直让人头大。管着阿里云 ECS 公网服务器,多台内网 CentOS/RHEL 服务器,还有上海、海南那些异地节点,之前全靠手动巡日志、偶尔跑跑脚本,效率低不说,还容易遗漏。早就想上一套 HIDS(主机入侵检测)系统,但那些 OpenSource 方案的文档,劝退了好几次……
直到最近发现 WorkBuddy 这个 AI 工具——能直接操作我的电脑、跑命令、写代码。想着试试看能不能让它帮我搞定 Wazuh 部署,结果真的一天内跑通了整套系统。
把过程分享出来,希望能帮到同样想上手 Wazuh 但被复杂配置劝退的朋友。
一、环境准备
服务器资源
| 项目 | 配置 |
|---|---|
| 服务器 | 阿里云 ECS |
| IP | 47.97.46.5 |
| 配置 | 4 核 / 7.4G RAM / 89G 磁盘 |
| 操作系统 | CentOS / RHEL |
网络规划
┌─────────────────────────────────────────┐
│ 阿里云 ECS (Wazuh Server) │
│┌───────────┐┌──────────┐┌───────┐ │
││Wazuh Server││Wazuh ││Flask │ │
││(1514/1515) ││Indexer ││Portal │ │
│└─────┬─────┘│(9200) ││(:6566)│ │
│ │ └─────┬────┘└───┬───┘ │
│ │ │ │ │
│ │ Security Group│ │ │
│ │ (Port 6566) │ │ │
└────────┼──────────────┼──────────┼─────┘
│ │ │
┌────┴─────┐ ┌────┴────┐┌──┴──┐
│ Agent-1 │ │ Agent-2 ││... │
│ (Jumpbox)│ │ (海南) ││(共24│
│ │ │ (上海) ││ 台) │
└──────────┘ └─────────┘└─────┘
核心组件:
- Wazuh Server:接收各 Agent 上报的安全事件
- Wazuh Indexer:存储和索引日志/告警数据
- Flask Web Portal:自建仪表盘门户(端口 6566)
- 24 台 Wazuh Agent:分布在 jumpbox、海南、上海等节点
二、部署过程(WorkBuddy 辅助完成)
第一步:安装 Wazuh Server
先把 Wazuh 服务端装上。这一步涉及 RPM 包导入、仓库配置、Yum 安装,命令链比较长——以前得反复查官方文档拼命令,这次直接让 WorkBuddy 生成完整的一键部署脚本,省了不少事:
bash
复制
# 导入 GPG Key 并添加 Wazuh 仓库
rpm --import https://packages.wazuh.com/key/GPG-KEY-WAZUH
cat > /etc/yum.repos.d/wazuh.repo << EOF
[wazuh]
name=Wazuh repository
baseurl=https://packages.wazuh.com/4.x/yum/
gpgcheck=1
gpgkey=https://packages.wazuh.com/key/GPG-KEY-WAZUH
enabled=1
EOF
# 安装 Wazuh Server
yum install -y wazuh-server wazuh-indexer
第二步:配置 Wazuh Indexer
Wazuh Indexer 基于 OpenSearch,需要初始化证书和密码:
bash
复制
# 生成 Indexer 认证证书
/var/wazuh-indexer/bin/cert-tool.sh --auto-generate-certificates
# 设置 indexer 密码(重要!记下来)
/var/wazuh-indexer/bin/indexer-reset-password.sh
⚠️ 踩坑提醒:Indexer 默认的超级用户密码是随机生成的,第一次启动后务必立即修改并妥善保存。这里折腾了一会儿才找到重置方法,记下来能省不少事。
第三步:配置 Flask Web Portal
官方的 Wazuh Dashboard 资源占用较大,考虑到这台 ECS 只有 7.4G 内存,选了更轻量的方案——用 Python Flask 自建一个简易门户:
python
复制
以 systemd 服务方式托管,开机自启:
bash
复制
第四步:注册 Agent 节点
这是最繁琐但也是最有价值的一步——给每台目标服务器装上 Agent:
bash
复制
最终注册了 24 台 Agent,覆盖范围:
| 节点类型 | 数量 | 说明 |
|---|---|---|
| Jumpbox | 1 | 运维跳板机 |
| 海南节点 | 若干 | 异地服务器 |
| 上海节点 | 若干 | 异地服务器 |
| 内网服务器 | 其余 | 192.168.20.x 网段 |
第五步:阿里云安全组配置
开放 Web Portal 对外访问端口:
入方向规则:
┌────────┬────────┬──────────────────┐
│ 协议 │ 端口 │ 授权对象 │
├────────┼────────┼──────────────────┤
│ TCP │ 6566 │ 0.0.0.0/0 │
│ TCP │ 1514 │ Agent IP 白名单 │
│ TCP │ 1515 │ Agent IP 白名单 │
└────────┴────────┴──────────────────┘
同时配置了 QQ 邮箱 SMTP 告警通知,确保关键安全事件能第一时间推送。
三、遇到的问题 & 解决方案
问题 1:Dashboard 数据显示全零
现象:curl localhost:9200 能返回 36729 条告警 数据,但自建的 Flask 仪表盘上所有指标都显示为 0。
排查过程(WorkBuddy 帮忙定位):
- 先确认 Indexer 数据正常 → 通过
curl验证 ✅ - 检查 Flask 后端查询 API → 发现 Indexer 认证方式和 SSL 校验有问题
- 修正了请求头中的认证信息和
verify=False参数
结论:不是数据问题,是门户拉取数据的代码逻辑有 bug。修复后数据正常展示。
问题 2:内存紧张
现象:4 核 7.4G 的机器跑 Wazuh Server + Indexer + Flask 门户,内存吃紧。
优化方案(计划中):
- 移除不必要的后台服务
- 给 Wazuh Indexer 做 JVM 内存限制
- 将 AI 助手功能替换为轻量的 服务器性能监控面板(CPU/内存/磁盘/网络),一石二鸟
问题 3:部分内网服务器无法连接外网
现象:内网 CentOS 服务器 curl 外网地址会卡死。
影响:这类服务器安装 Wazuh Agent 时无法直接从官方 Yum 源下载包。
解决方案:先下载 RPM 包再通过内网传输安装,或配置 HTTP 袋里。
四、最终效果
部署完成后实现了:
✅ 24 台服务器 统一安全监控,全覆盖
✅ 实时告警 检测:文件完整性校验、SSH 登录异常、日志异常检测
✅ Web 仪表盘(端口 6566)随时随地查看安全状态
✅ 邮件告警推送,QQ 邮箱 SMTP 即时通知
✅ systemd 托管,所有服务开机自启、崩溃自动重启
┌────────────────────────────────────────────────┐
│ Wazuh 安全监控大屏 │
├─────────────┬──────────────┬───────────────────┤
│ 