API Weblock.¶
API обеспечивает интеграцию «Weblock.» с другими системами. Спецификация API «Weblock.» доступна в автодокументации. Здесь приведена спецификация отдельных эндпоинтов, которые упоминаются в данной документации.
Server URL (базовый путь): http://waf.weblock.ru:1080/
Для работы с API потребуется AccessToken, который генерируется эндпоинтом oidc/oauth2/token либо в Личном кабинете (подробнее Уведомления в Личном кабинете).
Примечание
Все значения типа string имеют максимальную длину 250 символов.
Эндпоинты oauth2¶
Параметр заголовка Content-Type: application/x-www-form-urlencoded
Получение AccessToken - token¶
Генерация токена доступа.
- POST: oidc/oauth2/token
Параметр тела запроса |
Тип данных |
Обязательность |
Описание |
---|---|---|---|
grant_type |
string |
* |
Тип доступа |
client_id |
string |
* |
Идентификатор пользователя |
username |
string |
* |
Имя пользователя |
password |
string |
* |
Пароль пользователя |
client_secret |
string |
* |
Одноразовый пароль пользователя |
Пример тела запроса:
{
"grant_type": "password",
"client_id": "waf-oidc",
"username": "admin",
"password": "Waf12345!",
"client_secret": "secret"
}
Параметр ответа |
Тип данных |
Обязательность |
Описание |
---|---|---|---|
access_token |
string |
* |
Токен доступа |
200 OK |
Пример ответа: |
400 Error |
Максимальная длина 250 символов |
403 Error |
Доступ запрещен |
404 Error |
Значения параметров не соответствуют схеме |
409 Error |
Несовместимость запросов |
500 Error |
Сервер не может обработать запрос |
Эндпоинты clusters¶
Параметры заголовка:
Authorization: Bearer $AccessToken
Content-Type: application/json
Пример.
--header 'authorization: Bearer eyJraWQiOiIwODM4MTAzZC1hZmM4LTRi'
Конец примера.
$AccessToken
генерируется эндпоинтом oidc/oauth2/token «Получение AccessToken».
Чтение данных кластеров - clusters¶
Чтение данных всех кластеров, в том числе идентификаторов кластеров и серверов. Чтение данных кластеров для заданного тенанта, либо для всех тенантов.
- GET: controller/v1/clusters
Query-параметр запроса |
Тип данных |
Обязательность |
Описание |
---|---|---|---|
tenantId |
string |
- |
Идентификатор тенанта |
Пример.
controller/v1/clusters
или
controller/v1/clusters?tenantId=TENANT_A
где TENANT_A
- ID тенанта.
Конец примера.
Параметр ответа 200 OK |
Тип данных |
Обязательность |
Описание |
---|---|---|---|
id |
integer |
- |
Идентификатор кластера |
clusterName |
string |
- |
Имя кластера |
passiveMode |
boolean |
- |
Флаг активности |
tenantId |
string |
- |
Идентификатор тенента |
servers |
object[] |
- |
Данные серверов |
modsecurityConfigurations |
object[] |
- |
Конфигурация правил |
allowedKeys |
string[] |
- |
Ключи доступа |
licenceId |
integer |
- |
Идентификатор лицензии |
agentApplied |
boolean |
- |
Флаг агента |
Пример ответа 200 OK:
[ {
"id": 0,
"clusterName": "string",
"passiveMode": true,
"tenantId": "string",
"servers": [ {
"serverIndex": 1,
"serverName": "server name",
"modsec": {
"passiveMode": true,
"skipModSecurity": true,
"configs": [ {
"id": 0,
"name": "string"
} ]
},
"antiDdos": {
"mode": "DISABLED",
"initialScore": 0,
"cost": 0,
"postCost": 0,
"patchCost": 0,
"putCost": 0,
"deleteCost": 0,
"otherCost": 0,
"errorCost": 0
},
"settings": {
"logLevel": "INFO",
"logBanlimBlockedRequests": true
},
"failToBanConfigurations": [ {
"id": 1,
"key": "string",
"rejectCount": 10,
"rejectCountStrict": 5,
"banTime": 0,
"antiDdosScoreExceedCountStrict": 0,
"antiDdosScoreExceedCountBan": 0,
"antiDdosNewCookieStrict": 0,
"antiDdosNewCookieBan": 0
} ],
"requestsLimitConfigurations": [ {
"id": 0,
"key": "string",
"rate": 0,
"burst": 0,
"delay": 0,
"dryRun": true,
"statusCode": 0
} ],
"locations": [ {
"locationIndex": 0,
"path": "string",
"captcha": true,
"proxyPass": true,
"captchaValidator": true,
"antiDdos": {
"cost": 0,
"postCost": 0,
"patchCost": 0,
"putCost": 0,
"deleteCost": 0,
"otherCost": 0,
"errorCost": 0
},
"modsec": {
"skipModSecurity": true,
"passiveMode": true
},
"requestsLimitConfigurations": [ {
"id": 0,
"key": "string",
"rate": 0,
"burst": 0,
"delay": 0,
"dryRun": true,
"statusCode": 0
} ]
} ]
} ],
"modsecurityConfigurations": [ {
"id": 0,
"name": "string"
} ],
"allowedKeys": ["string"],
"licenceId": 0,
"agentApplied": true
} ]
400 Error |
Максимальная длина 250 символов |
403 Error |
Доступ запрещен |
404 Error |
Значения параметров не соответствуют схеме |
409 Error |
Несовместимость запросов |
500 Error |
Сервер не может обработать запрос |
Настройка уровня фиксации - clusters/{clusterId}/server/{serverIndex}/configuration¶
Фиксация критичных сообщений.
- POST: controller/v1/clusters/{clusterId}/server/{serverIndex}/configuration
Параметр адресной строки запроса |
Тип данных |
Обязательность |
Описание |
---|---|---|---|
clusterId |
integer |
* |
Идентификатор кластера |
serverIndex |
integer |
* |
Идентификатор сервера |
Параметр тела запроса |
Тип данных |
Обязательность |
Описание |
---|---|---|---|
logBanlimBlockedRequests |
boolean |
* |
Флаг логирования запросов, заблокированных функционалом «F2B» и «Лимиты» |
logAllRequests |
boolean |
* |
Флаг логирования запросов, заблокированных любым функционалом защиты |
logLevel |
enum |
- |
Уровень фиксации. Перечень значений: EMERGENCY, ALERT, CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG |
Пример тела запроса:
{
"logBanlimBlockedRequests": true,
"logAllRequests": true,
"logLevel": "ERROR"
}
Параметр ответа 200 OK |
Тип данных |
Обязательность |
Описание |
---|---|---|---|
logLevel |
enum |
- |
Уровень фиксации. Перечень значений: EMERGENCY, ALERT, CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG |
logBanlimBlockedRequests |
boolean |
- |
Флаг логирования запросов, заблокированных функционалом «F2B» и «Лимиты» |
logAllRequests |
boolean |
- |
Флаг логирования запросов, заблокированных любым функционалом защиты |
Пример ответа 200 OK:
{
"logLevel": "ERROR",
"logBanlimBlockedRequests": true,
"logAllRequests": true
}
400 Error |
Максимальная длина 250 символов |
403 Error |
Доступ запрещен |
404 Error |
Значения параметров не соответствуют схеме |
409 Error |
Несовместимость запросов |
500 Error |
Сервер не может обработать запрос |
Эндпоинты logs¶
Параметры заголовка:
Authorization: Bearer $AccessToken
Content-Type: application/json
Пример.
--header 'authorization: Bearer eyJraWQiOiIwODM4MTAzZC1hZmM4LTRi'
Конец примера.
$AccessToken
генерируется эндпоинтом oidc/oauth2/token «Получение AccessToken».
Получение отчета - logs/intervention/report¶
Формирование и получение отчета.
- POST: controller/v1/logs/intervention/report
Параметр тела запроса |
Тип данных |
Обязательность |
Описание |
---|---|---|---|
clusterId |
integer |
* |
Идентификатор кластера |
filters |
object[][] |
- |
Фильтры |
filters.field |
enum |
- |
Поле. Перечень значений: clusterId, clusterName, instanceId, serverId, requestId, clientIp, hostname, timestamp, isBlocked, maxSeverity, minSeverity, severity, ruleId, uri, statusCode, tags. |
filters.value |
string |
- |
Значение |
filters.operator |
enum |
- |
Оператор. Перечень значений: contains, equal, greater, greaterEqual, less, lessEqual, notContains. |
orders |
object[] |
- |
Сортировка результата |
orders.field |
enum |
- |
Поле. Перечень значений: clusterId, clusterName, instanceId, serverId, requestId, clientIp, hostname, timestamp, isBlocked, maxSeverity, minSeverity, severity, ruleId, uri, statusCode, tags. |
orders.direction |
enum |
- |
Вид сортировки. Перечень значений: ASC, DESC. |
Пример тела запроса:
{
"clusterId": 0,
"filters": [
[
{
"field": "clusterName",
"value": "string",
"operator": "equal"
}
]
],
"orders": [
{
"field": "clusterName",
"direction": "ASC"
}
]
}
Параметр ответа 200 OK |
Тип данных |
Обязательность |
Описание |
---|---|---|---|
instanceId |
string |
- |
Идентификатор инстанса |
serverId |
integer |
- |
Идентификатор сервера |
requestId |
string |
- |
Идентификатор запроса |
hostname |
string |
- |
IP-адрес хоста |
clientIp |
string |
- |
IP-адрес клиента |
interventions |
object[] |
- |
Данные атак |
interventions.id |
integer |
- |
Идентификатор атаки |
interventions.statusCode |
integer |
- |
Код статуса |
interventions.ruleId |
integer |
- |
Идентификатор правила |
interventions.timestamp |
integer |
- |
Дата, время |
interventions.rev |
string |
- |
- |
interventions.message |
string |
- |
Информация |
interventions.data |
string |
- |
Тело атаки |
interventions.severity |
integer |
- |
Критичность (фактор риска) |
interventions.ver |
string |
- |
Версия защиты от атак |
interventions.maturity |
integer |
- |
Уровень зрелости |
interventions.accuracy |
integer |
- |
Точность |
interventions.uri |
string |
- |
URI запроса |
interventions.passive |
boolean |
- |
Режим работы правил ModSecurity |
interventions.tags |
string[] |
- |
Список тегов |
Пример ответа 200 OK:
[
{
"instanceId": "string",
"serverId": 0,
"requestId": "string",
"hostname": "string",
"clientIp": "string",
"interventions": [
{
"id": 0,
"statusCode": 0,
"ruleId": 0,
"timestamp": 0,
"rev": "string",
"message": "string",
"data": "string",
"severity": 0,
"ver": "string",
"maturity": 0,
"accuracy": 0,
"uri": "string",
"passive": true,
"tags": ["string"]
}
]
}
]
400 Error |
Максимальная длина 250 символов |
403 Error |
Доступ запрещен |
404 Error |
Значения параметров не соответствуют схеме |
409 Error |
Несовместимость запросов |
500 Error |
Сервер не может обработать запрос |
Коды ролей и разрешений для эндпоинтов¶
Код роли применяется в API. По умолчанию задано три роли:
Роль |
Код роли |
---|---|
Администратор (ADMIN) |
ROLE_ADMIN |
Оператор (OPERATOR) |
ROLE_OPERATOR |
Аудитор (READ_ONLY) |
ROLE_READ_ONLY |
Каждой роли назначаются разрешения. Каждое разрешение позволяет использовать набор эндпоинтов, приведенный в таблице ниже.
Существует ограничение назначения разрешений для роли. Пользователь не сможет быть добавлен в тенант, если его роли назначено хотя бы одно из следующих разрешений:
ROLE_EDIT (код разрешения) – Администрирование ролей (название разрешения),
TENANT_EDIT – Администрирование тенантов.
Таблица соответствия эндпоинтов и кодов разрешений представлена ниже.
Метод |
Эндпоинт |
---|---|
USER_ADMIN (код разрешения) |
|
POST |
/api/v1/users |
POST |
/api/v1/users/create |
GET |
/api/v1/users/{id} |
POST |
/api/v1/users/update |
PATCH |
/api/v1/users/{id}/password |
POST |
/api/v1/users/disable |
POST |
/api/v1/users/enable |
POST |
/api/v1/users/delete |
POST |
/api/v1/users/mfa-disable |
USER_SEARCH |
|
POST |
/api/v1/users |
ROLE_EDIT |
|
GET |
/api/v1/roles |
POST |
/api/v1/roles/create |
POST |
/api/v1/roles/update |
DELETE |
/api/v1/roles/delete/{id} |
ROLE_VIEW |
|
GET |
/api/v1/roles |
USER_SESSION_VIEW |
|
GET |
/api/v1/sessions |
SELF_MANAGEMENT |
|
POST |
/api/v1/users/current |
PATCH |
/api/v1/users/current/password |
PATCH |
/api/v1/users/current/mfa/generate |
PATCH |
/api/v1/users/current/mfa/enable |
PATCH |
/api/v1/users/current/mfa/disable |
POST |
/api/v1/parameters/types |
GET |
/api/v1/parameters |
POST |
/api/v1/parameters/{parameterId} |
INTERVENTION_NOTIFICATION_EDIT |
|
POST |
/v1/schedule/intervention/notification |
GET |
/v1/schedule/intervention/notification |
POST |
/v1/schedule/intervention/notification/test |
INTERVENTION_NOTIFICATION_VIEW |
|
GET |
/v1/schedule/intervention/notification |
POST |
/v1/schedule/intervention/notification/test |
INTEGRATION_TOKEN_EDIT |
|
POST |
/api/v1/users/generate-token |
DELETE |
/api/v1/users/delete-token/{id} |
CLUSTER_ADMIN |
|
GET |
/v1/instances |
GET |
/v1/instances/{instanceId} |
POST |
/v1/logs/intervention/filter |
POST |
/v1/logs/intervention/filter/count |
GET |
/v1/clusters |
GET |
/v1/clusters/{clusterId} |
GET |
/v1/clusters/{clusterId}/modsec |
POST |
/v1/clusters/{clusterId}/modsec/{index} |
GET |
/v1/modsec/{ruleId} |
GET |
/v1/configurations/modsec/{configId} |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/modsec |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban/{key}/whitelist/add |
DELETE |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban/{key}/whitelist |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban/{key}/strictlist/add |
DELETE |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban/{key}/strictlist |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban/{key}/banlist/add |
DELETE |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban/{key}/banlist |
POST |
/v1/clusters/events |
POST |
/v1/user-service/token |
GET |
/v1/user-service/token/check |
GET |
/v1/clusters/info |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/ip-ranges |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/ip-ranges/mode |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/ip-ranges/add |
DELETE |
/v1/clusters/{clusterId}/server/{serverIndex}/ip-ranges/delete |
DELETE |
/v1/clusters/{clusterId}/server/{serverIndex}/ip-ranges/delete/all |
GET |
/v1/clusters/{clusterId}/license |
PATCH |
/v1/clusters/{clusterId}/license |
PATCH |
/v1/clusters/{clusterId}/license/set |
PATCH |
/v1/clusters/{clusterId}/license/reset |
PATCH |
/v1/clusters/{clusterId}/license/update |
POST |
/v1/clusters/{clusterId}/mode |
DELETE |
/v1/clusters/{clusterId} |
GET |
/v1/clusters/{clusterId}/server/{serverIndex} |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/refresh |
DELETE |
/v1/clusters/{clusterId}/server/{serverIndex} |
GET |
/v1/clusters/{clusterId}/reset |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/requests-limit |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/location/{locationIndex}/requests-limit |
CLUSTER_VIEW |
|
GET |
/v1/instances |
GET |
/v1/instances/{instanceId} |
POST |
/v1/logs/intervention/filter |
POST |
/v1/logs/intervention/filter/count |
GET |
/v1/clusters |
GET |
/v1/clusters/{clusterId} |
GET |
/v1/clusters/{clusterId}/server/{serverIndex} |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/refresh |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban/whitelist |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban/strictlist |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban/banlist |
POST |
/v1/clusters/events |
GET |
/v1/clusters/{clusterId}/modsec |
GET |
/v1/modsec/{ruleId} |
GET |
/v1/configurations/modsec/{configId} |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/modsec |
GET |
/v1/clusters/info |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/requests-limit |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/location/{locationIndex}/requests-limit |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/ip-ranges |
CLUSTER_USER_EDIT |
|
GET |
/v1/clusters/{clusterId}/users |
POST |
/v1/clusters/{clusterId}/add-users |
POST |
/v1/clusters/{clusterId}/remove-users |
CLUSTER_USER_VIEW |
|
GET |
/v1/clusters/{clusterId}/users |
CLUSTER_ML_MANAGE |
|
POST | /v1/ml/clusters/{clusterId}/force-start-learning |
|
POST |
/v1/ml/clusters/{clusterId}/force-switch-predict |
CLUSTER_MODSEC_EDIT |
|
GET |
/v1/clusters/{clusterId}/modsec/raw |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/modsec/raw |
POST |
/v1/clusters/{clusterId}/modsec |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/modsec |
POST |
/v1/clusters/{clusterId}/modsec/send |
POST |
/v1/clusters/{clusterId}/modsec/{index} |
POST |
/v1/modsec/{ruleId} |
POST |
/v1/configurations/modsec/{configId} |
DELETE |
/v1/configurations/modsec/{configId} |
POST |
/v1/configurations/modsec/{configId}/add |
GET |
/v1/configurations/modsec/{configId}}/rules |
POST |
/v1/configurations/modsec/{configId}/rulesByIndex/{index} |
POST |
/v1/configurations/modsec/{configId}/rulesById/{ruleId} |
DELETE |
/v1/modsec/{ruleId} |
DELETE |
/v1/configurations/modsec/{configId}/rules/{index} |
GET |
/v1/configurations/modsec/{configId}/settings |
GET |
/v1/configurations/modsec/{configId}/settings |
CLUSTER_MODSEC_VIEW |
|
GET |
/v1/configurations/modsec/{configId}/rules |
GET |
/v1/clusters/{clusterId}/modsec/raw |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/modsec/raw |
GET |
/v1/configurations/modsec/{configId}/settings |
CLUSTER_CRS_EDIT |
|
POST |
/v1/clusters/{clusterId}/modsec/setup_crs |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/modsec/setup_crs |
CLUSTER_SERVER_EDIT |
|
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/anti-ddos |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/anti-ddos |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/location/{locationIndex}/anti-ddos |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/location/{locationIndex}/anti-ddos |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/locations |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/location/{locationIndex}/modsec-config |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/location/{locationIndex}/modsec-config |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/modsec-config |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/modsec-config |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/configuration |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/configuration |
GET |
/v1/clusters/{clusterId}/server/{serverIndex}/ip-ranges/mode |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/ip-ranges/add |
DELETE |
/v1/clusters/{clusterId}/server/{serverIndex}/ip-ranges/delete |
DELETE |
/v1/clusters/{clusterId}/server/{serverIndex}/ip-ranges/delete/all |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/requests-limit/add |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/location/{locationIndex}/requests-limit/add |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/requests-limit |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/location/{locationIndex}/requests-limit |
DELETE |
/v1/clusters/{clusterId}/server/{serverIndex}/requests-limit/{key} |
DELETE |
/v1/clusters/{clusterId}/server/{serverIndex}/location/{locationIndex}/requests-limit/{key} |
CLUSTER_FAIL_TO_BAN_EDIT |
|
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban/add |
POST |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban |
DELETE |
/v1/clusters/{clusterId}/server/{serverIndex}/fail_to_ban/{key} |
PATTERNS_EDIT |
|
PATCH |
/api/v1/patterns/update |
POST |
/api/v1/patterns |
DELETE |
/api/v1/patterns/{patternId} |
GET |
/api/v1/patterns |
GET |
/api/v1/patterns/all |
PATTERNS_VIEW |
|
GET |
/api/v1/patterns |
GET |
/api/v1/patterns/all |
TENANT_EDIT |
|
GET |
/api/v1/tenants |
POST |
/api/v1/tenants/create |
POST |
/api/v1/tenants/update |
POST |
/api/v1/tenants/{id}/add-users |
POST |
/api/v1/tenants/{id}/remove-users |
GET |
/api/v1/tenants/{id}/users |
PATCH |
/v1/clusters/tenant/set |
PATCH |
/v1/clusters/tenant/remove |
TENANT_VIEW |
|
GET |
/api/v1/tenants |
INTERVENTION_VIEW |
|
GET |
/v1/logs/request |
INTERVENTION_DASHBOARD_VIEW |
|
POST |
/v1/dashboard/counter |
POST |
/v1/dashboard/severity |
POST |
/v1/dashboard/popular_ip |
POST |
/v1/dashboard/popular_user_agent |
POST |
/v1/dashboard/popular_attack_type |
INTERVENTION_REPORT_VIEW |
|
POST |
/v1/logs/intervention/report |
COMMON_LOG_RECORD_VIEW |
|
GET |
/v1/logs/common |