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追踪, 免杀技术, 噪音抑制, 字段提取, 日志解码器, 暴力破解检测, 端口扫描检测, 红队行动, 网络基础设施, 网络安全监控, 速率限制, 防火墙日志, 驱动开发