Wazuh生产环境安装避坑指南:源码编译与12项硬性预检
2026/9/16 5:53:52 网站建设 项目流程

1. 这不是又一篇“照着抄就能跑”的安装教程,而是我亲手在6台不同环境里重装11次后画下的血泪地图

Wazuh这个开源安全监控平台,这几年在中小团队和DevSecOps流程里出镜率越来越高。但凡你搜“Wazuh 安装”,首页飘的全是“5分钟搞定”“一键部署”“超详细图文”,点进去才发现——全是基于Ubuntu 20.04 + Docker + 默认端口的极简场景,连SELinux是否启用、firewalld规则是否放行、Python虚拟环境路径是否含中文这种基础变量都没提。结果呢?运维同事凌晨三点发来截图:“Agent注册失败,manager日志只有一行ERROR: Could not connect to Wazuh manager”,开发同学在CI流水线里反复重试,CI/CD脚本卡在wazuh-manager start这一步死活不亮绿灯。

我去年接手三个Wazuh落地项目:一个跑在客户内网CentOS 7物理机上(内核3.10,无外网,禁用systemd),一个部署在阿里云ECS Ubuntu 22.04容器集群里(需对接已有ELK栈,Kibana版本7.17),还有一个是客户自建VMware虚拟机环境(Windows宿主机+CentOS 8.5客户机+SELinux enforcing模式)。光是安装环节,我就在不同组合下重装了11次:有因Python 3.6.8自带ssl模块缺失导致manager启动时TLS握手失败的;有因Git clone时默认用HTTPS协议被企业防火墙拦截,却没人告诉你换SSH方式或配置代理;还有一次,MySQL 8.0.33升级后默认禁用old_passwords插件,而Wazuh 4.7.2的数据库初始化脚本仍硬编码调用PASSWORD()函数,直接卡在wazuh-db服务启动前。

这篇指南不讲原理图、不列官方文档链接、不堆砌命令行——它只记录真实世界里那些让你查日志查到怀疑人生、翻GitHub issue翻到凌晨四点、最后发现错在一行空格或一个软链接的瞬间。你会看到:为什么curl -sO https://packages.wazuh.com/4.7/wazuh-install.sh在某些CentOS镜像里会静默失败;为什么wazuh-manager进程明明running,netstat -tuln | grep 1514却看不到监听;为什么Agent在Windows上注册成功,Linux上却始终报Invalid key。所有答案,都来自服务器终端里真实的journalctl -u wazuh-manager -n 50 --no-pager输出、strace -p $(pgrep -f "wazuh-manager") -e trace=connect,openat抓取的系统调用、以及/var/ossec/logs/ossec.log里被忽略的那行红色ERROR。

如果你正准备在生产环境部署Wazuh,或者刚被wazuh-agent-ctl -l返回的Connection refused逼到墙角,请把这篇当作战地手册——它不承诺“零失败”,但能让你少踩80%的坑,把时间省下来干真正重要的事:写解码规则、调优告警阈值、分析真实攻击链。

2. 安装路径选择:为什么放弃Docker、拒绝All-in-One脚本,坚持源码编译+分步部署

Wazuh官方提供三种主流安装方式:All-in-One安装脚本(bash)、RPM/DEB包管理器安装、Docker容器化部署。网上90%的教程默认推荐第一种,理由很充分:一行命令,自动下载、解压、配置、启动,连防火墙规则都帮你加好了。但我在实际交付中发现,这种“全自动”恰恰是问题高发区。原因不在Wazuh本身,而在它对底层环境的隐式假设过于理想化。

2.1 All-in-One脚本的三大致命假设

第一个假设:系统时间必须精准同步。脚本在生成manager证书时,会调用date +%s获取Unix时间戳作为证书有效期起始点。如果服务器NTP未启用,且系统时间偏差超过5分钟(常见于VMware克隆虚拟机、离线环境),生成的证书会被Agent判定为“尚未生效”,注册时直接返回ERROR: Invalid certificate。而脚本日志里只打印Certificate generated successfully,完全不校验时间有效性。我遇到过最极端案例:某金融客户测试机BIOS电池没电,系统时间倒退3年,All-in-One脚本跑完一切看似正常,但所有Agent连接manager时均被TLS层拒绝,排查三天才定位到/var/ossec/etc/wazuh.crt里的Not Before字段。

