ARTICLE DETAIL

资讯详情

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

Wazuh安装踩坑全记录:从环境准备到避坑实战

Wazuh安装踩坑全记录:从环境准备到避坑实战 Wazuh这东西我在装它之前以为就是个开了箱就能用的安全监控平台直到我在原地折腾了整整一个周末从索引器起不来到登录页一直转圈再到代理端反复 Active 不了。后来把各种大小坑都趟平了才敢说对这个系统真正“入门”了。所以这篇踩坑指南适合那些准备在测试环境或生产环境里装 Wazuh 的人看尤其是第一次接触这套框架、想拿它做入侵检测、日志审计和文件完整性监控的同学。我会尽量把我遇到过的坑、排查思路、以及为什么官方文档里那句话会坑人的原因都写清楚省得你再走一遍弯路。1. Wazuh 到底是什么为什么安装这么容易翻车Wazuh 是一套开源的主机安全监控方案核心能力集中在入侵检测HIDS、日志分析、漏洞检测、文件完整性监控FIM、以及合规性管理这几个方向。它和 Elastic Stack 关系很深早期版本其实就是基于 Elasticsearch 做了安全侧的二次封装后来逐渐演变成独立项目。如今你在单台机器上装 Wazuh实际上要装的是三个相互关联的组件Wazuh Indexer负责存储和索引数据、Wazuh Manager负责收集和分析来自代理端的日志、以及 Wazuh Dashboard负责把数据可视化呈现出来。三个组件加起来再去对接部署在业务机器上的代理端Wazuh Agent才算形成一个完整的监控闭环。安装容易翻车的原因首先就是组件多、依赖复杂。你看着官网一键安装脚本好像很轻松但实际上它在背后做了大量工作要装 Java、装 Python 依赖、装 OpenSearch、配置节点证书、生成随机密码、初始化索引模板。任何一个环节的网络源如果拉取失败、或证书配置不匹配都会导致后续服务起不来。其次Wazuh 对硬件资源是比较苛刻的。我一开始图省事用了台 2 核 4G 的虚拟机去装结果安装脚本倒是跑完了Dashboard 登录之后数据一片空白各种服务无响应踩坑踩得怀疑人生。所以在动手之前得先明确一件事你是在做概念验证POC还是真的要长期使用。这两者对机器配置和架构设计的要求是完全不同的。如果是 POC我建议直接在一台干净的机器上做 All-in-One 单节点部署内存起码给到 6G 或 8GCPU 2-4 核磁盘预留 50G 以上。别想着用 2G 内存跑完整套 Wazuh那不是考验技术是跟自己过不去。2. 安装前的环境选型和资源规划2.1 操作系统与虚拟化平台的选择Wazuh 官方对操作系统的支持比较明确RHEL、CentOS、Ubuntu、Debian 这些主流发行版都在列。但这里有个实际情况老版本 CentOS 7 的兼容性很好网上大半踩坑案例也都是围绕 CentOS 7 展开的可如果你是从零开始装新环境我更推荐直接用 Ubuntu 20.04 或 22.04 LTS。原因很简单Wazuh 以及它的底层 OpenSearch 对较新的系统依赖库支持更积极遇到问题也更容易找到对应的修复方案。另外一个容易被忽略的问题是虚拟化平台的坑。如果你像我一样是在虚拟机上装那么一定要记得在虚拟机的 CPU 设置里开启硬件虚拟化比如 VMware 的“虚拟化 Intel VT-x/EPT”选项否则后续跑起来会有性能问题。同时磁盘类型建议选“预分配空间”而不是“动态增长”虽然这会一次性占用宿主机资源但能避免日志数据量上来之后磁盘文件碎片化严重、IO 压力飙升的问题。2.2 内存、CPU、磁盘到底要给多少关于资源我直接给结论。纯测试环境最低配置4 核 CPU、8G 内存、80G 磁盘。这不是我瞎拍脑袋而是 Wazuh 官方文档里给出的最小推荐值也是类似的量级。如果你代理端数量超过 20 台或日志流量比较大那还要再加尤其是内存。Indexer 底层是 OpenSearch它的 JVM 堆内存默认是按物理内存的 50% 来设置的。你总内存如果只有 4GJVM 堆就只有 2G而 OpenSearch 在索引任务重的情况下会经常触发 Full GC表现在外就是 Dashboard 查询超时、Indexer 进程莫名退出。磁盘方面很多人装完后发现系统盘快满了原因主要是 OpenSearch 的索引文件默认存在/var/lib/wazuh-indexerWazuh Manager 的日志在/var/ossec/logs加上 Dashboard 自身的日志随便跑几天就是几个 G 的数据。因此在规划时建议把这些路径放到独立的数据盘或分区上避免日志把系统盘撑爆。2.3 网络与仓库源的准备Wazuh 安装脚本会从官方仓库拉取软件包。国内服务器如果直接访问官方源经常会出现超时或下载一半失败的情况。这里我建议提前把镜像源换掉。当然具体怎么换源、换成什么源你的服务器在哪个区域、用的是什么系统情况都不太一样这一步属于常规操作按你平时的习惯来就好。关键是务必确保在跑安装脚本之前能用wget或curl正常访问到软件包地址否则装到一半发现拉不到依赖整个安装流程就得从头再来。这个坑我踩过真的很浪费时间。2.4 时间同步和主机名还有一个特别基础但特别重要的事时间同步。Wazuh 三个组件之间通信时对系统时间一致性要求很严格。时间偏差超过一两分钟就可能出现 Indexer 节点无法加入集群、或者 Dashboard 无法解析证书的诡异问题。解决方案很简单就是装好系统后立刻配置 NTP 时间同步。主机名也建议在安装前就定好不要用默认的 localhost因为 Wazuh 安装脚本会基于主机名生成证书后续如果想换主机名证书也得重新生成一遍非常麻烦。3. 从零开始的安装实操一步一步不要跳3.1 下载安装包与初始化配置Wazuh 官方其实提供了统一的安装助手脚本wazuh-install.sh。如果你只是想要一个 All-in-One 的单节点环境也就是三个核心组件安装在同一台机器上这个脚本是最省事的方式。你可以去官网获取当前版本的安装脚本和对应的校验值。下载完第一件事就是校验文件完整性而不是直接跑。# 下载安装脚本示例请以实际版本为准 curl -sO https://packages.wazuh.com/4.x/wazuh-install.sh # 查看脚本的基本用法 bash wazuh-install.sh --help这里要提一句脚本运行过程中会生成一个包含所有组件初始密码的文件路径在/root/wazuh-passwords.txt。很多朋友装完就直接把这个文件扔在一边等到要登录 Dashboard 或者给 Indexer 设置访问密钥时才想起来找结果发现已经被清理了。建议装完第一时间把这个文件备份到安全的地方。3.2 使用安装助手部署三个核心组件运行 All-in-One 安装只需一条命令bash wazuh-install.sh --generate-config-files这个阶段会检查你的系统环境和依赖并为当前节点的证书配置做准备。如果这一步报错多半是系统版本不支持或者主机名格式不对。我在 CentOS 7 上遇到过安装脚本提示systemd版本过旧而中断的问题。如果你也遇到类似情况优先检查系统版本是不是在官方支持列表里而不是试图强行绕过去。因为后续步骤对 systemd 服务和 Java 环境的要求更高强行绕过只会埋下更多隐患。配置生成完之后再执行真正的安装bash wazuh-install.sh --wazuh-indexer node-1这条命令会安装并配置 Wazuh Indexer 节点。看到这里你可能会问怎么还要分三步装是的即使 All-in-One 模式下脚本也是按 Indexer、Manager、Dashboard 的顺序分别安装的每一阶段都会生成独立的输出信息和控制台日志。想一步到位是不行的老老实实按照脚本提示分步执行才是正途。3.3 安装 Indexer初始化集群与加载模板Indexer 安装完成之后接下来要初始化集群。这里执行bash wazuh-install.sh --start-cluster这一步会自动创建 OpenSearch 的索引模板并初始化系统索引。装完可以用下面的命令验证服务是否正常curl -k -u admin:密码 https://localhost:9200其中密码就是wazuh-passwords.txt里的 admin 用户密码。如果你看到返回了一段 JSON里面包含cluster_name、tagline等字段就说明 Indexer 已经正常了。如果提示证书错误大概率是你之前手动改过主机名导致证书的 CN 和当前主机名不匹配。遇到这种情况最稳妥的办法是把主机名改回去然后重新生成证书再跑一遍初始化。3.4 安装 Manager 并启动数据接收Indexer 初始化完成之后开始装 Manager 节点bash wazuh-install.sh --wazuh-manager node-1Manager 装好后默认情况下会监听1514/UDP和1515/TCP端口分别用于接收代理端日志和代理注册请求。如果你在测试环境里发现代理端始终注册不上优先检查这两个端口有没有被防火墙拦掉。启用 Wazuh Manager 服务的命令systemctl daemon-reload systemctl enable --now wazuh-manager但说实话使用安装脚本部署时这些服务默认就已经设置为开机自启了不太需要手动再执行。可能需要在意的反而是服务启动后的日志位置Manager 的日志在/var/ossec/logs/ossec.log后续排查问题主要就是看这个文件。3.5 安装 Dashboard 并修整 CSP 报错前面的组件都安装好后最后安装 Dashboardbash wazuh-install.sh --wazuh-dashboard node-1这一步完成后安装助手会打印出 Dashboard 的访问地址和初始账号密码。浏览器打开https://你的IP:443用 admin 账号登录就能看到 Wazuh 的主界面了。不过装到这里有个非常经典的坑就出现了打开 Dashboard 以后页面显示是能显示但很多图形组件加载不正常控制台里全是 Content Security PolicyCSP报错尤其是文件完整性监控和漏洞检测的仪表盘模块图表直接空白。原因是 Wazuh Dashboard 4.x 版本对 CSP 的默认配置非常严格在一些网络代理或自定义域名访问的场景下部分静态资源会被浏览器拦截。解决办法倒也不难在 Dashboard 的配置文件中把 CSP 相关参数关掉或调宽松一些。注意这是测试环境图省事的做法生产环境还是建议从网络架构层面去解决而不是直接关 CSP。具体的修改方式不同版本之间差异比较大建议直接查你所安装版本的官方文档搜索server.csp关键词就能找到对应的配置位置。3.6 部署代理端并完成注册服务端的三个组件全部启动后开始接代理端。在代理端机器上先添加 Wazuh 仓库这一步实测的时候很磨人经常因为网络原因失败所以建议配合你的环境和网速选择最合适的软件源然后安装 wazuh-agent# 这里以 Ubuntu 为例RHEL/CentOS 请对应调整 curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import sudo chmod 644 /usr/share/keyrings/wazuh.gpg安装完成之后需要手动配置 Manager 地址并启动服务sudo vi /var/ossec/etc/ossec.conf # 找到 clientserveraddress 字段改成你的 Manager IP sudo systemctl enable --now wazuh-agent代理端启动后去 Manager 的安装目录执行/var/ossec/bin/agent_control -l如果能看到代理端状态为Active或Pending说明通信已经建立。如果长时间是Disconnected那就需要看代理端日志/var/ossec/logs/ossec.log里具体报什么错大部分情况是证书不匹配、网络不通或者服务端端口没监听。4. 我踩过的那些高频坑和排查方法4.1 “invalid url”报错并非 URL 写错我遇到的第一个比较恼火的报错是在运行安装脚本生成配置文件的时候终端直接抛出一行英文大意是指向某个 URL 无效。我第一反应以为自己网络有问题于是各种换源、重新下载脚本折腾了一个多小时才发现问题出在原主机名带着下划线或者特殊字符上。Wazuh 的证书生成逻辑里主机名中的下划线会导致生成的自签名证书里的 CN 值不合法。解决办法就是先把主机名改成字母、数字和连字符的组合然后再重新运行安装脚本。这个坑官方文档里写得不明显但极其容易出现。4.2 Dashboard 登录页一直转圈数据加载不出来按正常流程装完Dashboard 访问到了但输入账号密码之后页面一直转圈或者登录进去了但没有任何数据。遇到这种情况我建议按这个顺序排查先看 Indexer 是否正常执行前面的 curl 验证命令确认返回的是 JSON 而不是错误页再看 Manager 是否在监听端口执行ss -lntp | grep -E 1514|1515|55000最后查看 Dashboard 日志/var/log/wazuh-dashboard/wazuh-dashboard.log重点搜索saved objects或timeout关键信息。大多数情况下问题出在 Indexer 的内存不足导致索引请求超时。把内存加上去或者在配置文件里调低 OpenSearch 的堆内存但最低不能低于 2G重启服务后能明显改善。4.3 代理端一直 Pending不变成 Active这是新手最容易卡住的地方。代理端注册成功进入 Pending 状态是正常的表示 Manager 已经收到了请求但还没有完成认证但如果是长时间 Pending那就要注意了。我遇到过两种典型情况第一种是代理端的名字在 Manager 上已经存在但旧证书还没清理干净。解决方法是到 Manager 上先删掉旧的代理记录清掉/var/ossec/etc/client.keys里对应条目然后再让代理端重新注册第二种是版本不一致代理端版本和服务端差太多时握手协议不兼容这种就只能统一版本。4.4 磁盘被日志撑爆的紧急处理正如前面所说OpenSearch 的索引会把日志写满磁盘。一旦磁盘满了OpenSearch 会自动把索引改成只读模式然后你就会发现 Dashboard 上所有图表都不动了新的告警也不再出现。这时候哪怕你马上清掉一些日志索引还是只读的。需要手动把索引改回可写curl -k -u admin:密码 -X PUT https://localhost:9200/_all/_settings -H Content-Type: application/json -d {index.blocks.read_only_allow_delete: null}执行完以后再确认磁盘空间真的降下来了。这个坑提醒我们不要等到磁盘报警才来处理日志型应用的磁盘监控一定要提前做好。5. 安装之后必做的几个检查和调优5.1 服务自启动状态检查装完以后不要急着把所有代理端都接进来。先把服务端的三个核心服务状态确认一遍systemctl status wazuh-manager systemctl status wazuh-indexer systemctl status wazuh-dashboard正常情况下都应该显示active (running)并且没有failed关键词。如果 Manager 服务显示 exited多半是配置文件语法错误可以用/var/ossec/bin/wazuh-control info之类的命令检查或者直接看/var/ossec/logs/ossec.log末尾的报错。5.2 调整 OpenSearch 的 JVM 堆内存默认情况下安装脚本会按机器物理内存的 50% 分配给 OpenSearch JVM即ES_JAVA_OPTS。如果你机器是 8G 内存它会分 4G 给 Indexer剩下 4G 给系统和其他服务其实也够用。但如果你想让同一台机器上跑更多代理端或更大日志量建议手动调整/etc/wazuh-indexer/jvm.options里-Xms和-Xmx配置。注意这两个值必须设置成一样并且不要超过系统物理内存的 50%-60%否则系统本身会变得很卡。5.3 定期备份配置文件Wazuh 的配置很多改起来也容易手滑。建议每次调整完配置后把关键文件做个备份。需要备份的主要文件包括/etc/wazuh-indexer/opensearch.yml/etc/wazuh-dashboard/opensearch_dashboards.yml/var/ossec/etc/ossec.conf这些都是核心配置文件改坏了很可能导致整个服务起不来。5.4 用内置规则集做一次安全自测装完当然要验证它真的能监控而不是只看到仪表板上的绿色勾勾就完事。Wazuh 自带了一系列安全规则可以通过下面这个命令来测试/var/ossec/bin/ossec-logtest这个工具允许你逐行输入模拟日志它会帮你看哪条日志命中了规则、产生了几级告警。比如我常用的测试方法是模拟一条 SSH 登录失败的日志看它能不能触发ssh authentication failure规则。如果基本的识别都没有那你后面的安全监控也就无从谈起得回头检查 Manager 的规则配置和日志收集设置。6. 我个人的实操心得最后再分享一点我的体会。Wazuh 安装的坑说实话大部分是可控的无非是资源不够、网络源不稳、主机名不规范、证书不匹配这几大类。但真正让人头疼的是官网文档默认你对 Elasticsearch、OpenSearch 这类技术有足够了解很多配置背后的原理你得自己补课。所以我特别建议第一次装的朋友先在自己本地用虚拟机完整走一遍 All-in-One 部署确认对整套系统有了感性的认识之后再去规划生产环境的分布式部署。毕竟在生产环境一边翻文档一边试错那种煎熬真的只有经历过的人才懂。Wazuh 这个系统本身是很好的安装过程越是让你崩溃后面用起来你就会越有底气。
返回列表