Wazuh API
Wazuh API是一种开源的RESTful API,允许通过web浏览器、cURL之类的命令行工具或任何可以发出web请求的脚本或程序与Wazuh管理器进行交互。Wazuh Kibana应用程序严重依赖于此,
而Wazuh的目标是通过Wazuh Kibana应用程序适应对Wazuh基础设施的完整远程管理。使用API可以轻松执行日常操作,如添加代理、重启管理器或代理或查找syscheck详细信息。
参见官方文档:https://documentation.wazuh.com/3.13/user-manual/api/index.html
Wazuh API功能:
代理管理
经理控制及概述
Rootcheck控制和搜索
Syscheck控制和搜索
规则集信息
统计信息
HTTPS和用户身份验证
错误处理
查询远程配置
wazuh API基本使用
API在启动时启动。要控制或检查wazuh-api服务,请使用systemctl或service命令。
Systemd systems
# systemctl start/status/stop/restart wazuh-api
SysVinit systems
# service wazuh-api start/status/stop/restart
使用cURL命令发送一个请求,以确认一切都按预期工作:
curl -u foo:bar "https://localhost:55000?pretty"
- curl:用于通过HTTP和HTTPS发送请求和命令的命令行工具。
- -u foo:bar:验证API的用户名和密码。
- https://localhost:55000:如果您在管理器本身上运行命令,将使用的API URL。
- ?pretty:使JSON输出更易于读懂的参数。
基本概念
下面是一些与API请求和理解它们的响应有关的基本概念:
1、每个请求的基本URL是https://IP:55000/或http://IP:55000/,这取决于是否在API中启用和设置了SSL。
2、所有响应均为JSON格式,
- error:如果一切正常,则为0,否则为错误代码。
- data:请求的数据。只有当错误时候为0。
- message:错误描述。只有当错误时候不为0时(展示错误信息)。
注意:
- 包含数据集合的响应将返回最多500个元素。偏移量和限制参数可用于遍历大型集合。
- 所有响应都有一个HTTP状态码:2xx(成功)、4xx(客户端错误)、5xx(服务器错误)等等。
- 所有请求都接受pretty参数,以将JSON响应转换为更易于阅读的格式。
- API日志以/var/ossec /log /api.log的形式存储在管理器上。API日志每天轮换。循环存储在/var/ossec/log /api/<year>/<month>中,并使用gzip进行压缩。
- 如果在一段时间后没有收到任何响应,那么所有API请求将被中止。参数wait_for_complete可用于禁用此超时。这对于花费比预期更多时间的调用非常有用,例如PUT/agents/:agent_id/upgrade。见官方文档:使用在线存储库中的WPK文件升级代理。(链接如下):https://documentation.wazuh.com/3.13/user-manual/api/reference.html#upgrade-agent-using-online-repository
官方用例:
官方文档的测试用例(帮助了解wazuh API): https://documentation.wazuh.com/3.13/user-manual/api/getting-started.html#use-cases
使用查询过滤数据
基本用法
使用Wazuh API的查询可以进行预先过滤。使用q参数指定查询。查询有以下结构:
字段名称:要筛选的字段名称。如果使用了不正确的字段名,将会引发错误。
操作符:过滤操作符:
- =: equality.
- !=: not equality.
- <: smaller.
- >: bigger.
- ~: like as.
值:用于过滤过滤的值。
分隔符:连接多个“查询”的操作符: 用 q 标识
- ,: represents an OR.
- ;: represents an AND.
官方示例:
官方链接:
https://documentation.wazuh.com/3.13/user-manual/api/queries.html#examples
根据操作系统名称和操作系统版本过滤代理:
同一字段可以多次使用以获得更准确的结果。例如,比Ubuntu 12高但比Ubuntu 18低的过滤代理:
curl -u foo:bar -X GET "https://localhost:55000/agents?pretty&q=os.name=ubuntu;os.version>12;os.version<18&select=id,name,os.name,os.version,os.codename,os.major"
使用OR操作符的一个例子是过滤Ubuntu或CentOS代理:
curl -u foo:bar -X GET "https://localhost:55000/agents?pretty&q=os.name=ubuntu,os.name=centos+linux&select=id,name,os.name,os.version,os.codename,os.major"
- & :作为分隔符
- q :作为---标识,标识接下来的条件作为过滤条件
- select :表示查询后要展示的字段(个人理解)
- < > = != :作为条件符号---查询过滤的条件符号
- , :表示 或
- ; :表示 与
按日期过滤rootcheck事件
下面的示例展示了如何检查在指定的时间框架内生成的rootcheck事件:
curl -u foo:bar -X GET "https://localhost:55000/rootcheck/001?pretty&q=oldDay<3h25m&limit=2"
可以使用操作符>和<一起指定更精确的时间框架:
curl -u foo:bar -X GET "https://localhost:55000/rootcheck/001?pretty&q=oldDay<3h30m;oldDay>3h&limit=2"
- limit :返回的最大元素数。
- 3h10m :这个条件是限制什么 没搞懂
wazuh API配置
默认情况下,API将绑定到端口55000/tcp,并需要用户名和密码身份验证。默认的用户名和密码是“foo”和“bar”。
基本配置
配置脚本:
运行脚本/var/ossec/api/scripts/configure_api.sh来配置基本设置。
该脚本同时支持无人值守配置和有人值守配置。要设置无人值守配置的参数,请使用文件/var/ossec/api/configuration/preloaded_vars.conf。该文件将在运行脚本后删除写入其中的任何敏感信息。
配置文件
你可以在文件/var/ossec/api/configuration/config.js中配置某些API设置:
确保在编辑配置文件后重新启动wazuh-api服务:
- For Systemd:
# systemctl restart wazuh-api
- For SysV Init:
# service wazuh-api restart
基本身份认证
通常建议创建新的凭证来替换foo:bar。这可以很容易地做以下步骤,替换你想要的用户名为我的用户名:
cd /var/ossec/api/configuration/auth
node htpasswd -c user myUserName
运行上述命令后,在提示符处输入所需的密码。
不要忘记重新启动API来应用这些更改:
For Systemd:
# systemctl restart wazuh-api
For SysV Init:
# service wazuh-api restart
手动启用https支持
生成密钥和证书请求(需要Openssl包):
cd /var/ossec/api/configuration/ssl
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
默认情况下,每次运行服务器时都必须输入密钥的密码。如果您不想每次都输入密码,您可以通过运行以下命令删除密码:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
接下来生成您的自签名证书:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
并删除临时文件:
rm server.csr
rm server.key.org
补充
curl
CURL CURL是一个用于发送http/https请求和命令的命令行工具。它预装在许多Linux和Mac系统上,可以用于与API交互。一些例子:
active-response命令
在代理中运行AR命令
在指定代理上运行活动响应命令。
Request:
PUT
/active-response/:agent_id
Parameters:
Param | Type | Description |
agent_id | Number | Agent ID. |
command | String | Command running in the agent. If this value starts by !, then it refers to a script name instead of a command name. |
custom | Boolean | Whether the specified command is a custom command or not. |
arguments | String[] | Array with command arguments. |
Example Request:
curl -u foo:bar -k -X PUT -d '{"command":"restart-ossec0", "arguments": ["-", "null", "(from_the_server)", "(no_rule_id)"]}' -H 'Content-Type:application/json' "https://127.0.0.1:55000/active-response/001?pretty"
Example Response:utput
{
"error": 0,
"data": "Command sent."
}
python
您还可以使用Python与API交互,如下所示:
有关更完整的示例,请参见/var/ossec/api/examples/api-client.py.
PowerShell
https://documentation.wazuh.com/3.13/user-manual/api/examples.html#powershell