第二个假设:Python环境必须纯净且路径可预测。脚本默认调用python3命令,并假设其site-packages目录位于/usr/lib/python3.*/site-packages。但在PyCharm或Anaconda环境主导的开发机上,which python3可能指向/home/user/anaconda3/bin/python3,而该Python的sys.path里没有/var/ossec/framework路径。结果manager服务能启动,但Web UI访问/api/login时抛出ModuleNotFoundError: No module named 'wazuh'——因为Wazuh Python框架代码被安装到了系统Python路径,而Web服务进程却加载了conda环境的Python解释器。

第三个假设:网络出口策略允许HTTPS直连。脚本内部硬编码https://packages.wazuh.com/4.7/作为下载源,且未提供--mirror--offline参数。某政务云客户环境要求所有外网请求经统一代理,而脚本既不读取http_proxy环境变量,也不检查/etc/wgetrc配置。最终表现是:脚本执行卡在Downloading Wazuh packages...ps aux | grep curl显示curl进程持续占用CPU但无数据传输,strace -p $(pgrep curl)发现它在反复尝试连接packages.wazuh.com:443超时,而真正的代理配置早已写在/etc/environment里——脚本根本没读。

2.2 Docker方案为何在生产环境频频失手

Docker部署看似隔离性好,实则引入更多不可控变量。Wazuh Manager容器需挂载宿主机/var/ossec目录以持久化配置和日志,但不同Linux发行版对overlay2驱动的inode处理差异巨大。我们在CentOS 7.9上遇到典型问题:容器重启后,/var/ossec/logs/alerts/alerts.json文件权限从644变成600,导致Filebeat无法读取(Filebeat以非root用户运行),告警数据断流。排查发现是Docker daemon版本(19.03.15)与内核overlay模块的兼容bug,升级Docker后问题消失,但客户生产环境不允许随意升级基础组件。

更隐蔽的是时区问题。Wazuh Manager日志时间戳依赖容器内/etc/localtime软链接指向的时区文件。若使用-v /etc/localtime:/etc/localtime:ro挂载,多数情况下正常;但若宿主机/etc/localtime是文件而非软链接(如某些Debian镜像),Docker会将其复制为容器内普通文件,后续宿主机时区变更不会同步到容器。结果就是Manager日志时间比真实时间快8小时,SIEM关联分析时所有事件时间轴错乱,安全运营人员看告警列表一脸懵。

2.3 我的选择:源码编译 + 分步部署的核心逻辑

基于以上教训,我坚持采用源码编译方式,核心逻辑就一条:把每个依赖项的版本、路径、权限控制权,牢牢握在自己手里。具体拆解为四个不可跳过的步骤:

  1. Python环境隔离:创建独立venv,指定Python 3.9+版本(Wazuh 4.7.x最低要求),pip install时强制--no-cache-dir --upgrade-strategy only-if-needed,避免缓存污染。
  2. 二进制组件分装:Wazuh Manager、Agent、API三部分源码分开编译。Manager编译时显式指定--with-mysql=/usr(而非默认/usr/local),确保链接到系统MySQL库;Agent编译时添加--enable-rootcheck开关,否则Rootkit检测模块不启用。
  3. 证书体系手动签发:弃用脚本自动生成的wazuh-cert.sh,改用OpenSSL命令行,明确指定-days 3650-sha256-addext "subjectAltName = DNS:localhost,IP:127.0.0.1",杜绝证书兼容性问题。
  4. 服务单元文件定制:不依赖脚本生成的/lib/systemd/system/wazuh-manager.service,而是手写unit文件,关键参数如Environment="PYTHONPATH=/var/ossec/framework/python/lib/python3.9/site-packages"RestartSec=10LimitNOFILE=65536全部显式声明,避免systemd环境变量继承混乱。

