上一篇只是安装好了 Wazuh 主动式的端点安全解决方案,现在只有一个端点 无法连接,也无法收集信息,自然是不完整的,需要再次准备一台试验机,依旧选择 ubuntu24.4 ,同系统,同网段,应该很好理解为什么吧

接下里就是一些简单的准备工作了

先确保是互通的,Agent 必须要连接上 Manager 才能工作,主要是走两个核心端口

1514/tcp Agent向 Manager 上报数据 例如事件/日志

1515/tcp Agent 注册,申请或者 Client.keys

再战EDR-番外篇or剧场版?

测试端口

再战EDR-番外篇or剧场版?

为了防止软件包被人篡改,所以都会需要密钥校对,先把公钥导入到本地,才能让 APT正常验证

sudo mkdir -p /usr/share/keyrings

curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo gpg --dearmor -o /usr/share/keyrings/wazuh.gpg
再战EDR-番外篇or剧场版?

检查一下是否有公钥了

再战EDR-番外篇or剧场版?

告诉 APT 去哪里下载软件包,然后更新一下就行

再战EDR-番外篇or剧场版?

这里带上了一个 WAZUH 的变量,这是让 Agent 帮你自动填写 IP ,就不需要后续在去手动修改配置文件了

再战EDR-番外篇or剧场版?

检查一下 IP 是否被正常写入 没有写入也没有关系,写进去就好

#检查 IP 是否正常传递
sudo cat /var/ossec/etc/ossec.conf | grep -A 2 "<server>"

#没有的话 重新写入替换一下
sudo sed -i 's/<address>MANAGER_IP<\/address>/<address>172.16.11.35<\/address>/' /var/ossec/etc/ossec.conf
再战EDR-番外篇or剧场版?

启动 Agent 服务

再战EDR-番外篇or剧场版?

这里有个问题 因为我是在 PVE 上跑的虚拟机 两台虚拟机的名字都是一样的,导致 Agent 要去注册的时候,重名导致失败,一定要记得改一下名字,然后在重新注册一下就可以了

重启服务,触发重新注册

sudo systemctl restart wazuh-agent

sudo grep "wazuh-agentd" /var/ossec/logs/ossec.log | tail -10
再战EDR-番外篇or剧场版?

登录上去看看 可以发现在多了一台活跃主机,点击进去

再战EDR-番外篇or剧场版?

可以看到 IP 已经识别 并且系统ubuntu 版本等信息都可以正确的识别到了

再战EDR-番外篇or剧场版?

那么就从上篇到这篇 我们已经完整的尝试了全流程,踩的最大的坑是什么,是主机名,主机名不能一致,一致会导致无法注册,从而报错

我准备测试一下 ,结果一测试没有任何的警告信息,开始查看问题所在

嚯嚯嚯,说实话还不如不看 全是问题 但是没有办法 自己的孩子自己疼 还是要修好的

修复开始

首先是我在 客户端创建了一个文件夹 ,但 Events 和 Dashboard 完全空白,没有任何告警

第一步:确认 FIM 检测是否真的在工作

在 Agent(172.16.11.88)上:

# 查看 syscheckd 的运行日志
sudo grep -i "syscheck\|fim" /var/ossec/logs/ossec.log | tail -20

发现:FIM 扫描正常运行,扫描完成后显示 FIM sync module started,说明检测本身没问题。

第二步:在 Manager 上检查 alerts.log

SSH 到 Manager(172.16.11.35):

ssh yxwa@172.16.11.35
sudo tail -100 /var/ossec/logs/alerts/alerts.log | grep -A5 "syscheck\|554\|550"

发现:alerts.log 里只有 sudo 审计告警(rule 5402),完全没有 syscheck 告警。说明 FIM 告警没有产生,或产生了但没被记录。

第三步:启用 realtime监控排除周期扫描问

原因:Wazuh 4.x 的 FIM 默认12小时扫描一次,且重启后的初始扫描只更新数据库,不产生告警。需要启用 realtime 模式,让文件变更立即触发告警。

在 Agent 上:

# 查看当前 FIM 配置(确认原始内容)
sudo grep -n "directories" /var/ossec/etc/ossec.conf

# 修改:给 /etc 目录加上 realtime="yes",其他目录单独一行保留
sudo sed -i '109s|<directories>/etc,/usr/bin,/usr/sbin</directories>|<directories realtime="yes">/etc</directories>\n    <directories>/usr/bin,/usr/sbin</directories>|' /var/ossec/etc/ossec.conf

# 验证修改
sudo grep -A2 "realtime" /var/ossec/etc/ossec.conf

# 重启 Agent
sudo systemctl restart wazuh-agent

# 确认 realtime 已启动
sudo grep "realtime" /var/ossec/logs/ossec.log
# 应看到:Directory set for real time monitoring: '/etc'

