Wazuh这个开源安全平台,我前前后后折腾了将近两周才把它彻底跑顺。如果你正准备在自己的服务器或实验室里部署一套Wazuh,又不想被官方文档里那些看似简单、实际操作却处处是坑的步骤折磨,那这篇指南应该能帮你省下不少时间。
简单说,Wazuh是一个免费开源的统一安全监控平台,它把HIDS(主机入侵检测)、SIEM(安全信息和事件管理)、XDR(扩展检测响应)这几个能力整合到了一起。它能实时监控文件变更、采集系统日志、检测漏洞和恶意软件,还能借助内置的规则引擎做威胁告警。适合运维、安全工程师,以及任何想在自家服务器或测试环境里搭一套安全监控系统的同学。我这次是从零开始,在一台4核8G的云服务器上部署了最新的单机版Wazuh,整个过程踩了不少坑,这里把所有经验教训都整理出来。
1. 安装前的准备与方案选型
1.1 Wazuh到底是什么,你要用它做什么
如果你对Wazuh还比较陌生,先花三十秒理解一下它的核心组件。Wazuh由两大部分组成:一部分是服务端的Wazuh Manager和Wazuh Indexer,另一部分是部署在目标主机上的Wazuh Agent。Manager负责收集Agent上报的数据并通过规则引擎分析,Indexer扮演了数据存储和检索的角色(底层是OpenSearch),而Dashboard则是你日常操作的可视化界面。
我见过不少新手一上来就急着敲安装命令,结果装完发现不会用、也不知道怎么接Agent,最后整台服务器被各种服务占满了资源。所以在安装之前,先想清楚你的核心诉求到底是什么:只是想收集几台Linux服务器的登录审计日志?还是要做文件完整性监控?或者是要满足等保合规里的日志留存要求?
不同的诉求,决定了你安装完之后的配置方向。比如我就需要同时做到三件事:syslog日志收集、文件完整性监控(FIM)、漏洞检测(Vulnerability Detector)。搞清楚自己的目标,后面配置Agent策略的时候才能有的放矢。
1.2 单机版和分布式的选型,别一上来就堆机器
很多网上教程一上来就推荐分布式部署:一台装Indexer,一台装Manager,再来一台跑Dashboard。如果你没有上百台Agent要管,完全没必要这么搞。Wazuh官方其实提供了all-in-one的安装组合,也就是把Indexer、Manager、Dashboard装在同一台服务器上,小规模场景下性能和稳定性都足够。
官方文档推荐的硬件要求是:4核CPU、8G内存、50G磁盘,系统用CentOS 7.9或Ubuntu 22.04。按照这个配置跑单机版,管理50台以内的Agent问题不大。我自己用阿里云的4核8G服务器,系统用的Ubuntu 22.04,装完之后内存占用大约在4.5G左右,CPU在空闲时基本在5%以下,完全能接受。
这里有个之前踩过的坑:不要在只有2G内存的VPS上强行装Wazuh。我一开始图省事在1核2G的小机器上试过,安装过程直接OOM(内存溢出),OpenSearch服务频繁宕机,最后只能重装系统。如果你手头的服务器资源比较紧张,要么升级配置,要么先试用官方的云服务,不要拿小机器硬扛。
1.3 安装前的网络与端口规划
Wazuh安装过程中需要访问外网下载依赖包,所以服务器的DNS和出网策略得提前确认好。特别是使用云服务器时,安全组规则里要提前放行以下端口:
- 443/TCP:Wazuh Dashboard的Web访问端口
- 1514/TCP:Manager接收Agent日志的默认端口(新版默认是TCP)
- 1515/TCP:Agent注册端口
- 55000/TCP:API通信端口(仅在本地或需远程调用API时使用)
当然,这是最简化的端口清单。如果你还计划接入syslog设备,可能需要额外开放514端口,UDP和TCP都要考虑。云服务器的安全组和服务器本机的firewalld规则要一起看,我遇到过安全组全放开了但服务器内部iptables没放行导致的Agent连接超时问题。
2. Wazuh安装完整流程与参数配置
2.1 全自动安装脚本的正确打开方式
Wazuh官方推荐用all-in-one安装脚本完成部署,脚本会帮你处理依赖安装、OpenSearch配置、Manager初始化等所有步骤。整个过程体验还算流畅,但有几个环节需要额外注意。
执行安装前,务必先把系统源更新一下,避免依赖包版本过旧:
apt update && apt upgrade -y然后下载并执行官方安装助手:
curl -sO https://packages.wazuh.com/4.9/wazuh-install.sh bash wazuh-install.sh --generate-config-files这里有一个很关键的点:如果你在生成配置文件这一步之前,没有准备好域名或IP规划,脚本会默认使用当前服务器的实际IP。如果你希望Dashboard用域名访问,需要提前在config.yml里做好配置。对我这种自己测试的场景,直接用IP即可。
配置生成以后,真正安装的命令是:
bash wazuh-install.sh --wazuh-indexer node-1 bash wazuh-install.sh --wazuh-server wazuh-1 bash wazuh-install.sh --wazuh-dashboard dashboard注意:如果你执行的是all-in-one的安装,有一条命令可以一步到位:
bash wazuh-install.sh --wazuh-indexer node-1 --wazuh-server wazuh-1 --wazuh-dashboard dashboard官方文档推荐单机版直接用这个组合命令,我也建议你这样装,省得一步步等。
装的过程中会看到一个进度条和日志输出,整个安装过程大约需要10到15分钟,多数时间花在从软件源下载OpenSearch和Wazuh相关的deb/rpm包上。如果你的服务器网络状况一般,建议在tmux或screen会话里执行,防止SSH断连导致安装中断。
2.2 安装过程中生成的密码和账号,别弄丢了
安装脚本运行结束后,终端会显示一段类似这样的输出:
The installation finished successfully. The Wazuh dashboard user is 'admin'. The password is '...'由于你的终端可能没来得及记录,脚本会把信息写入一个名为wazuh-install-files.tar.gz的压缩包,里面就包含wazuh-passwords.txt文件。一定要把这份密码文件下载或保存好。
这是我第一次踩坑的地方:我当时以为安装完密码会保存在某个固定路径,结果随手就把wazuh-install-files.tar.gz当临时文件删了。等几分钟后想登录Dashboard,发现自己根本不知道admin密码。虽然官方有重置密码的流程,但步骤比较繁琐,所以强烈建议装完第一时间把密码文件备份到本地电脑或密码管理器里。
如果你已经和我一样把密码文件弄丢了,重置管理员密码的方法是:
cd /usr/share/wazuh-indexer/plugins/opensearch-security/tools/ ./wazuh-passwords-tool.sh --change-user admin --password '新密码'执行完以后,别忘了同步修改Dashboard里的内部用户密码:
/usr/share/wazuh-dashboard/bin/opensearch-dashboards-keystore add wazuh.security.admin_password2.3 Dashboard首次登录和基础检查
安装完成后,浏览器访问https://服务器IP,会看到证书警告,这是正常的,因为默认用的是自签名证书。选择继续访问后就能看到Wazuh的登录页面,输入admin和安装时生成的密码就能进入主界面。
登录进去以后,别急着添加Agent,先在管理界面上确认一下各个模块状态是否正常。重点看左下角的“Wazuh”菜单里的“Management”区块,检查Indexer、Manager、Dashboard之间的连接状态。如果配置正常,你会看到一个绿标。
我这里在首次登录时也遇到一个坑:Dashboard页面能够打开,但登录之后一直在转圈,显示“Server error”。后来排查发现是Wazuh Indexer服务没有正常启动,原因是系统内存只剩不到1G,OpenSearch被系统杀掉了。重启服务并清掉一些无用进程后,刷新页面就正常了。
3. 踩坑实录:从失败到稳定运行的全程记录
3.1 最大坑之一:内存不足引发的连环故障
前面提过,我最初用1核2G的机器装Wazuh,装到一半进程直接被OOM Killer干掉。后来换到4核8G的机器上,以为万事大吉了,结果还是出现了一个隐藏较深的问题。
Wazuh Indexer(OpenSearch)默认堆内存设置为系统内存的一半,比如8G内存的机器,它会自动把heap_size设为4G。按理说这没毛病,但问题出在OpenSearch的JVM配置上——如果你在/etc/wazuh-indexer/jvm.options里手动设置了-Xms4g -Xmx4g,而系统同时还要跑Manager和Dashboard,很容易在业务高峰时内存吃紧。
我的建议是:单机版部署时,把Indexer的堆内存手动降到2G或者3G,给Manager和系统本身留出余量。具体操作是编辑:
vim /etc/wazuh-indexer/jvm.options把这两个值改小:
-Xms1g -Xmx1g修改后重启Indexer:
systemctl restart wazuh-indexer你可能担心堆内存太小会影响性能,但对于50台以内Agent的场景,1G堆内存跑OpenSearch完全够用。实测我改成1G之后,系统内存总占用从4.5G降到了约3.2G,整体更稳。
以下是实际内存占用情况参考(我在部署完成后用free -h记录的数据):
| 项目 | 数值 |
|---|---|
| 总内存 | 7.6G |
| 已用内存 | 3.2G |
| 其中Wazuh相关服务占用 | 约2.4G |
| 系统及缓存等 | 约0.8G |
| 可用内存 | 约4.4G |
这个数据在Agent数量不超过50台的情况下相对稳定,如果你要接更多的Agent,就要考虑把Indexer独立出来部署了。
3.2 网络超时:repo源访问慢导致安装失败
另一个高频坑是安装脚本下载依赖包时连接官方源超时。我在国内服务器上第一次执行wazuh-install.sh,卡在下载OpenSearch的rpm包阶段,等了十几分钟最后提示连接超时。这里推荐一个非常有效的办法:修改系统DNS为公共DNS,或者使用云厂商的镜像源。
具体来说,Wazuh安装脚本底层用的是apt或yum,你可以先检查一下软件源里是否有Wazuh的repo文件:
cat /etc/apt/sources.list.d/wazuh.list如果内容不存在或不对,手动添加:
curl -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 echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list如果你所在网络环境访问官方源依然不稳定,可以考虑使用国内云厂商的镜像(比如华为云、清华镜像等)来加速。本质上Wazuh的包就是普通的deb/rpm,只要仓库地址能通就行。
3.3 重设Dashboard密码的隐藏细节
如果你像我一样,因为删除了密码文件而不得不重置密码,那么除了前面提到的Indexer密码同步,还有另外一个容易被忽略的地方。Wazuh Dashboard内部会自己维护一份密码存储文件,路径大致在:
/etc/wazuh-dashboard/opensearch_dashboards.keystore当你重置了Indexer里admin用户的密码后,Dashboard访问Indexer时使用的还是旧密码,如果不更新,Dashboard就会出现认证失败。具体做法是:
cd /usr/share/wazuh-dashboard/bin/ ./opensearch-dashboards-keystore remove wazuh.security.admin_password echo "新密码" | ./opensearch-dashboards-keystore add wazuh.security.admin_password --stdin systemctl restart wazuh-dashboard这个操作很容易被官方文档里一大段文字给埋没掉,我也是在论坛里翻了半天才找到解决方案。遇到Dashboard提示security_exception或无法加载数据的,十有八九就是这个原因。
3.4 Agent注册失败的排查思路
安装完服务端之后,添加Agent是必经之路。在Dashboard的“Agents”页面点击“Add agent”,选择你的Agent系统类型(比如Linux、Windows、macOS),页面会生成对应的部署命令。看起来很简单是吧?但我在这上面卡了整整一下午。
问题是这样的:Agent安装完以后,状态一直显示“Disconnected”,Manager日志里报错:
ERROR: [Agent] Unable to connect to manager at <ManagerIP>:1514排查了安全组、防火墙、SELinux之后都没问题,最终定位到原因:Agent端的ossec.conf里配置的Manager地址不对。我用的是老版本的Agent包,它默认把Manager地址设置成了MANAGER_IP这个占位符,导致Agent一直在尝试连接一个无效的主机名。
解决办法是在安装Agent的命令中显式指定地址:
WAZUH_MANAGER='你的服务器IP' apt install wazuh-agent如果你已经装完Agent,只想修改地址,直接编辑Agent的配置文件:
vim /var/ossec/etc/ossec.conf把<address>标签里的值改成正确的Manager IP,重启Agent:
systemctl restart wazuh-agent还有一个比较隐蔽的坑:如果你在Agent上和Manager上存在时钟偏差(超过一定阈值),Agent连接也会被拒绝。Wazuh对时间同步要求比较严格,安装前最好确保所有服务器都开启了NTP。我在新开的云主机上就遇到过系统时间默认比标准时间慢了五分钟的情况,导致Agent注册总是失败。
3.5 端口占用:8080端口冲突
Wazuh默认只占用443、1514、1515、55000这几个端口,但如果你在安装Wazuh之前已经在服务器上跑了Nginx或Node.js应用,恰好占用了443端口,就会出现Dashboard无法启动的问题。
我遇到的情况是服务器上还跑着一个GitLab,它的Nginx占用了443端口。Wazuh安装脚本执行完以后,Dashboard一直起不来,日志显示端口被占用。解决办法是把GitLab的HTTPS端口改成8443,或者临时停掉原本的服务,等Wazuh安装完成后再做调整。
这个坑提醒我:部署Wazuh这类占用核心端口的安全软件时,最好挑一台干净的服务器,避免和其他服务产生端口冲突,排查起来会非常头疼。
4. 常见问题速查与安装后的优化建议
4.1 问题排查速查表
为了让你在折腾的时候少走弯路,我整理了一份实际排错过程中高频出现的现象、可能原因和解决办法,可以直接对照参考。
| 现象 | 可能原因 | 排查方法 | 解决办法 |
|---|---|---|---|
| Dashboard打不开 | 443端口被占用 / Dashboard服务未启动 | `ss -lntp | grep 443` |
| 登录后一直转圈 | Indexer未启动 / 密码不同步 | 查看wazuh-indexer服务和Dashboard日志 | 重启Indexer,并同步重设admin密码与keystore |
| Agent状态Disconnected | Agent地址配置错误 / 端口不通 / 时间偏差 | 查看Manager和Agent日志、检查1514/1515端口 | 修正ossec.conf中Manager地址,确认防火墙放行,同步时间 |
| 内存占用过高 | OpenSearch默认堆内存过大 | free -h查看内存 | 修改jvm.options降低堆内存 |
| syslog设备无法接入 | 514端口未开放/未配置监听 | `ss -lunp | grep 514` |
4.2 安装后的基础配置建议
装完Wazuh只是第一步,真正让这套系统开始发挥价值的是后续的策略配置。按照我自己的使用经验,以下这几个配置项属于装了就应该立刻做的调整。
首先是把Wazuh的syslog监听打开。默认情况下Manager只接收Agent主动上报的数据,如果你还想接入交换机、防火墙等不支持安装Agent的网络设备,就得在Manager的/var/ossec/etc/ossec.conf里增加syslog监听配置:
<remote> <connection>syslog</connection> <port>514</port> <protocol>tcp</protocol> <allowed-ips>0.0.0.0/0</allowed-ips> </remote>修改后重启Manager。这里注意,allowed-ips建议收敛到具体的可信网段,不要直接用0.0.0.0/0,安全软件本身如果暴露在公网上,反而容易被扫描利用。
其次是开启文件完整性监控(FIM)。在Agent的ossec.conf里,默认就有一组<syscheck>配置,但默认监控目录比较基础。如果你需要监控Web目录,比如/var/www/html或者Nginx的站点目录,可以手动添加:
<directories check_all="yes">/var/www/html</directories>配置后重启Agent,就能在Dashboard的“Integrity monitoring”模块看到文件变更事件了。
4.3 Agent批量部署与日常维护经验
如果是测试环境,手动装一个Agent无所谓。但如果你要管理几十台主机,手点肯定不行。Wazuh支持批量部署,最常规的方式是使用Ansible或SaltStack这样的自动化工具,把安装和注册Agent的流程封装成playbook。
以Ansible为例,安装Linux Agent的核心逻辑其实是:
- name: Install Wazuh Agent apt: name: wazuh-agent update_cache: yes register: wazuh_agent_install - name: Set Manager Address lineinfile: path: /var/ossec/etc/ossec.conf regexp: '<address>' line: ' <address>你的服务器IP</address>' notify: restart wazuh-agent批量安装之前,先在几台预发机器上测试一遍,确认无误后再大批量跑。我吃过一次亏:写好的剧本里把Agent地址写错成了旧服务器的IP,结果一百多台机器Agent全都注册到了老环境上,后来清理了好半天。
维护方面,定期更新Wazuh Manager和Agent版本也很重要。新版不仅修了安全漏洞,也会带来新规则和新解码器。更新前记得先备份配置,并且在非生产环境验证一下,养成好习惯。
5. 写在最后:关于这套系统的一些真实感受
Wazuh作为开源安全平台,能力上限很高,但它的学习曲线也确实是陡峭的。如果你只是装个Dashboard看一下日志告警,那确实很简单;但想用好它,理解它的规则引擎、解码器、CDB列表,甚至自己写自定义规则,需要投入不少时间。
我个人在实际操作中最大的体会是:Wazuh的坑大多不在软件本身,而在于部署环境的复杂性和对系统资源规划的不重视。很多问题表面上看是Wazuh配置不对,追根溯源其实是内存不够、网络不通、端口占用这种最底层的事。所以如果你准备部署Wazuh,我不建议一开始就在生产环境里硬上,最好先在测试环境里完整走一遍安装、接Agent、配规则的流程,把各种异常情况摸清楚了再往生产迁移。
最后再分享一个小技巧:遇到问题不要光盯着服务端日志,Agent端的日志同样重要。Wazuh Agent的日志在/var/ossec/logs/ossec.log,里面会记录它连接Manager失败的具体原因。很多你搜不到答案的怪问题,在Agent日志里往往一两行就有解释了。
希望这篇踩坑记录能帮你把Wazuh装得更顺一点。如果你在安装过程中遇到了别的问题,也可以用相同的方法去排查一遍,大多数情况下问题都是类似的。