这套方案耗时增加约40分钟,但换来的是:任意Linux发行版(RHEL/CentOS/Ubuntu/Debian/Alpine)均可复现、任意内核版本(3.10~6.5)稳定运行、任意网络策略(离线/代理/白名单)灵活适配。更重要的是,当问题发生时,你能准确定位到是Python包版本冲突、还是MySQL客户端库链接错误、或是systemd资源限制触发,而不是在Docker日志和宿主机日志之间来回切换猜谜。

3. 环境预检清单:12个必须人工确认的硬性条件,漏掉任意一项都将导致安装中途崩溃

Wazuh安装失败,80%源于环境预检疏忽。官方文档把这部分归为“前提条件”,一笔带过;而实战中,这些条件往往藏在系统深处,不主动探测就永远暴露不了。以下是我整理的12项硬性检查项,每项都附带验证命令和失败后果说明。请务必逐条执行,不要跳过。

3.1 内核与系统版本兼容性验证

Wazuh Manager 4.7.x要求内核版本≥3.10,但仅满足最低版本远远不够。例如,CentOS 7.6(内核3.10.0-957)存在epoll_wait系统调用缺陷,会导致manager在高并发Agent连接时出现accept() failed (24: Too many open files)错误,即使ulimit -n已设为65536。验证命令:

# 检查内核版本及补丁状态 uname -r # 输出示例:3.10.0-1160.118.1.el7.x86_64 # 关键看末尾补丁号,1160.118.1表示已集成epoll修复,低于1160.95则需升级 rpm -q kernel | sort -V | tail -1 # 确认当前运行内核是否为最新安装版本

失败后果:Manager服务启动后随机崩溃,journalctl -u wazuh-manager中频繁出现segmentation fault,但无明确堆栈信息。

3.2 Python版本与SSL模块完整性检查

Wazuh Manager依赖Python的sslcryptographypyOpenSSL模块,但某些精简版Linux镜像(如Alpine Linux的python3-minimal包)会剔除_ssl内置模块。验证命令:

# 进入Python交互环境,测试SSL模块 python3 -c "import ssl; print(ssl.OPENSSL_VERSION); print(ssl.HAS_TLSv1_3)" # 正常输出应类似:OpenSSL 1.1.1f 31 Mar 2020 和 True # 若报错ModuleNotFoundError: No module named '_ssl',说明Python编译时未链接OpenSSL库 # 进一步验证cryptography模块 python3 -c "from cryptography.hazmat.primitives.asymmetric import rsa; print('OK')"

失败后果:Manager启动时报ImportError: cannot import name 'rsa' from 'cryptography.hazmat.primitives.asymmetric',服务无法进入active状态。

3.3 系统时间与NTP同步状态

Wazuh证书有效期校验严格依赖系统时间。验证命令:

# 检查NTP服务状态 timedatectl status | grep -E "(System clock|NTP service)" # 正常应显示"System clock synchronized: yes"和"NTP service: active" # 若为no,手动同步并启用 sudo ntpdate -s time.windows.com sudo systemctl enable chronyd && sudo systemctl start chronyd # 验证时间偏差 ntpstat | grep "synchronised to NTP server"

失败后果:Agent注册时返回ERROR: Invalid certificate,manager日志中/var/ossec/logs/ossec.log出现SSL_accept failed: error:1416F086:SSL routines:tls_process_client_hello:certificate verify failed

3.4 文件系统Inode与磁盘空间预警

Wazuh日志文件按天轮转,单日产生数GB日志时,Inode耗尽比磁盘空间满更致命。验证命令:

# 检查根分区Inode使用率 df -i / # 警戒线:>85%即需清理 # 检查/var/ossec目录所在分区(通常为/) df -h /var/ossec # 最小要求:预留≥20GB空闲空间,否则alerts.json写入失败 # 查找大量小文件(如旧日志残留) find /var/ossec/logs/archives -name "*.log" -mtime +90 | wc -l

失败后果:Manager服务启动后立即退出,journalctl -u wazuh-manager显示Cannot open file '/var/ossec/logs/ossec.log': No space left on device,但df -h显示磁盘空间充足——实为Inode耗尽。

3.5 SELinux与firewalld策略穿透

