phastier/wazuh

GitHub: phastier/wazuh

为 MikroTik、UniFi、FortiGate 网络设备提供生产级 Wazuh 解码器和告警规则,填补官方空白并解决 Apple 环境的噪声淹没问题。

Stars: 5 | Forks: 0

# 网络基础设施的 Wazuh 自定义解码器和规则 用于 **Ubiquiti UniFi (UDM Pro Max)**、**MikroTik RouterOS 7.x** 和 **Fortinet FortiGate** 设备的自定义 Wazuh SIEM 集成,提供全面的日志解码、字段提取、噪声抑制和告警规则。 由 [Astier Consulting](https://www.astier-consulting.fr) 在 **Wazuh 4.14.3** 上开发并测试 —— 拥有 30 年数据中心管理经验的 Apple/IT 咨询公司。 ## 为什么创建这个项目? 当我们着手将网络基础设施集成到 Wazuh 时,我们发现: - 针对 UniFi 的 **BNC 社区规则**(`0999-bnc-unifi-rules.xml`)已过时,并且引用了不再存在的解码器名称 - **没有可用的解码器** 用于 MikroTik RouterOS 7.x 的 BSD syslog 格式 - UniFi CEF 事件(WiFi 客户端跟踪、管理员访问)**根本没有被解码** - Fortinet 内置解码器运行良好,但**如果不进行调优,mDNS/Bonjour 噪声会淹没真正的告警** —— 尤其是在 Apple 设备密集的环境中 - 关于 Wazuh PCRE2 限制的文档分散且不完整 本仓库提供了经过生产测试的、切实可用的解码器和规则,以及针对现实世界混合环境的噪声抑制调优。 ## 功能特性 ### MikroTik RouterOS 7.x 自定义解码器和规则 —— 之前不存在适用于 RouterOS 7.x BSD syslog 的可用方案。 - **防火墙**:DROP IPv4/IPv6、无效转发 (invalid forward)、INPUT 保护 - **DHCP**:服务器操作(discover、offer、request、ack、lease、removal) - **认证**:登录/注销及外部 IP 检测 - **关联规则**:端口扫描检测、暴力破解告警 - **MITRE ATT&CK**:T1078 (Valid Accounts)、T1133 (External Remote Services)、T1110 (Brute Force) ### Ubiquiti UniFi (UDM Pro Max) 自定义解码器和规则 —— 现有的 BNC 社区规则已损坏。 - **防火墙**:iptables 规则及完整字段提取(源/目的 IP、MAC、端口、标志位) - **WiFi 跟踪**:客户端连接/断开/漫游,包含丰富字段(设备别名、AP 名称、SSID、频段、RSSI、持续时间) - **Protect**:智能检测(人/车辆/动物/车牌)、动态侦测、防拆、徘徊、设备断开、门磁传感器开关、入侵关联 - **DHCP**:地址池耗尽告警、租约跟踪 - **管理员访问**:管理界面访问及 MITRE 映射 - **有线跟踪**:交换机上的客户端连接/断开,包含端口和链路速度详情 - **设备管理**:固件更新告警及版本跟踪 - **UPS 监控**:电池供电和 AC 电源恢复事件(级别 10 关键告警) - **噪声抑制**:ubios-udapi-server、DPI 统计、系统事件在级别 0 被过滤 ### Fortinet FortiGate 在 Wazuh 内置 FortiGate 解码器(运行良好)基础上的补充规则。重点在于**噪声抑制和 VPN 监控** —— 在有 Apple 设备的环境中,Bonjour/mDNS 每分钟会产生数千条拒绝日志,掩盖真正的安全事件。 - **mDNS/LLMNR 抑制**:过滤掉 Apple/HomeKit/Bonjour 环境中典型的大量 UDP/5353 和 UDP/5355 拒绝日志 - **UniFi 发现抑制**:过滤 UDP/10001 广播噪声 - **VPN IPsec 监控**:对站点间隧道中被拒绝的流量发出告警(路由问题、未授权访问尝试) - **系统事件**:性能统计、AV 数据库更新、磁盘日志轮转 - **关联**:重复的 VPN 拒绝触发更高级别的告警以供调查 ## 架构 ``` MikroTik CCR2004 ──────┐ │ UniFi UDM Pro Max ──────┼──► Syslog UDP/514 ──► Wazuh Server (rsyslog → analysisd) │ Fortinet FortiGate ─────┘ ``` MikroTik 和 UniFi 发送 BSD syslog 格式。FortiGate 使用其原生的 key=value syslog 格式。Wazuh 的预解码器在自定义解码器处理消息负载之前提取时间戳和主机名。 ## 关键技术经验 这些是构建这些集成时获得的来之不易的经验: 1. **Wazuh PCRE2:每个父级只能有一个子解码器** —— 当多个带有 `type="pcre2"` 的 `` 子级共享同一个 `` 时,只有第一个会匹配。解决方案:为每种日志类型创建独立的父/子对。 2. **`[^\]]+` 在 Wazuh PCRE2 中失效** —— 请使用显式的字符类,例如用 `[a-f0-9:]+` 来匹配 IPv6 地址。 3. **BSD syslog 预解码器消耗了主机名** —— 你的解码器 `` 绝不能包含设备主机名(例如 `MikroTik`),因为它已被预解码器提取。 4. **UniFi CEF `program_name` 提取** —— 当 UDM 主机名包含连字符(`UDM-Pro-Max-AC`)时,预解码器提取 `program_name: CEF`。解码器必须使用 `^CEF` 来匹配。 5. **规则中的 `` vs ``** —— `action` 是一个静态的已解码字段。使用 `` 搜索原始日志,或使用 `` 配合特定解码器名称进行定位。 6. **规则层级很重要** —— 为子规则使用 ``。如果没有它,同级别的全量匹配规则可能会在特定规则之前匹配。 7. **所有 prematch 必须用 `^` 锚定** —— 通用的 prematch 如 `lease ` 可能会匹配到意外内容(例如 "Please" 包含 "lease")。始终用 `^` 锚定以仅在已解码消息的开头匹配。 8. **Apple 环境中的 Fortinet 噪声** —— 单个 Apple TV 或 HomePod 在 FortiGate 上每分钟可产生 2000+ 条 mDNS 拒绝日志。在 Wazuh 中使用级别 0 规则抑制噪声,同时保留存档以供取证。 ## 安装 ### 1. 复制解码器 ``` cp decoders/mikrotik_custom.xml /var/ossec/etc/decoders/ cp decoders/ubiquiti.xml /var/ossec/etc/decoders/ # 仅当您使用 UniFi Protect (CEF 格式) 时: cp decoders/unifi.xml /var/ossec/etc/decoders/ ``` ### 2. 复制规则 ``` cp rules/mikrotik_rules.xml /var/ossec/etc/rules/ cp rules/unifi_rules.xml /var/ossec/etc/rules/ # 仅当您拥有 FortiGate 时: cp rules/fortigate_rules.xml /var/ossec/etc/rules/ ``` ### 3. 设置权限 ``` chown wazuh:wazuh /var/ossec/etc/decoders/mikrotik_custom.xml chown wazuh:wazuh /var/ossec/etc/decoders/ubiquiti.xml chown wazuh:wazuh /var/ossec/etc/rules/*.xml chmod 660 /var/ossec/etc/decoders/*.xml /var/ossec/etc/rules/*.xml ``` ### 4. 禁用冲突的 BNC 规则(如果存在) 添加到 `/var/ossec/etc/ossec.conf` 中的 `` 内: ``` 0999-bnc-unifi-rules.xml ``` ### 5. 验证并重启 ``` /var/ossec/bin/wazuh-analysisd -t systemctl restart wazuh-manager ``` ## 设备配置 ### MikroTik RouterOS 7.x ``` /system logging action add name=wazuh target=remote remote= remote-port=514 src-address= bsd-syslog=yes /system logging add action=wazuh topics=firewall /system logging add action=wazuh topics=dhcp /system logging add action=wazuh topics=system ``` ### UniFi UDM (通过 Network UI) 导航至 **Settings → System → Activity Logging (Syslog)**: - 选择 **SIEM Server** - Server Address:`` - Port:`514` - Contents:Gateway、Access Points、Switches、Admin Activity、Clients、Security Detections、Triggers、Devices、Updates、VPN、Firewall Default Policy ### Fortinet FortiGate FortiGate 应配置为向您的 Wazuh 服务器发送 syslog。不需要特殊格式 —— Wazuh 的内置解码器处理 FortiGate 的原生 key=value 格式。我们的自定义规则在此基础上进行噪声抑制和增强告警。 ``` config log syslogd setting set status enable set server "" set port 514 set facility local7 set source-ip "" end ``` ### Wazuh Server (rsyslog) 创建 `/etc/rsyslog.d/10-mikrotik.conf`: ``` $template MikroTikFormat,"/var/ossec/logs/MikroTik/%HOSTNAME%/messages-%$YEAR%-%$MONTH%-%$DAY%.log" if $fromhost-ip == '' then ?MikroTikFormat & stop ``` ## 规则 ID | 范围 | 设备 | 类别 | |-------|--------|----------| | 100200-100211 | MikroTik | 防火墙(DROP、无效、扫描检测)| | 100220-100223 | MikroTik | 认证(登录、暴力破解)| | 100230-100233 | MikroTik | DHCP 操作 | | 100240 | MikroTik | 系统全量匹配 | | 100300-100302 | UniFi | 防火墙(基础、DROP、允许抑制)| | 100310-100315 | UniFi | Protect(智能检测、动态侦测、入侵)| | 100320-100321 | UniFi | DHCP(事件、地址池耗尽)| | 100330-100331 | UniFi | 噪声抑制(服务、DPI)| | 100340-100349 | UniFi | WiFi、有线、网络 CEF、设备更新、UPS 电源 | | 100350 | UniFi | 系统抑制 | | 100400-100401 | FortiGate | 噪声抑制(mDNS、UniFi 发现)| | 100410-100411 | FortiGate | VPN IPsec(拒绝流量、VPN 事件)| | 100420-100422 | FortiGate | 系统(性能统计、磁盘轮转、AV 更新)| | 100430 | FortiGate | 关联(重复的 VPN 拒绝)| ## 解码字段 ### MikroTik 防火墙 | 字段 | 内容 | 示例 | |-------|---------|---------| | `srcip` | 源 IP | `192.168.1.100` | | `dstip` | 目的 IP | `8.8.8.8` | | `srcport` | 源端口 | `54321` | | `dstport` | 目的端口 | `443` | | `protocol` | 协议 | `TCP` / `UDP` | | `action` | 防火墙链 | `DROP` | ### UniFi WiFi(丰富化) | 字段 | 内容 | 示例 | |-------|---------|---------| | `srcip` | 客户端 IP | `192.168.1.100` | | `srcmac` | 客户端 MAC | `aa:bb:cc:dd:ee:01` | | `dstuser` | 设备别名 | `iPhone de Jean` | | `extra_data` | 接入点 | `AP-Bureau-RDC` | | `system_name` | SSID | `MonSSID` | | `protocol` | WiFi 频段 | `6e` | | `data` | RSSI 或持续时间 | `-41` / `2m` | | `action` | 网络名称 | `LAN` | ### FortiGate(内置解码器字段) Wazuh 的内置 FortiGate 解码器提取所有原生字段:`srcip`、`dstip`、`srcport`、`dstport`、`action`、`policyid`、`service`、`srcintf`、`dstintf`、`devname`、`logid`、`level` 等。我们的自定义规则通过增强描述添加上下文,以显示 VPN 隧道名称和流量模式。 ## UniFi CEF 事件 ID 这些是我们已识别并映射的 UniFi Network 和 Protect CEF 事件 ID: | ID | 事件 | 来源 | |----|-------|--------| | 215 | UPS 使用电池供电 | Network | | 216 | UPS AC 电源恢复 | Network | | 400 | WiFi 客户端已连接 | Network | | 401 | WiFi 客户端已断开 | Network | | 402 | WiFi 客户端已漫游 | Network | | 403 | 有线客户端已连接 | Network | | 404 | 有线客户端已断开 | Network | | 510 | 设备已更新 | Network | | 544 | 管理员已访问 | Network | | 2008 | 访问 | Protect | | 2108 | 更新 | Protect | | 2150 | 设备已断开 | Protect | | 2161 | 智能检测区域 / 防拆 / 徘徊 | Protect | | 2201 | 传感器动态侦测 | Protect | | 2202 | 传感器已打开 | Protect | | 2203 | 传感器已关闭 | Protect | 如果您发现了额外的事件 ID,欢迎贡献! ## 测试 使用 `wazuh-logtest` 验证解码器和规则: ``` # MikroTik DROP echo 'Feb 25 10:30:00 MikroTik DROP : IPv4 FORWARD IN:ether1 OUT:bridge1 SRC:203.0.113.1 DST:192.168.1.100 PROTO:TCP SPT:12345 DPT:443 (ACK PSH)' | /var/ossec/bin/wazuh-logtest # UniFi WiFi Connected echo 'Feb 25 11:04:19 UDM-Pro-Max-AC CEF:0|Ubiquiti|UniFi Network|10.1.85|400|WiFi Client Connected|1|UNIFIcategory=Client Devices UNIFIconnectedToDeviceName=AP-Bureau UNIFIclientAlias=iPhone UNIFIclientIp=192.168.1.100 UNIFIclientMac=aa:bb:cc:dd:ee:01 UNIFIwifiName=MySSID UNIFIwifiBand=6e UNIFIWiFiRssi=-45 UNIFInetworkName=LAN' | /var/ossec/bin/wazuh-logtest # FortiGate mDNS (应被抑制 - level 0) echo 'date=2026-02-25 time=13:00:00 devname="fortigate" devid="FGT123" logid="0001000014" type="traffic" subtype="local" level="notice" srcip=fe80::1 dstip=ff02::fb action="deny" service="udp/5353"' | /var/ossec/bin/wazuh-logtest ``` ## 测试环境 - Wazuh 4.14.3(3 节点 VM 集群:server、dashboard、indexer) - MikroTik CCR2004-1G-12S+2XS 运行 RouterOS 7.x - Ubiquiti UDM Pro Max 运行 UniFi Network 10.1.85 - Fortinet FortiGate 60E 运行 FortiOS 7.x - Ubuntu 24.04 / Proxmox - Syslog 传输:UDP/514 via rsyslog ## 路线图 - [ ] JAMF Protect & Security Cloud 集成 - [ ] Fortinet VPN 隧道状态监控(up/down) - [ ] UniFi 威胁/IDS 事件解码 - [ ] OpenSearch/Kib 仪表板模板 ## 贡献 欢迎 PR!如果您有针对其他设备的解码器/规则,欢迎贡献。 ## 许可证 MIT License —— 自由使用,请注明来源。 ## 致谢 由 [Astier Consulting](https://www.astier-consulting.fr) 在 Claude (Anthropic) 的协助下构建。
标签:DHCP监控, Fortinet FortiGate, MikroTik RouterOS, Ubiquiti UniFi, UDM Pro Max, Wazuh, WiFi追踪, 免杀技术, 噪音抑制, 字段提取, 日志解码器, 暴力破解检测, 端口扫描检测, 红队行动, 网络基础设施, 网络安全监控, 速率限制, 防火墙日志, 驱动开发