Wazuh 主机入侵检测实战:文件完整性监控、SSH 爆破告警与漏洞检测给服务器加主动防护

关于服务器安全,站长圈里常见两种极端:一种是完全不设防,root 密码用 123456,SSH 开着 22 端口,等哪天被挂马了才发现;另一种是装了一堆工具,但从不看告警,日志堆积如山,真出事时翻不出来。这篇文章讲的是一种更务实的中间路线——用 Wazuh 给个人站的服务器做一套真正能用的主机入侵检测(HIDS)。

Wazuh 是一个开源的安全监控平台,脱胎于 OSSEC 项目,现在的能力已经远超单纯的"HIDS"。它做四件事:文件完整性监控(FIM)、日志收集与告警、安全配置评估(SCA)、漏洞检测。对个人站长来说,最直接的价值是:一旦服务器上有人动了系统文件、加了后门用户、装了可疑程序、或者某个服务开始狂刷错误日志,Wazuh 能在几分钟内告警到你的手机/邮箱,而不是等你几个月后偶然发现。

一、Wazuh 的架构:Manager / Agent / Indexer / Dashboard

理解架构才能装对。Wazuh 是经典的 Manager-Agent 模型:

  • Wazuh Agent:装在被监控的每台服务器上,采集本地信息(文件变化、日志、进程),上报给 Manager;
  • Wazuh Manager:接收所有 Agent 数据,用规则引擎做解码和匹配,命中规则就生成告警;
  • Wazuh Indexer:底层是 OpenSearch(Elasticsearch 的开源分支),负责存储和索引告警数据、支持全文检索;
  • Wazuh Dashboard:可视化界面,看告警、看文件完整性状态、看 SCA 评分、做检索。

个人站通常只有一两台服务器,Manager、Indexer、Dashboard 三个角色可以装在同一台机器上(单机模式),被监控的其他机器装 Agent 连过来。这就是所谓"all-in-one"部署,也是最省心的方式。

二、部署前必须先改的内核参数

这是新手最容易卡住的地方。Wazuh Indexer 底层是 OpenSearch,而 OpenSearch(以及 Elasticsearch)对 Linux 内核有一个硬性要求:vm.max_map_count 必须至少是 262144。默认值通常是 65530,不改的话 Indexer 启动时直接崩溃,日志里报 "max virtual memory areas vm.max_map_count [65530] is too low"。

先改内核参数:

echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p
sysctl vm.max_map_count

确认输出是 262144 再继续。这一步是 Wazuh 官方文档反复强调的,也是最常见的启动失败原因——如果 Indexer 起不来,第一时间回来查这个值。

三、单机 all-in-one 部署

Wazuh 4.x 提供了一键安装脚本,会自动装好 Manager、Indexer、Dashboard 和 Filebeat 的集成:

curl -sO https://packages.wazuh.com/4.9/wazuh-install.sh
bash wazuh-install.sh -a -i

-a 表示 all-in-one,-i 表示忽略硬件检查(个人 VPS 内存小的话会过不了硬件校验,用这个跳过,但要保证至少 4G 内存,否则 OpenSearch 会 OOM)。安装脚本跑完会输出 dashboard 的访问地址、admin 账号和随机生成的密码,一定把这串凭证保存下来,脚本不会帮你存第二遍。

安装完成后,各组件默认监听这些端口:1514/1515 是 Agent 通信与注册端口(Manager 用)、9200 是 Indexer、443 是 Dashboard。个人站安全上必须做的一件事是:Dashboard 的 443 不要直接暴露公网,用 Nginx 反代 + HTTPS + 访问白名单/基础认证收口。Dashboard 是管理后台,暴露公网等于把整个安全系统的查看和配置权限送人。同理 Indexer 的 9200 也只能内网访问。

四、给被监控服务器装 Agent

Manager 装好后,其他服务器装 Agent 连过来。在 Dashboard 里可以生成安装命令,也可以手工装:

curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --dearmor -o /usr/share/keyrings/wazuh.gpg
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" > /etc/apt/sources.list.d/wazuh.list
apt update
WAZUH_MANAGER="manager_ip" apt install -y wazuh-agent
systemctl daemon-reload
systemctl enable --now wazuh-agent

关键点在于安装时通过环境变量 WAZUH_MANAGER 指定 Manager 地址——装之前就要设好,否则装完还要手改配置文件 /var/ossec/etc/ossec.conf 里的 <address>。Agent 连接后会出现在 Dashboard 的 Agents 列表里,状态显示 Active 才算成功对接。

如果 Manager 和 Agent 之间有防火墙,记得 Manager 侧要放行 1514(UDP/TCP 通信)和 1515(Agent 注册,只需在注册时开放)。

五、四类最有用的监控能力怎么配