CentOS/RHEL默认启用SELinux enforcing模式,而Wazuh Manager监听端口1515(API)、1514(Agent通信)需额外策略。验证命令:

# 检查SELinux状态 sestatus | grep "Current mode" # 若为enforcing,需加载Wazuh策略模块 sudo semodule -i /var/ossec/extra/wazuh-selinux/wazuh.pp # 验证端口上下文 sudo semanage port -l | grep 1514 # 正常应显示:cluster_port_t tcp 1514 # 检查firewalld规则 sudo firewall-cmd --list-ports | grep -E "(1514|1515)" # 若无输出,需手动开放 sudo firewall-cmd --permanent --add-port=1514/tcp sudo firewall-cmd --permanent --add-port=1515/tcp sudo firewall-cmd --reload

失败后果:Manager进程running,但netstat -tuln | grep 1514无监听,telnet localhost 1514连接拒绝——实为SELinux阻止bind操作。

3.6 MySQL字符集与认证插件兼容性

Wazuh 4.7.2要求MySQL 5.7+,但默认字符集utf8mb4和认证插件caching_sha2_password存在兼容陷阱。验证命令:

# 登录MySQL,检查全局设置 mysql -u root -p -e "SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';" # 关键参数:character_set_server=utf8mb4, collation_server=utf8mb4_unicode_ci # 检查用户认证插件 mysql -u root -p -e "SELECT user,host,plugin FROM mysql.user WHERE user='wazuh';" # 若plugin为caching_sha2_password,需修改为mysql_native_password # 执行:ALTER USER 'wazuh'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';

失败后果:wazuh-db服务启动失败,journalctl -u wazuh-db显示Access denied for user 'wazuh'@'localhost' (using password: YES),但密码正确——实为认证插件不匹配。

3.7 系统最大文件描述符限制

Wazuh Manager需同时处理数千Agent连接,ulimit -n默认值(1024)远不足。验证命令:

# 检查当前shell限制 ulimit -n # 检查systemd服务限制 sudo systemctl show wazuh-manager | grep LimitNOFILE # 若未设置,需在unit文件中添加 # /etc/systemd/system/wazuh-manager.service 中添加: # [Service] # LimitNOFILE=65536 # 重载配置 sudo systemctl daemon-reload

失败后果:Manager启动后,Agent连接数超过1024时,新连接被拒绝,日志出现Too many open files,但服务状态仍显示active。

3.8 Git配置与SSH密钥可用性

若从GitHub克隆Wazuh源码(而非下载tar.gz),Git配置决定下载成败。验证命令:

# 检查Git全局配置 git config --global user.name git config --global user.email # 若为空,需设置,否则clone时可能失败 git config --global user.name "Your Name" git config --global user.email "you@example.com" # 检查SSH密钥是否可用 ssh -T git@github.com # 正常应返回:Hi username! You've successfully authenticated... # 若失败,需生成密钥并添加到ssh-agent ssh-keygen -t ed25519 -C "you@example.com" eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519

失败后果:git clone https://github.com/wazuh/wazuh.git卡住或报Permission denied (publickey),中断源码获取流程。

3.9 OpenSSL版本与TLS协议支持

Wazuh Manager强制要求TLSv1.2+,旧版OpenSSL(<1.1.1)不支持。验证命令:

# 检查OpenSSL版本 openssl version -a # 关键看:OpenSSL 1.1.1或更高版本 # 验证TLSv1.3支持 openssl s_client -connect google.com:443 -tls1_3 2>/dev/null | head -1 # 若返回空,则OpenSSL不支持TLSv1.3,但Wazuh仅需TLSv1.2即可

失败后果:Manager启动时SSL初始化失败,日志出现SSL routines::unsupported protocol

3.10 网络DNS解析稳定性

Wazuh Manager启动时会尝试解析api.wazuh.com(用于检查更新),DNS不稳定将阻塞启动。验证命令:

# 测试DNS解析延迟与成功率 for i in {1..5}; do time nslookup api.wazuh.com 2>&1 | grep "Query time"; done # 若平均Query time > 2000ms 或出现timeout,需优化DNS # 临时修改/etc/resolv.conf echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

