十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Wazuh部署避坑指南:从单机到分布式的完整实践

Wazuh部署避坑指南:从单机到分布式的完整实践 Wazuh 这个项目我前前后后装了好几套从单机到分布式都折腾过。先说结论它确实是个好东西开源、功能全整合了 HIDS、日志分析、漏洞检测、合规检查一个平台全包了。但安装过程也是真的能把人绕晕官方文档写得不算差可它那种“先跑脚本再补细节”的交付方式藏了不少坑。这篇东西就是我把四套环境装下来后踩过的坑、填过的土全记下来给准备入手 Wazuh 的同学当个参考。1. Wazuh 是什么先搞清楚全家桶再去安装很多人一上来就急着跑curl -sO https://packages.wazuh.com/4.x/wazuh-install.sh然后执行、报错、百度、继续报错、重装系统。这样搞太折磨了我建议你先花半小时搞清楚这个平台的角色分配。1.1 四大组件的关系Wazuh 目前的主流架构是四个角色Wazuh Indexer底层是 OpenSearch 的分支负责存储和分析从各节点收集上来的安全事件数据。你可以把它理解成整个系统的“数据库”。Wazuh Server核心分析引擎负责接收 Agent 上报的数据、运行规则引擎做威胁检测、还能触发主动响应。它内部还包含 Filebeat用于把数据转发给 Indexer。Wazuh Dashboard可视化面板基于 OpenSearch Dashboards给你看告警、查日志、管理策略。没有它也能跑但你真的会瞎。Wazuh Agent部署在被监控主机上的轻量端点采集文件完整性、系统命令执行、日志数据等同时上报给 Server。这四个角色可以全部塞一台机器里单机部署官方叫 All-in-One也可以拆开。初学者我最推荐先单机部署。拆开部署的坑基本是单机版的指数级放大后面排查时连问题出在哪一层都难定位。1.2 官方那套安装脚本到底在做什么官方提供的wazuh-install.sh本质上是一个总装配引导脚本你传--generate-config-files、--install-indexer、--install-wazuh、--install-dashboard等各种参数它就会把对应组件自动装好、生成证书、配置服务、初始化账号密码。听起来很省事对吧但问题在于这个脚本对网络环境要求高它要从官方仓库拉一堆依赖包国内服务器跑起来经常超时。另外脚本为了自动化很多系统级配置都是按它的默认值来设定的比如 JDK 版本、内存参数、OpenSearch JVM 堆大小一旦你机器配置特殊这些默认值就会变成启动失败的直接原因。所以我的建议是第一遍按官方 All-in-One 流程跑通但心理上要清楚它每一步在干嘛。等出了问题你能知道是证书、系统依赖还是数据库的问题而不是重新砸键盘。2. 部署前必须解决的硬件与网络暗坑安装过程报错其实还不算最可怕的最坑的是装完之后组件起来一个挂一个你再回头看系统配置发现是底子没打好。这几样东西装之前一定确认好。2.1 内存被低估的第一大坑官方文档写的是最低 4GB 内存、2 核 CPU。我劝你千万别按最低配置来。单机 All-in-One 模式下Indexer 默认会分配 4GB JVM 堆内存Server 的 analysisd 和 Filebeat、Dashboard 的 Node 进程都要吃内存。总内存少于 8GB很可能装完直接卡死尤其是 Indexer 内存锁定失败时整个服务表现为反复重启。以我踩过的一台 2 核 4GB 服务器为例装完后 OpenSearch 进程起不来报错信息是memory locking requested for opensearch process but memory is not enough。后来我把 JVM 堆调到 2GB又得去改jvm.options再给系统加了 2GB swap 才勉强压住。另外一个隐形杀手是swap 设置。OpenSearch 默认要求bootstrap.memory_lock: true意思是要锁住物理内存不交换到 swap。如果你内存不够锁不住服务直接拒启动。后来我干脆把服务器升级到 8GB单机版就稳了。2.2 防火墙和端口动不动就连不上的元凶装完所有组件后你最常遇到的一个问题就是Dashboard 网页打不开Agent 死活连不上 Server。排查到最后十有八九是端口没有放行。Wazuh 的常用端口清单如下建议提前在防火墙和安全组里放好组件端口用途Wazuh Server1514/TCPAgent 与 Server 之间的安全事件通信Wazuh Server1515/TCPAgent 注册与证书认证请求Wazuh Server1516/TCPAgent 连接消息新版Wazuh Server55000/TCP管理 API旧版常用 55000Wazuh Dashboard443/TCP浏览器访问 Web 界面Wazuh Indexer9200/TCPNode 间通信与数据查询内部接口很多教程为了省事让你systemctl stop firewalld关掉防火墙但我建议别这么粗暴。生产环境靠安全组兜底没错本地调试就拿命令放行具体端口就行。Agent 连接 Server 时如果 1514 不通Agent 日志里会一直刷ERROR: (1202) Connection refused。2.3 系统版本和 SELinux 的恩怨Wazuh 官方推荐 Ubuntu 22.04 LTS、CentOS 7/8、RHEL 8/9 这些。我用 CentOS 7.9 和 Ubuntu 22.04 都跑过整体没问题但只要开了 SELinuxCentOS 默认 enforcing部署完很容易遇到 Filebeat 无法读取/var/ossec/logs的权限问题。如果你是非生产学习环境setenforce 0能解决塞满的日志权限错误。如果是生产建议不要图省事关掉而是为 Wazuh 相关目录配置正确的 SELinux 策略否则后面安全审计时你连自己的问题都解释不清。3. Indexer 索引器安装的连环坑Indexer 是整套系统的存储底座它装不明白后面 Server 的 Filebeat 即使能装数据也写不进去Dashboard 查不到任何数据。这个组件我折腾最久把关键坑一个个列清楚。3.1 JDK 和 OpenSearch 的兼容性Wazuh 官方安装包自带了 OpenSearch 的捆绑 JDK理论上你不用自己配 Java。但如果你之前的机器上装过 OpenJDK环境变量里JAVA_HOME指到了别的版本那么启动 OpenSearch 时它会报类似Java version not supported或者直接起不来。我当时在这上面耗了两个多小时最后查/usr/share/wazuh-indexer/bin/opensearch这个启动脚本才看到它用的是相对路径去找捆绑 JDK。解决方法也简单清掉/etc/profile.d/java.sh里的JAVA_HOME硬编码或者干脆卸载自带的 OpenJDK。又或者每次启动前手动设export JAVA_HOME/usr/share/wazuh-indexer/jdk export PATH$JAVA_HOME/bin:$PATH3.2 证书与节点通讯问题Indexer 是集群结构对外通信走 HTTPS节点间也是双向 TLS。官方安装脚本会在生成配置的时候顺带创建 CA 证书、admin 证书和节点证书。但只要你手动改过主机名、IP 或者证书目录权限后面就会冒出一堆坑。最常见的报错是ClusterBlockException: blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];这个意思是索引只读底层原因往往是磁盘配额或者权限问题。我当时发现是证书文件权限成了 600而 opensearch 进程用的用户是wazuh-indexer根本读不了。调整权限就是一条命令chown -R wazuh-indexer:wazuh-indexer /etc/wazuh-indexer/另外如果你自己重置过证书一定要保证opensearch.yml里面plugins.security.nodes_dn里的 CN 和证书实际 CN 完全一致不然节点之间互相认证失败日志里会一直刷SSL_TLS相关错误。3.3 内存锁定失败这个问题上面提过这里详细说一说。Install 脚本生成的/etc/wazuh-indexer/jvm.options默认堆大小是 4GB。如果你的服务器不够 8GB 物理内存建议调到 2GB-Xms2g -Xmx2g同时系统层面打开文件描述符和内存锁定限制。修改/etc/security/limits.conf加上wazuh-indexer soft nofile 65535 wazuh-indexer hard nofile 65535 wazuh-indexer soft memlock unlimited wazuh-indexer hard memlock unlimited改完之后reboot再启动服务不然看不到效果。这里有个很容易被忽略的点修改limits.conf前要先确认用户是否真的叫wazuh-indexer不同版本的安装包可能用户名不同用id wazuh-indexer先验证一下。4. Server 服务端安装的坑中坑Indexer 起来了Dashboard 也能访问了接下来装 Server 时你以为会顺利一点其实这里的坑主要集中在进程起不来和 Filebeat 数据管道不通。4.1 Filebeat 和 Worker 内存分配不够Wazuh Server 上的核心进程不少wazuh-manager里面集成了 analysisd、remoted、wazuh-db 和 wazuh-modulesd。其中analysisd负责日志分析和事件关联是最吃内存的。默认配置差不多是每个 worker 吃 512MB如果你的服务器只有 4GB同时跑着 Indexer 和 Server大概率跑着跑着 OOM 被干掉。如果确认是内存不够可以降低/var/ossec/etc/ossec.conf里analysisdworkers数值比如从 2 调到 1。但这会影响并发分析能力生产环境建议加内存而不是砍配置。4.2 Filebeat 无法连接 IndexerServer 和 Indexer 之间靠 Filebeat 把告警和日志传输到 Indexer 的 9200 端口。报错一般是这个error while dialing dial tcp: lookup wazuh-indexer on xx.xx.xx.xx:53: no such host注意这里的wazuh-indexer是主机名如果/etc/hosts里没有把这名字解析到 127.0.0.1 或者对应 IPFilebeat 就会找不到节点。官方安装脚本会在单机模式下自动写/etc/hosts但如果你自定义过主机名、改过 IP或者后来迁移过机器这条记录可能丢了。解决办法echo 127.0.0.1 wazuh-indexer /etc/hosts另一个高频问题就是这个x509: certificate signed by unknown authority原因就是 Filebeat 通讯用的证书和 Indexer 的 CA 不匹配。最好重跑一次证书生成流程或者直接重新执行安装脚本的-r选项清理并重建不要让源用错 CA。5. Dashboard 面板安装与登录问题Dashboard 装起来比前面两个组件快很多它是纯前端加 Nginx 转发但坑也不少。5.1 证书匹配失败导致 HTTP 503安装完 Dashboard启动后访问https://服务器IP结果浏览器直接提示证书无效或者 Nginx 返回 503。这种情况八成是 Dashboard 配置的证书是给localhost或主机名签发的你用 IP 去访问它就不认。我当时查了下/etc/wazuh-dashboard/certs/目录发现证书文件的 CN 是主机名wazuh-dashboard而我的浏览器访问的 IP 和它不匹配自然报证书错误。如果是学习环境最简单的方案是让/etc/hosts把主机名映射到 IP然后用主机名访问echo 你的服务器IP wazuh-dashboard /etc/hosts浏览器里访问https://wazuh-dashboard:443。如果非要用 IP 访问就得重新签一张包含 IP SAN 的证书操作复杂一些不建议新手折腾。5.2 默认账号和密码文件去哪了安装脚本初始化后会自动生成一组随机密码并保存到当前目录下的wazuh-passwords.txt里。这个文件里有 Dashboard、Indexer、Filebeat 的所有账号密码务必第一时间保存好。你要是随手删了后面登录就是地狱级难度。如果你忘了密码可以用下面命令重新生成新密码并更新各组件/usr/share/wazuh-indexer/plugins/opensearch-security/tools/wazuh-passwords-tool.sh -a假设只是 Dashboard 登录不了先用默认的admin账号试一次。登录页面默认账号是admin密码是刚才那个wazuh-passwords.txt里的indexer_username: admin对应的值。5.3 首次打开地图和登录速度慢Dashboard 打开之后如果首页一直转圈大概率是它内部还在加载 OpenSearch Dashboards 的插件同时访问不到外网地图资源也会卡住。这个问题解决起来不难在 Dashboard 配置文件/etc/wazuh-dashboard/opensearch_dashboards.yml里把地图服务改成不使用外部源或者直接在初始化时选择离线模式。日常学习用其实影响不大等一下就好。6. Agent 代理端部署踩坑Agent 端是整个系统里看起来最简单、实际最容易出问题的部分。服务器端起来了Agent 装不上或装上了连不上监控就是空中楼阁。6.1 Linux Agent 注册激活Linux 下安装 agent 用的是包管理器比如 Ubuntucurl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import chmod 644 /usr/share/keyrings/wazuh.gpg然后添加仓库、install、启动。这里最容易踩的是 Wazuh Server 的 IP 写错或者记成localhost。如果你 Agent 和 Server 不在同一台机器一定要写真实 IP。注册命令/var/ossec/bin/agent-auth -m 服务器IP -P 密码-P参数后面跟的密码是 Server 上/var/ossec/etc/authd.pass文件里的密码。如果你没配置这个文件Agent 注册时会被拒绝。我当时没配 authd.pass也没执行注册流程Agent 启动后一直处于Disconnected。后来用manage_agents交互式生成的 key 粘贴到/var/ossec/etc/client.keys才算激活成功。6.2 Windows Agent 的注意点Windows 下装 Agent 无脑下一步就行但真正的问题是安装完后要以管理员权限运行ossec-agent的注册工具或者它会提示你输入服务器 IP 并自动注册。这经常因为防火墙弹窗没同意导致 Agent 没法出网。另外 Windows Defender 或者第三方杀软可能拦截 Agent 的安装和自启动装完如果发现服务是停止状态先去安全中心看隔离记录。6.3 Agent 显示 Disconnected 的处理Agent 装上后Dashboard 里如果显示 Disconnected核心就三个排查点Server 1514 端口是否通telnet 服务器IP 1514。Agent 的/var/ossec/etc/ossec.logLinux或安装目录下的ossec.logWindows里有没有认证失败的线索。确认 Agent 的serveraddress配置是否指向真正的 Server IP。多数情况下将 Server IP 改对、重启 Agent 就好了。注意改完配置后务必重启wazuh-agent服务而不是只刷新页面。7. 高频故障速查表与我的部署建议这里总结一下我遇到过的所有高频问题和解决方向方便你后面快速对照。7.1 高频故障汇总症状可能原因解决动作OpenSearch 启动失败内存锁定报错物理内存不足、memlock 未配置调低 jvm.options、配置 limits.confDashboard 502/503证书 CN 不匹配或服务未启动检查证书重启 wazuh-dashboardAgent 连不上 Server1514 端口不通、地址配错放行端口、改正确地址、重启 agentFilebeat 日志提示证书错误Filebeat 与 Indexer 证书不同源用相同 CA 重建证书登录 Dashboard 报无权限/登录循环密码不符、角色映射残留用 wazuh-passwords-tool -a 重置Index 只读权限告警磁盘满或索引权限错误清理磁盘或调整索引写权限Wazuh UI 首页加载慢外部地图资源不可达关闭外部地图服务等待加载安装脚本一直卡住网络源拉取慢加 mirrors 或预下载离线包7.2 先规划再动手别上来就装根据我装几套的经验建议你按这个顺序操作确认系统Ubuntu 22.04 或 CentOS 7.9 都行至少 8GB 内存、2 核 CPU、50GB 磁盘。配置网络放行四个端口配置好/etc/hosts指向本机。执行官方 All-in-One 脚本生成证书并安装全部组件。验证组件curl -k https://localhost:9200看 Indexer 是否返回 JSON访问 Dashboard 看是否正常登录。再装 Agent从 Dashboard 界面下载 Agent 包或者手动到目标机器安装配置。调优参数调整jvm.options、ossec.conf里的内存和 worker 设置让它匹配你的机器大小。生产环境我建议先做一台单机的完整验证跑一周再说拆分。Wazuh 的分布式部署通常会引入证书同步、DNS 解析、内存配额等多种问题单机跑不通就去上集群纯属给自己找事。另外提一句如果你在安装过程中不小心把某个组件的配置改坏了最快的恢复方式是重跑安装脚本的清理流程重新生成配置。其实大部分踩坑都不是 Wazuh 本身逻辑有多难而是各种系统级的小毛病反复叠加。把这些预检项做扎实比你出问题后百度十篇文章再瞎折腾要高效得多。我自己最后反复用的就是journalctl -u wazuh-indexer、journalctl -u wazuh-manager和journalctl -u wazuh-dashboard这几个命令看日志配合同一时刻free -h查内存基本能把 80% 的问题定位清楚。别上来就重装系统先看日志再动手你会在下一次部署时感谢这个习惯。
返回列表