---
canonical: https://docs.ideco.ru/v22/ru/ngfw/api/ips-profiles-api
---



# Профили предотвращения вторжений

::: page-constructor
blocks:
  - type: content-layout-block
    textContent:
      buttons:
        - text: Классический VCE
          theme: action
          width: 'auto'
        - text: Высокопроизводительный VCE
          theme: outlined
          url: https://docs.ideco.ru/api/vpp-v22/ru/ngfw/ips-profiles/
          width: 'auto'
        - text: Документация
          theme: outlined
          url: https://docs.ideco.ru/v22/ru/ngfw/settings/security-profiles/ips-profiles/
          width: 'auto'
    resetPaddings: false
    textWidth: l
    size: m
    centered: false
:::

Путь в веб-интерфейсе NGFW: **Профили безопасности → Предотвращение вторжений**

{% cut "Получение списка профилей" %}

```
GET /ips/profiles
```

**Ответ на успешный запрос:**

```json5
[
  {
    "id": "string",
    "name": "string",
    "comment": "string"
  },
  ...
]
```
* `id` - идентификатор профиля или фиксированная строка `__DEFAULT_IPS_PROFILE_ID__` (шаблонный профиль);
* `name` - название профиля, максимальная длина - 42 символа;
* `comment` - комментарий, максимальная длина - 255 символов.

Шаблонный профиль отображается в режиме **Только для чтения**. Идентификатор шаблонного профиля не может быть использован в запросах на изменение/удаление профиля и на создание/изменение/перемещение/удаление правил профиля.

{% endcut %}

{% cut "Создание профиля" %}

```
POST /ips/profiles
```
**Json-тело запроса:**:

```json5
{
    "name": "string",
    "comment": "string"
}
```

* `name` - название профиля, максимальная длина - 42 символа;
* `comment` - комментарий, максимальная длина - 255 символов.

**Ответ на успешный запрос:**

```json5
{
  "id": "string"
}
```

* `id` - идентификатор профиля.

{% endcut %}

{% cut "Изменение профиля" %}

```
PATCH /ips/profiles/<id профиля>
```

**Json-тело запроса:**

```json5
{
    "name": "string",
    "comment": "string"
}
```

* `name` - название профиля, максимальная длина - 42 символа;
* `comment` - комментарий, максимальная длина - 255 символов.

**Ответ на успешный запрос:** 200 ОК

{% endcut %}