第四步:验证 realtime 后仍无告警 → 检查规则配置

在 Agent 上创建测试文件:

sudo touch /etc/realtime-test.txt

在 Manager 上等待后检查 alerts.log,发现:

  • sudo 执行记录出现了(说明 Agent 在发数据)
  • FIM 告警依然没有

检查 FIM 规则是否被禁用:

# 在 Manager 上查找 FIM 规则文件
sudo find /var/ossec -name "0015-ossec_rules.xml" | head -5

# 查看 FIM 规则的告警级别
sudo grep -A8 "rule id=\"55[0-4]" /var/ossec/ruleset/rules/0015-ossec_rules.xml | head -40

发现

  • rule 554(文件新增):level 5
  • rule 550(文件修改):level 7
  • rule 553(文件删除):level 7

同时检查 Manager 的最低告警级别:

sudo grep "log_alert_level" /var/ossec/etc/ossec.conf
# 输出:<log_alert_level>3</log_alert_level>

结论:规则级别都≥ 3,不是被过滤掉了。

第五步:确认 archives.log 也为空→ 找到真正断点

# archives.log 记录所有事件(包括低于告警级别的)
sudo tail -200 /var/ossec/logs/archives/archives.log | grep syscheck

发现:archives.log 里完全没有 syscheck 记录。这说明 FIM 数据根本没有进入 Manager 的事件处理管道。

但 realtime 测试(创建文件后)在 alerts.log 里确实出现了 FIM 告警:

sudo tail -50 /var/ossec/logs/alerts/alerts.log | grep -A10 "realtime-test"
# 输出:Rule: 554 (level 5) -> 'File added to the system.' Mode: realtime

这证明 FIM 告警能写进 alerts.log,但没有出现在 Dashboard。问题在 alerts.log → OpenSearch 这一段。

第六步:检查 OpenSearch 索引 → 发现根本原因

# 查看 OpenSearch 里有哪些索引
sudo curl -XGET "https://localhost:9200/_cat/indices/wazuh-alerts*?v" -u admin:admin -k

发现:只有表头,没有任何 wazuh-alerts-* 索引。告警写进了文件,但没有任何组件把它推送到 OpenSearch。

第七步:修复 indexer-connector 连接

检查 Manager 日志:

sudo grep -i "indexer" /var/ossec/logs/ossec.log | tail -20
# 输出:WARNING: Failed to sync agent '001': No available server

查看 indexer 配置:

sudo sed -n '/<indexer>/,/<\/indexer>/p' /var/ossec/etc/ossec.conf

发现两个问题:

  1. 地址是 https://0.0.0.0:9200(监听地址,不是连接目标)
  2. SSL 证书路径 /etc/filebeat/certs/ 不存在

修复步骤:

# 备份配置
sudo cp /var/ossec/etc/ossec.conf /var/ossec/etc/ossec.conf.backup

# 检查 indexer 证书的SAN,确认正确 IP
sudo openssl x509 -in /etc/wazuh-indexer/certs/indexer.pem -text -noout | grep -A3 "Subject Alternative"
# 输出:IP Address:172.16.11.35

# 测试用正确 IP 连接
sudo curl -XGET "https://172.16.11.35:9200" \
  --cert /etc/wazuh-indexer/certs/admin.pem \
  --key /etc/wazuh-indexer/certs/admin-key.pem \
  --cacert /etc/wazuh-indexer/certs/root-ca.pem
# 输出 OpenSearch 版本信息 = 连接成功

# 复制证书到 Manager 可读位置
sudo mkdir -p /var/ossec/etc/indexer-certs
sudo cp /etc/wazuh-indexer/certs/root-ca.pem /var/ossec/etc/indexer-certs/
sudo cp /etc/wazuh-indexer/certs/admin.pem /var/ossec/etc/indexer-certs/
sudo cp /etc/wazuh-indexer/certs/admin-key.pem /var/ossec/etc/indexer-certs/
sudo chown -R wazuh:wazuh /var/ossec/etc/indexer-certs/

# 修复 ossec.conf:改正确 IP
sudo sed -i 's|https://0.0.0.0:9200|https://172.16.11.35:9200|' /var/ossec/etc/ossec.conf

# 替换 SSL 证书路径(用 python3 处理多行块)
sudo python3 -c "
import re
with open('/var/ossec/etc/ossec.conf', 'r') as f:
    content = f.read()
content = re.sub(r'\s*<ssl>.*?</ssl>', '''<ssl>
      <certificate_authorities>
        <ca>/var/ossec/etc/indexer-certs/root-ca.pem</ca>
      </certificate_authorities>
      <certificate>/var/ossec/etc/indexer-certs/admin.pem</certificate>
      <key>/var/ossec/etc/indexer-certs/admin-key.pem</key>
    </ssl>''', content, flags=re.DOTALL)
