billford/wazuh-custom-rules

GitHub: billford/wazuh-custom-rules

一套用于家庭实验室的 Wazuh 自定义规则、decoders 和集成脚本,解决 AI 主机端口告警噪音、UniFi 日志接入和移动端推送通知等实际运维痛点。

Stars: 0 | Forks: 0

# Wazuh 自定义规则 用于家庭实验室部署(一个 manager 和多个 Ubuntu agent,包括几个 AI/LLM 主机,以及通过 syslog 接入的 UniFi 网络协议栈)的自定义 Wazuh 检测规则、decoder、脚本和集成。 ## 目录 ### `rules/local_rules.xml` - **Rule 533 覆盖** — 原生规则会在 `netstat` 监听端口表发生*任何*更改时触发,这在运行 Ollama 的主机上会产生极大的噪音(它每次加载模型都会选取一个新的随机端口)。现将其降级覆盖至 level 3(仍会记录/索引,只是低于任何告警阈值),而不是默认的 level 7。 - **Rule 100002** — 一个自定义的异常监听器检测器。与 Rule 533(任何更改)不同,它只有在监听端口由*不在*该主机允许列表(参见下文的 `scripts/check_new_listeners.py`)中的进程占用时,才会(以 level 12)触发。它会忽略已知服务的常规端口变动,仅在出现真正意外的监听器时才发送告警。 **本仓库编码修复的一个重要陷阱**:Wazuh 规则中的 `` 无法可靠地搜索多行 `full_log`(由 `log_format: full_command` 生成)中嵌入换行符之后的内容。用于命令输出的内容匹配规则需要改用 `log_format: command`(将输出按行拆分为单独的事件),并且需要 `530` 才能在通用的 `ossec` decoder 的父规则下被完全评估 —— 参见 `agent_groups/ai-hosts/` 和 localfile 配置中的注释。 ### `scripts/check_new_listeners.py` 通过 `command` 类型的 Wazuh localfile 定期运行。将当前的监听 TCP/UDP socket(通过 `ss -Htulnp` 获取)与预期进程名称(`allowlists/*.txt`)的每主机允许列表以及本地状态缓存进行 diff 比对,因此它只会在未识别的监听器*首次*出现时发出告警(而不是在它仍然处于打开状态时的每个检查间隔都告警),并在该监听器消失且稍后出现新监听器时重新激活。 在每个 agent 上将其部署到 `/opt/wazuh-scripts/check_new_listeners.py`,此外还要部署 `/opt/wazuh-scripts/allowed_processes.txt`(特定于主机 —— 实际使用的文件请参见 `allowlists/`),以及一个可写的 `/var/lib/wazuh-scripts/` 目录用于存储其状态缓存。 **注意**:必须将其直接添加到每个 agent 的*本地* `ossec.conf` 中,而不是通过集中管理的共享 `agent.conf` 推送 —— Wazuh 默认会阻止通过 manager 共享配置传入的 `command`/`full_command` localfile 指令(提示 `Remote commands are not accepted from the manager`),作为防范被入侵的 manager 在 agent 上执行任意命令的安全措施。只有静态配置值(如以下的 rootcheck 调优)才能被集中推送。 ### `allowlists/` 用于 `check_new_listeners.py` 的每主机 `allowed_processes.txt`。请调整这些配置以匹配每台主机上实际预期监听的内容 —— 脚本的效果完全取决于此列表的准确性。 ### `agent_groups/ai-hosts/agent.conf` 为 `ai-hosts` Wazuh agent 组集中推送的配置。在 rootcheck 中禁用了 `check_trojans` 和 `check_ports`:这两者在现代 Ubuntu 上都非常不可靠(glibc 链接的 coreutils 会触发通用的遗留“木马”特征;正常的临时端口变动会触发“隐藏端口”检查)。`check_files`、`check_dev`、`check_sys`、`check_pids` 和 `check_if` 仍保持启用状态,因为它们能捕捉到真实且具体的问题。 ### `decoders/` 和 `rules/unifi_cef_*.xml` 用于以 CEF 格式记录日志的 UniFi/UniFi OS 设备(UDM、UNAS 等)的 decoder 和规则。与下方的 rsyslog 路由配置配合使用。 ### `rsyslog/` - `10-udp514.conf` — 在端口 514 上启用 `imudp` syslog 监听器。 - `20-udm.conf` — 将来自特定 UniFi 设备 IP 的 syslog 路由到专用文件(`/var/log/udm-syslog.log`)中,并在存在时提取 `CEF:0|...` payload。Wazuh 的 `logcollector` 会监控该文件。请修改 `if ($fromhost-ip == ...)` 条件以匹配您自己设备的 IP。 ### `integrations/custom-ntfy` 和 `custom-ntfy.py` Wazuh 自定义集成,用于将告警转发到 [ntfy.sh](https://ntfy.sh) 主题(自托管或公共实例)以接收推送通知。优先级随规则级别而缩放(≥12 → urgent,≥7 → high,否则为 default),并且每个通知都包含一个 `Click` 标头,可深度链接至 Wazuh 仪表板的 agent 视图。 在 `ossec.conf` 中进行配置: ``` custom-ntfy https://ntfy.sh/your-topic-here 7 json ``` 将 `custom-ntfy` + `custom-ntfy.py` 部署到 `/var/ossec/integrations/`(所有者 `root:wazuh`,权限模式 `750`)并重启 `wazuh-manager`。ntfy 推送本身不需要 API 凭证。 ## 许可证 MIT。详见 `LICENSE`。
标签:Beacon Object File, PB级数据处理, Wazuh, 安全运维, 应用安全, 逆向工具