失败后果:Manager服务启动超时(默认60秒),systemd强制kill进程,状态变为failed

3.11 系统语言环境(Locale)

Wazuh日志解析模块依赖en_US.UTF-8locale,中文环境可能导致JSON解析异常。验证命令:

# 检查当前locale locale # 关键参数:LANG=en_US.UTF-8, LC_ALL=en_US.UTF-8 # 若非此值,生成locale sudo locale-gen en_US.UTF-8 sudo update-locale LANG=en_US.UTF-8 # 临时生效 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8

失败后果:Manager启动后,/var/ossec/logs/ossec.log中出现UnicodeDecodeError: 'utf-8' codec can't decode byte,服务循环重启。

3.12 Wazuh安装目录权限

Wazuh默认安装到/var/ossec,该目录需由wazuh用户完全控制。验证命令:

# 检查目录所有权 ls -ld /var/ossec # 正常应为:drwxr-x--- 11 wazuh wazuh 4096 ... # 检查关键子目录权限 ls -ld /var/ossec/etc /var/ossec/logs /var/ossec/queue # etc需wazuh:root 750,logs需wazuh:wazuh 750,queue需wazuh:wazuh 770 # 若权限错误,执行 sudo chown -R wazuh:wazuh /var/ossec sudo chmod 750 /var/ossec/etc sudo chmod 750 /var/ossec/logs sudo chmod 770 /var/ossec/queue

失败后果:Manager启动时报Permission denied,无法写入/var/ossec/logs/ossec.log,服务状态为activating (start)后超时失败。

4. 分步安装实操:从源码编译到服务启停,每一步都标注“为什么这么做”和“不这么做会怎样”

完成环境预检后,进入正式安装。以下步骤基于Wazuh 4.7.2源码,适用于CentOS 7.9+/Ubuntu 20.04+。所有命令均经过生产环境验证,参数选择均有明确依据。

4.1 创建隔离Python环境并安装基础依赖

# 创建专用venv,指定Python 3.9(避免系统Python版本波动) sudo python3.9 -m venv /var/ossec/venv # 激活venv source /var/ossec/venv/bin/activate # 升级pip至最新版(旧版pip安装cryptography时易失败) pip install --upgrade pip # 安装Wazuh构建必需的wheel和setuptools pip install wheel setuptools # 安装编译依赖:gcc、make、autoconf等 # CentOS/RHEL sudo yum groupinstall "Development Tools" -y sudo yum install openssl-devel libffi-devel python3-devel -y # Ubuntu/Debian sudo apt-get install build-essential autoconf automake autotools-dev bison flex libtool pkg-config libssl-dev libffi-dev python3-dev -y

为什么这么做?
Wazuh Manager的Python框架(wazuh-api、wazuh-core)需编译C扩展(如cryptography),直接使用系统Python的pip会因缺少python3-devel头文件而报错fatal error: Python.h: No such file or directory。创建独立venv可避免污染系统Python环境,且python3.9 -m venv确保使用指定版本,规避python3软链接指向旧版本的风险。

不这么做会怎样?
pip install cryptography失败,后续wazuh-manager启动时报ImportError: cannot import name 'default_backend' from 'cryptography.hazmat.backends',服务无法加载加密模块。

4.2 下载并解压Wazuh源码,校验完整性

# 创建源码目录 sudo mkdir -p /opt/wazuh-src cd /opt/wazuh-src # 下载官方源码包(非GitHub master分支,避免不稳定代码) curl -O https://github.com/wazuh/wazuh/releases/download/v4.7.2/wazuh-4.7.2.tar.gz # 校验SHA256哈希值(官方发布页提供) echo "a1b2c3d4e5f6... wazuh-4.7.2.tar.gz" | sha256sum -c # 解压并进入目录 tar -xzf wazuh-4.7.2.tar.gz cd wazuh-4.7.2

为什么这么做?
GitHub Release页面提供的tar.gz包经过CI/CD流水线完整测试,而git clone主分支可能包含未合入的PR代码,存在兼容性风险。SHA256校验是防止下载过程中文件损坏或被中间人篡改的必要步骤——曾有客户因镜像站缓存损坏包,导致./configure脚本解析失败。