with open('/var/ossec/etc/ossec.conf', 'w') as f:
    f.write(content)
print('Done')
"

# 写入 OpenSearch 认证凭据到 Manager keystore
sudo /var/ossec/bin/wazuh-keystore -f indexer -k username -v admin
sudo /var/ossec/bin/wazuh-keystore -f indexer -k password -v admin

# 重启 Manager
sudo systemctl restart wazuh-manager

# 等待后验证(应看到 initialized successfully)
sleep 20
sudo grep -i "indexer" /var/ossec/logs/ossec.log | tail -10

成功标志IndexerConnector initialized successfully for index: wazuh-states-*

第八步:发现 Filebeat 缺失

indexer-connector 连接成功,但查询 wazuh-alerts 索引仍然为空:

sudo curl -s "https://172.16.11.35:9200/_cat/indices/wazuh-alerts*?v&h=index,health,docs.count" \
  --cert /var/ossec/etc/indexer-certs/admin.pem \
  --key /var/ossec/etc/indexer-certs/admin-key.pem \
  --cacert /var/ossec/etc/indexer-certs/root-ca.pem
# 只有表头,无索引

检查 Filebeat:

sudo systemctl status filebeat
# Unit filebeat.service could not be found.

dpkg -l | grep filebeat
# 空,未安装

根本原因确认:Filebeat 从未安装过。 它是把 alerts.json 推送到 OpenSearch 的唯一管道,apt-get install wazuh-manager 不会自动安装它。

第九步:安装 Filebeat

注意:必须用 7.x,Filebeat 8.x 与 OpenSearch 7.10.2 不兼容(API 版本检查失败)。

# 添加 Elastic apt源
curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/elasticsearch-keyring.gpg --import
sudo chmod 644 /usr/share/keyrings/elasticsearch-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
sudo apt-get update

# 安装 7.10.2(Wazuh 的apt 源里有这个版本会优先使用)
sudo apt-get install -y filebeat=7.10.2

第十步:配置 Filebeat

# 创建证书目录
sudo mkdir -p /etc/filebeat/certs
sudo cp /etc/wazuh-indexer/certs/root-ca.pem /etc/filebeat/certs/
sudo cp /etc/wazuh-indexer/certs/admin.pem /etc/filebeat/certs/
sudo cp /etc/wazuh-indexer/certs/admin-key.pem /etc/filebeat/certs/

# 下载 Wazuh 索引模板
sudo curl -so /etc/filebeat/wazuh-template.json https://raw.githubusercontent.com/wazuh/wazuh/v4.14.6/extensions/elasticsearch/7.x/wazuh-template.json

# 安装 Wazuh Filebeat 模块
sudo curl -s https://packages.wazuh.com/4.x/filebeat/wazuh-filebeat-0.4.tar.gz | sudo tar -xvz -C /usr/share/filebeat/module

# 写入配置文件
sudo tee /etc/filebeat/filebeat.yml > /dev/null << 'EOF'
output.elasticsearch:
  hosts: ["https://172.16.11.35:9200"]
  protocol: https
  username: "admin"
  password: "admin"
  ssl.certificate_authorities: ["/etc/filebeat/certs/root-ca.pem"]
  ssl.certificate: "/etc/filebeat/certs/admin.pem"
  ssl.key: "/etc/filebeat/certs/admin-key.pem"

filebeat.modules:
  - module: wazuh
    alerts:
      enabled: true
    archives:
      enabled: false

setup.template.json.enabled: true
setup.template.json.path: '/etc/filebeat/wazuh-template.json'
setup.template.json.name: 'wazuh'
setup.template.overwrite: true
setup.ilm.enabled: false

logging.level: info
logging.to_files: true
logging.files:
  path: /var/log/filebeat
  name: filebeat
  keepfiles: 7
  permissions: 0644
EOF

# 测试配置和连接
sudo filebeat test config# 应输出:Config OK
sudo filebeat test output# 应输出:talk to server... OK / version: 7.10.2

# 启动 Filebeat
sudo systemctl enable filebeat
sudo systemctl start filebeat
sudo systemctl status filebeat

第十一步:验证

# 确认 wazuh-alerts 索引已创建
sudo curl -s "https://172.16.11.35:9200/_cat/indices/wazuh-alerts*?v&h=index,health,docs.count" \
  --cert /etc/filebeat/certs/admin.pem \
  --key /etc/filebeat/certs/admin-key.pem \
  --cacert /etc/filebeat/certs/root-ca.pem
# 应看到:wazuh-alerts-4.x-2026.07.24  green  400+

在 Agent 上创建测试文件:

ssh yxwa@172.16.11.88
sudo touch /etc/realtime-final-$(date +%s).txt

10秒后在 Dashboard Threat Hunting 搜索 rule.groups:syscheck,FIM 告警正常显示。


...........................