装好只是开始,真正要用起来的是这四个能力。下面按个人站最关心的顺序讲。

1. 文件完整性监控(FIM)

FIM 是 Wazuh 最核心的能力:监控指定目录下文件的新增、修改、删除、权限变更,并把变化上报。默认它会监控 /etc、/usr/bin、/usr/sbin、/bin、/sbin 这些关键系统目录——一旦有人往 /etc 里塞了个后门 cron、或者改了某个二进制文件,立刻告警。

站点目录也要加进去,但要注意:不要直接监控网站的内容目录,因为文章天天在更新,会把真正的入侵行为淹没在海量"正常变更"里。正确做法是监控站点的代码目录和配置目录(.php/.js 文件、nginx 配置),而把 uploads/附件上传目录排除在外(或单独监控其"新增可执行文件"这一类事件)。FIM 配置在 ossec.conf 的 <syscheck> 段,可以指定 directories、ignore、frequency(扫描频率)。

2. 日志收集与规则告警

Wazuh 内置了对常见服务日志的解码器——SSH、Nginx、Apache、MySQL 等,能自动识别日志格式并套用规则。最实用的是 SSH 暴力破解检测:短时间内同一 IP 大量 Failed password,会触发"多次认证失败"规则,直接生成高等级告警。这样你不需要盯着 auth.log 看,异常登录尝试会主动推给你。

Nginx 访问日志接进来之后,还能做针对性的 Web 攻击检测——扫描器特征、大量 404、异常 User-Agent、SQL 注入尝试等,都能通过规则匹配出来。日志里发现的异常访问 IP,比事后从服务器被挂马再倒查高效得多。

3. 安全配置评估(SCA)

SCA(Security Configuration Assessment)会用一份 CIS 基准策略去扫描服务器配置,给出一份合规评分和逐项建议:SSH 是否允许 root 登录、密码策略是否够强、有没有多余的服务在跑、内核参数是否安全等等。它对个人站长最大的价值不是拿高分,而是给你一份清单,告诉你有哪些明显可以收紧但一直没做的地方。按 SCA 报告逐条处理,服务器的安全基线就能上一个台阶。

4. 漏洞检测

Wazuh 会采集服务器上已安装软件包的版本,和漏洞库(CVE)比对,列出当前存在的已知漏洞。对个人站,重点关注那些装了但早就不更新的组件——很多入侵入口就是一个几个月没打补丁的旧版本 Web 应用。漏洞报告给了你一个明确的"该升级哪些包"的行动清单。

六、告警要能送到你眼前

监控系统最怕的是"装了没人看"。Wazuh 的告警默认落到 Dashboard 和 Indexer 里,但个人站长不会天天开后台看,所以一定要配主动推送。Wazuh 支持通过 Manager 侧的 ossec.conf 配合 integrations 把高等级告警转发到邮件、Slack、Telegram 等。

实用的策略是只推送高等级告警(level 10 以上):文件完整性重大变更、SSH 爆破成功、检测到 rootkit、新增特权用户这类。低等级的信息类告警留在 Dashboard 里按需查即可,否则天天被骚扰,久而久之就会把告警当噪音忽略——这恰恰是安全监控失效的开始。

七、五个必踩的坑

  1. 忘了改 vm.max_map_count——Indexer 起不来的头号原因,装之前先改好;
  2. 内存不够硬上——all-in-one 模式至少要 4G 内存,2G 的 VPS 跑 OpenSearch 会频繁 OOM。小机器建议 Manager 和 Indexer 分开部署,或者干脆用轻量的替代方案;
  3. Dashboard / 9200 暴露公网——安全工具自己先裸奔就讽刺了。Dashboard 用 Nginx 反代加白名单,Indexer 只在内网;
  4. 把网站内容目录全量纳入 FIM——每天文章更新产生大量正常变更,真正可疑的文件改动反而被淹没。只监控代码和配置目录;
  5. 装了不配推送、也从不看后台——监控系统等于没装。务必配高等级告警的主动推送,让异常主动找到你。

八、总结

对个人站长来说,服务器安全最大的风险不是被高级黑客定向攻击,而是长期无人值守——被扫描器找到旧漏洞、被暴力破解、被上传 webshell,往往几周甚至几个月后才发现,那时候站点可能已经被搜索引擎标记或影响到访客。

Wazuh 的价值就在于把"人盯"变成"机器盯":文件被改、有人爆破、装了有漏洞的旧软件,它主动告警。对一个有备份、有基本加固的站点,再加一层这样的主动监控,安全水位能提升一个档次。部署一次,之后主要是看告警和偶尔排查,投入产出比对个人站长来说很划算。

Last modification:October 13th, 2026 at 01:25 pm

Leave a Comment