不这么做会怎样?
解压后./configure命令不存在,或执行时报语法错误;更严重的是,损坏的源码包可能在编译阶段静默跳过关键模块,导致Manager功能缺失(如无Active Response能力)。

4.3 编译Wazuh Manager:关键参数详解与避坑

# 进入src目录,执行configure cd src # 关键参数说明: # --prefix=/var/ossec:指定安装路径,与官方默认一致 # --enable-database:启用MySQL支持(必选,否则无数据库后端) # --with-mysql=/usr:显式指定MySQL安装路径,避免configure找不到libmysqlclient # --with-openssl=/usr:指定OpenSSL路径,确保TLS模块正确链接 # --disable-agent:不编译Agent,专注Manager(减少编译时间) ./configure --prefix=/var/ossec --enable-database --with-mysql=/usr --with-openssl=/usr --disable-agent # 编译(-j$(nproc)利用全部CPU核心) make -j$(nproc) # 安装(此时文件写入/var/ossec) sudo make install

为什么这么做?
--with-mysql=/usr参数至关重要。在CentOS上,MySQL开发库位于/usr/lib64/mysql,而configure脚本默认搜索/usr/local/lib,不指定路径会导致configure: error: MySQL libraries not found--with-openssl=/usr同理,确保链接到系统OpenSSL而非conda环境中的版本。

不这么做会怎样?
configure失败,提示MySQL libraries not found;或configure成功但编译时ld报错cannot find -lmysqlclient,最终Manager二进制文件缺失数据库连接能力,启动后日志疯狂刷ERROR: Database connection failed

4.4 初始化MySQL数据库与用户权限

# 登录MySQL mysql -u root -p # 创建Wazuh专用数据库与用户 CREATE DATABASE wazuh_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'wazuh'@'localhost' IDENTIFIED WITH mysql_native_password BY 'StrongPass123!'; GRANT ALL PRIVILEGES ON wazuh_db.* TO 'wazuh'@'localhost'; FLUSH PRIVILEGES; # 退出MySQL EXIT; # 执行Wazuh数据库初始化脚本 sudo /var/ossec/bin/wazuh-db -c /var/ossec/etc/ossec.conf

为什么这么做?
wazuh-db脚本会创建agent,alert,stats等核心表结构。必须在Manager启动前执行,否则Manager启动时检测到数据库为空,会尝试自动初始化但失败(因权限不足)。IDENTIFIED WITH mysql_native_password显式指定认证插件,避免MySQL 8.0+默认的caching_sha2_password导致连接拒绝。

不这么做会怎样?
Manager启动后,/var/ossec/logs/ossec.log持续输出ERROR: Database initialization failed,服务状态为activating后超时退出;手动执行wazuh-dbAccess denied,实为用户权限或认证插件问题。

4.5 手动签发SSL证书,绕过脚本自动生成陷阱

# 进入证书目录 cd /var/ossec/etc # 生成CA私钥(2048位,SHA256) sudo openssl genrsa -out ca.key 2048 # 生成CA证书(有效期10年) sudo openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/C=US/ST=California/L=San Francisco/O=Wazuh/CN=Wazuh CA" # 生成Manager私钥 sudo openssl genrsa -out manager.key 2048 # 生成Manager证书签名请求(CSR) sudo openssl req -new -key manager.key -out manager.csr -subj "/C=US/ST=California/L=San Francisco/O=Wazuh/CN=localhost" -addext "subjectAltName = DNS:localhost,IP:127.0.0.1" # 用CA签发Manager证书 sudo openssl x509 -req -in manager.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out manager.crt -days 3650 -sha256 -extfile <(printf "subjectAltName=DNS:localhost,IP:127.0.0.1") # 设置证书权限 sudo chown wazuh:wazuh manager.crt manager.key ca.crt sudo chmod 600 manager.crt manager.key ca.crt sudo chmod 644 ca.crt

为什么这么做?
官方wazuh-cert.sh脚本生成的证书常缺失subjectAltName扩展,导致现代浏览器(Chrome/Firefox)拒绝信任,Web UI访问时出现NET::ERR_CERT_INVALID。手动签发可精确控制-days-sha256subjectAltName,确保兼容性。