{#top}

{% cut "Удаление профиля" %}

```
DELETE /ips/profiles/<id профиля>
```

**Ответ на успешный запрос:** 200 ОК

{% endcut %}

{#top}

{% cut "Получение списка правил профиля" %}

```
GET /ips/profiles/<profile_id>/rules
```

* `profile_id` - идентификатор профиля, список правил которого запрашивается (без скобок и кавычек).

**Ответ на успешный запрос:**

```json5
[
  {
    "id": "integer",
    "filters": [
      {
        "key": "sid" | "mitre_tactic_id" | "protocol" | "signature_severity" | "flow" | "classtype",
        "operator": "equals",
        "values": ["string" | "integer"],
     },
    ...
    ]
    "action": "default" | "alert" | "drop" | "pass",
    "comment": "string"
  },
  ...
]
```

* `id` - номер правила выбора сигнатур;
* `filters` - список фильтров правила (список не может быть пустым):
    * `key` - поле фильтра (`sid` - идентификатор, `mitre_tactic_id` - тактика MITRE, `protocol` - протокол, `signature_severity` - уровень серьезности, `flow` - направление, `classtype` - класс);
    * `operator` - оператор, только `equals`;
    * `values` - список значений, которые должны принимать поля `key` (если `key` - `sid`, то `values` - число).
* `action` - строка с действием при срабатывании правила;
* `comment` - комментарий, максимальная длина 255 символов.

{% endcut %}

{% cut "Создание правила в профиле" %}

```
POST /ips/profiles/<profile_id>/rules?anchor_item_id=<integer>&insert_after=<true|false>
```

* `profile_id` - идентификатор профиля, в котором создается правило (без скобок и кавычек);
* `anchor_item_id` - идентификатор правила, ниже или выше которого нужно создать новое;
* `insert_after` - вставка до или после. Если `true` или отсутствует, то вставить правило сразу после указанного в `anchor_item_id`. Если `false`, то на месте указанного в `anchor_item_id`.

**Json-тело запроса:**

```json5
{
    "filters": [
       {
        "key": "sid" | "mitre_tactic_id" | "protocol" | "signature_severity" | "flow" | "classtype",
        "operator": "equals",
        "values": ["string" | "integer"]
      },
      ...
    ],
    "action": "default" | "alert" | "drop" | "pass",
    "comment": "string"
}
```

* `filters` - список фильтров правила (список не может быть пустым):
    * `key` - поле фильтра (`sid` - идентификатор, `mitre_tactic_id` - тактика MITRE, `protocol` - протокол, `signature_severity` - уровень серьезности, `flow` - направление, `classtype` - класс);
    * `operator` - оператор, только `equals`;
    * `values` - список значений, которые должны принимать поля `key` (если `key` - `sid`, то `values` - число).
* `action` - строка с действием при срабатывании правила;
* `comment` - комментарий, максимальная длина - 255 символов.

**Ответ на успешный запрос:** 

```json5
{
  "id": "integer"
}
```

* `id` - номер правила выбора сигнатур.

{% endcut %}

{% cut "Изменение правила в профиле" %}

```
PATCH /ips/profiles/<profile_id>/rules/<rule_id>
```

* `profile_id` - идентификатор профиля, в котором изменяется правило;
* `rule_id` - идентификатор правила в профиле.

**Json-тело запроса:** (некоторые или все поля объекта)

```json5
{
    "filters": [
      {
        "key": "sid" | "mitre_tactic_id" | "protocol" | "signature_severity" | "flow" | "classtype",
        "operator": "equals",
        "values": ["string" | "integer"]
       },
      ...
    ],
    "action": "default" | "alert" | "drop" | "pass",
    "comment": "string"
}
```

* `filters` - список фильтров правила (список не может быть пустым):
  * `key` - поле фильтра (`sid` - идентификатор, `mitre_tactic_id` - тактика MITRE, `protocol` - протокол, `signature_severity` - уровень серьезности, `flow` - направление, `classtype` - класс);
  * `operator` - оператор, только `equals`;
  * `values` - список значений, которые должны принимать поля `key` (если `key` - `sid`, то `values` - число).
* `action` - строка с действием при срабатывании правила;
* `comment` - комментарий, максимальная длина - 255 символов.

**Ответ на успешный запрос:** 200 ОК

{% endcut %}

{% cut "Перемещение правила в профиле" %}

```
PATCH /ips/profiles/rules/move
```

**Json-тело запроса:**:

```json5
{
    "params": {
        "profile_id": "string",
        "rule_id": "integer",
        "anchor_item_id": "integer",
        "insert_after": true | false
    }
}
```

* `profile_id` - идентификатор профиля, в котором перемещается правило;
* `rule_id` - идентификатор правила в профиле;
* `anchor_item_id` - идентификатор правила, выше или ниже которого нужно разместить `rule_id`;
* `insert_after` - вставить до (`false`) или после (`true`) правила `anchor_item_id`.

**Ответ на успешный запрос:** 200 ОК

{% endcut %}

{% cut "Удаление правила в профиле" %}

```
DELETE /ips/profiles/<profile_id>/rules/<rule_id>
```

* `profile_id` - идентификатор профиля, в котором удаляется правило;
* `rule_id` - идентификатор правила в профиле.

**Ответ на успешный запрос:** 200 ОК

{% endcut %}

{% cut "Создание профиля с правилами" %}

```
POST /ips/profiles-create-with-rules
```

**Json-тело запроса:**: 

```json5
{
    "name": "string",
    "comment": "string",
    "rules": [
          {
          "filters": [
                {
                "key": "sid" | "mitre_tactic_id" | "protocol" | "signature_severity" | "flow" | "classtype",
                "operator": "equals",
                "values": ["string" | "integer"]
                  },
                  ...
                ],
          "action": "default" | "alert" | "drop" | "pass",
          "comment": "string"
          },
          ...
        ]
}
```

* `name` - название профиля, максимальная длина - 42 символа;
* `comment` - комментарий, максимальная длина - 255 символов;
* `rules` - список правил профиля:
  * `filters` - список фильтров правила (список не может быть пустым):
    * `key` - поле фильтра (`sid` - идентификатор, `mitre_tactic_id` - тактика MITRE, `protocol` - протокол, `signature_severity` - уровень серьезности, `flow` - направление, `classtype` - класс);
    * `operator` - оператор, только `equals`;
    * `values` - список значений, которые должны принимать поля `key` (если `key` - `sid`, то `values` - число).
  * `action` - строка с действием при срабатывании правила;
  * `comment` - комментарий, максимальная длина 255 символов.

**Ответ на успешный запрос:**

```json5
{
    "id": "string"
}
```

* `id` - идентификатор созданного профиля с правилами.

{% endcut %}

{% cut "Копирование профиля с правилами" %}

```
POST /ips/profiles/<id профиля>/copy
```

В качестве `id профиля` может быть указана фиксированная строка `__DEFAULT_IPS_PROFILE_ID__` для создания копии шаблонного профиля. Поле **Комментарий** будет заменено на пустую строку.

**Ответ на успешный запрос:**

```json5
{
    "id": "string"
}
```

* `id` - идентификатор созданного профиля.

{% endcut %}

{% cut "Получение списка сигнатур в определенном профиле" %}

```
GET /ips/profiles/<id профиля>/signatures
```

В качестве `id профиля` может быть указана фиксированная строка `__DEFAULT_IPS_PROFILE_ID__` для получения списка сигнатур шаблонного профиля.

**Ответ на успешный запрос:**

```json5
{
    "signatures": [
        {
            "action": "string",
            "protocol": "string",
            "flow": "string",
            "classtype": "string-admin",
            "sid": "integer",
            "signature_severity": "string",
            "mitre_tactic_id": "string",
            "signature_source": "string",
            "msg": "string",
            "source": "string",
            "source_ports": "string",
            "destination": "string",
            "destination_ports": "string",
            "updated_at": "string"
        },
        ...
    ]
}
```

* `action` - действие для трафика, соответствующего сигнатуре:
  * `pass` - **Пропускать**;
  * `alert` - **Предупреждать**;
  * `drop` - **Блокировать**;
  * `rejectsrc` - **Отправлять RST узлу источника**;
  * `rejectdst` - **Отправлять RST узлу назначения**;
  * `rejectboth` - **Отправлять RST обоим**.
* `protocol` - протокол (`tcp`, `udp`, `icmp`, `ip`). Возможные значения представлены по [ссылке](https://docs.suricata.io/en/latest/rules/intro.html#protocol);
* `flow` - направление трафика (`client2server`, `server2client`, `-`);
* `classtype` - группа, к которой относится сигнатура;
* `sid` - идентификатор сигнатуры;
* `signature_severity` - уровень угрозы;
* `mitre_tactic_id` - тактика согласно матрице MITRE ATT&CK;
* `signature_source` - источник сигнатуры: 
    * `standard` - стандартные правила;
    * `advanced` - правила IPS от Лаборатории Касперского;
    * `custom` - пользовательские правила.
* `msg` - название сигнатуры;
* `source` - источник подключения;
* `source_ports` - порты источника;
* `destination` - назначение;
* `destination_ports` - порты назначения;
* `updated_at` - дата в формате `YYYY-MM-DD` или строка со значением `-`.

{% endcut %}

{% cut "Получение количества сигнатур профиля по действиям для всех профилей" %}

```
GET /ips/profiles/actions-counts 
```

**Ответ на успешный запрос:**

```json5
{
    "profile_id": {
      "pass": "integer",
      "alert": "integer",
      "drop": "integer",
      "rejectsrc": "integer",
      "rejectdst": "integer",
      "rejectboth": "integer"
    },
    ...
}
```

* `profile_id` - идентификатор профиля или фиксированная строка `__DEFAULT_IPS_PROFILE_ID__` (шаблонный профиль):
  * `pass` - **Пропускать**;
  * `alert` - **Предупреждать**;
  * `drop` - **Блокировать**;
  * `rejectsrc` - **Отправлять RST узлу источника**;
  * `rejectdst` - **Отправлять RST узлу назначения**;
  * `rejectboth` - **Отправлять RST обоим**.
 

{% endcut %}

{% cut "Получение количества сигнатур профиля по действиям для конкретного профиля" %}

```
GET /ips/profiles/<id профиля>/actions-counts
```

**Ответ на успешный запрос:**

```json5
{
    "rule_id": {
      "pass": "integer",
      "alert": "integer",
      "drop": "integer",
      "rejectsrc": "integer",
      "rejectdst": "integer",
      "rejectboth": "integer"
    },
    ...
}
```

* `rule_id` - идентификатор правила в профиле:
  * `pass` - **Пропускать**;
  * `alert` - **Предупреждать**;
  * `drop` - **Блокировать**;
  * `rejectsrc` - **Отправлять RST узлу источника**;
  * `rejectdst` - **Отправлять RST узлу назначения**;
  * `rejectboth` - **Отправлять RST обоим**.
 

{% endcut %}

{% cut "Получение профилей Предотвращения вторжений, которые содержат определенную сигнатуру" %}

```
GET /ips/signatures/<sid>/profiles
```

* `sid` - идентификатор сигнатуры.

**Ответ на успешный запрос:**

```json
{
    "id": "string",
    "name": "string"
}
```

* `id` - идентификатор профиля;
* `name` - название профиля.
  

{% endcut %}