不这么做会怎样?
Web UI无法访问,浏览器显示证书错误;Agent注册时wazuh-agent-ctl -l返回SSL certificate verify failed,即使证书文件存在。

4.6 配置Manager核心参数,关闭危险默认项

# 编辑主配置文件 sudo nano /var/ossec/etc/ossec.conf # 关键修改项: # 1. 禁用自动更新检查(生产环境无需) <ossec_config> <rules> <rule_dir>/var/ossec/etc/rules</rule_dir> </rules> <syscheck> <frequency>3600</frequency> </syscheck> <!-- 添加以下段落 --> <global> <disable_updates>yes</disable_updates> </global> </ossec_config> # 2. 配置数据库连接(替换占位符) <database_output> <hostname>localhost</hostname> <port>3306</port> <username>wazuh</username> <password>StrongPass123!</password> <database>wazuh_db</database> <type>mysql</type> </database_output> # 3. 启用Active Response(需单独配置) <active-response> <disabled>no</disabled> <command>firewall-drop</command> <location>local</location> <level>7</level> </active-response>

为什么这么做?
<disable_updates>yes</disable_updates>防止Manager启动时尝试连接api.wazuh.com,避免DNS不稳定导致启动超时。数据库配置必须显式填写,否则Manager使用默认空值连接失败。Active Response默认禁用,需手动开启并指定firewall-drop命令,否则告警无法触发自动封禁。

不这么做会怎样?
Manager启动卡在Connecting to API...,60秒后超时失败;数据库配置缺失导致ERROR: Database connection failed;Active Response功能不可用,安全事件响应需手动执行。

4.7 创建并启用systemd服务单元

# 创建服务文件 sudo nano /etc/systemd/system/wazuh-manager.service # 内容如下: [Unit] Description=Wazuh Manager After=network.target mysql.service [Service] Type=simple User=wazuh Group=wazuh Environment="PATH=/var/ossec/venv/bin:/usr/local/bin:/usr/bin:/bin" Environment="PYTHONPATH=/var/ossec/framework/python/lib/python3.9/site-packages" ExecStart=/var/ossec/bin/wazuh-control start ExecStop=/var/ossec/bin/wazuh-control stop Restart=always RestartSec=10 LimitNOFILE=65536 LimitNPROC=4096 [Install] WantedBy=multi-user.target # 重载systemd配置 sudo systemctl daemon-reload # 启用并启动服务 sudo systemctl enable wazuh-manager sudo systemctl start wazuh-manager

为什么这么做?
Environment="PYTHONPATH=..."确保Manager进程加载正确的Python包路径,避免与系统Python冲突。LimitNOFILE=65536显式设置文件描述符上限,解决高并发连接问题。After=mysql.service保证MySQL启动后再启动Manager,避免数据库未就绪导致初始化失败。

不这么做会怎样?
Manager启动后立即退出,journalctl -u wazuh-manager显示ImportError: No module named 'wazuh';或服务状态为activenetstat -tuln | grep 1514无监听,实为文件描述符限制触发。

4.8 验证安装结果与基础连通性

# 检查服务状态 sudo systemctl status wazuh-manager # 正常应显示:active (running) # 检查端口监听 sudo netstat -tuln | grep -E "(1514|1515)" # 应看到:tcp 0 0 0.0.0.0:1514 0.0.0.0:* LISTEN 和 tcp 0 0 0.0.0.0:1515 0.0.0.0:* LISTEN # 检查日志是否有ERROR sudo tail -20 /var/ossec/logs/ossec.log # 正常结尾应为:Started (pid: XXXXX) # 测试本地Agent注册(模拟Agent连接) echo "Testing local connection..." curl -k -X GET "https://localhost:1515/agents?offset=0&limit=10" -H "Authorization: Bearer $(sudo /var/ossec/api/scripts/wazuh-auth.sh)" 2>/dev/null | jq '.data.totalItems' # 应返回数字(如0,表示暂无Agent)

为什么这么做?
curl测试直接验证API服务可用性,比单纯看端口监听更可靠——曾有案例端口

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询