---
canonical: https://docs.ideco.ru/v22/ru/ngfw/api/access-rules-api/firewall
---

# Межсетевой экран

::: 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/access-rules-api/firewall-api/
          width: 'auto'
        - text: Документация
          theme: outlined
          url: https://docs.ideco.ru/v22/ru/ngfw/settings/access-rules/firewall
          width: 'auto'
    resetPaddings: false
    textWidth: l
    size: m
    centered: false
:::

{% cut "Получение статуса службы" %}

```
GET /firewall/status
```

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

```json5
[
   {
      "name": "rules-in-kernel",
      "status": "active" | "activating" | "deactivating" | "failed" | "inactive" | "reloading",
      "msg": ["string"]
   },
   {
      "msg": ["string"],
      "status": "active" | "inactive",
      "name": "auto-snat"
    }
]
```
* `name` - название службы:
  * `rules-in-kernel` - правила для ядра Linux;
  * `auto-snat` - автоматический SNAT.
* `status` - текущий статус модуля:
  * для `rules-in-kernel`:
    * `active` - включен;
    * `inactive` - выключен;
    * `failed` - произошла ошибка;
    * `reloading` - перезагрузка.
  * для `auto-snat`:
    * `active` - включен;
    * `inactive` - выключен.
* `msg` - список строк, поясняющих текущее состояние службы. Может быть пустым.

{% endcut %}

{% cut "Получение настроек Межсетевого экрана" %}

### Включенность пользовательских правил

```
GET /firewall/state
```

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

```json5
{
    "enabled": true | false
} 
```

* `enabled` - опция раздела **Межсетевой экран**: 
  * `true` - включена;
  * `false` - выключена.

### Логирование правил

```
GET /firewall/settings
```

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

```json5
{
    "automatic_snat_enabled": true | false,
    "log_mode": "nothing" | "all" | "selected",
    "log_actions": "accept" | "drop" | "dnat" | "snat" | "mark_log" | "mark_not_log"
} 
```

* `automatic_snat_enabled` - опция **Автоматический SNAT локальных сетей**: 
  * `true` - включена;
  * `false`- выключена.
* `log_mode` - режим логирования срабатывание правил:
  * `nothing` - не логировать;
  * `all` - логировать все срабатывания;
  * `selected` - логировать выборочно.
* `log_actions` - список действий для логирования:
  * `accept`- разрешение пакета;
  * `drop` - отбрасывание пакета;
  * `dnat` - преобразование адреса назначения (DNAT);
  * `snat` - преобразование исходного адреса (SNAT);
  * `mark_log` - установка метки с логированием;
  * `mark_not_log` - установка метки без логирования.

{% endcut %}

{% cut "Изменение настроек" %}

```
PATCH /firewall/settings
```

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

```json5
{
    "automatic_snat_enabled": true | false,
    "log_mode": "nothing" | "all" | "selected",
    "log_actions": "accept" | "drop" | "dnat" | "snat" | "mark_log" | "mark_not_log"
} 
```

* `automatic_snat_enabled` - опция **Автоматический SNAT локальных сетей**: 
  * `true` - включена;
  * `false`- выключена.
* `log_mode` - режим логирования срабатывание правил:
  * `nothing` - не логировать;
  * `all` - логировать все срабатывания;
  * `selected` - логировать выборочно.
* `log_actions` - список действий для логирования:
  * `accept`- разрешение пакета;
  * `drop` - отбрасывание пакета;
  * `dnat` - преобразование адреса назначения (DNAT);
  * `snat` - преобразование исходного адреса (SNAT);
  * `mark_log` - установка метки с логированием;
  * `mark_not_log` - установка метки без логирования.

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

{% endcut %}

{% cut "Выгрузка правил в CSV" %}

* `GET /firewall/rules/forward/export` - раздел FORWARD;
* `GET /firewall/rules/input/export` - раздел INPUT;
* `GET /firewall/rules/dnat/export` - раздел DNAT;
* `GET /firewall/rules/snat/export` - раздел SNAT;
* `GET /firewall/rules/log/export` - раздел Логирование;
* `GET /firewall/rules/drop_rules/export` - раздел Предварительная фильтрация;
* `GET /firewall/rules/hw_rules/export` - раздел Аппаратная фильтрация.

**Ответ на успешный запрос:** файл в формате `CSV`.

{% endcut %}

## Получение списка правил

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

* `GET /firewall/rules/forward` - раздел FORWARD;
* `GET /firewall/rules/input` - раздел INPUT.

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

```json5
[
  {
      "id": "string",
      "parent_id": "string",
      "enabled": true | false,
      "logging": true | false,
      "protocol": "string",
      "sources": [
      {
        "addresses": ["string"],
        "addresses_negate": true | false
      },
      ...
      ],
      "source_ports": ["string"],
      "incoming_interface": "string",
      "destinations": [
      {
        "addresses": ["string"],
        "addresses_negate": true | false,
      },
      ...
      ],
      "destination_ports": ["string"],
      "outgoing_interface": "string",
      "hip_profiles": ["string"],
      "dpi_profile": "string",
      "dpi_enabled": true | false,
      "ips_profile": "string",
      "ips_enabled": true | false,
      "timetable": ["string"],
      "comment": "string",
      "action": "accept" | "drop"
  },
  ...
]  
```

* `id` - идентификатор правила;
* `parent_id` - идентификатор группы в Ideco Center, в которую входит сервер, или константа `f3ffde22-a562-4f43-ac04-c40fcec6a88c` (соответствует Корневой группе);
* `enabled` - cтатус правила:
  * `true` - включено;
  * `false` - выключено.
* `logging` - логирование правила:
  * `true` - включено;
  * `false` - выключено.
* `protocol` - идентификатор протокола с префиксом `protocol.`, например, `protocol.udp`;
* `sources` - не более двух списков адресов источника, объединенных логическим оператором `and`. Не может быть пустой строкой:
  * `addresses` - список идентификаторов объектов, содержащих адреса источников (не более двухсот адресов);
  * `addresses_negate` - инвертирование адреса источника:
    * `true` - включено;
    * `false` - выключено.
* `source_ports` - порты источников, список идентификаторов алиасов;
* `incoming_interface` - зона источника;
* `destinations` - не более двух списков адресов назначений, объединенных логическим оператором `and`. Не может быть пустой строкой:
  * `addresses` - список идентификаторов объектов, содержащих адреса назначений;
  * `addresses_negate` - инвертирование адреса назначения:
    * `true` - включено;
    * `false` - выключено.
* `destination_ports` - порты назначения;
* `outgoing_interface` - зона назначения;
* `hip_profiles` - HIP-профили;
* `dpi_profile` - строка в формате UUID, идентификатор профиля DPI. Не может быть пустой строкой, если `dpi_enabled` = `true`;
* `dpi_enabled` - если `true`, то обработка с помощью модуля **Контроль приложений** включена, `false` - выключена;
* `ips_profile` - строка в формате UUID, идентификатор профиля IPS. Не может быть пустой строкой, если `ips_enabled` = `true`;
* `ips_enabled` - если `true`, то обработка с помощью модуля **Предотвращение вторжений** включена, `false` - выключена;
* `timetable` - время действия;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым;
* `action` - действие:
  * `accept` - разрешить;
  * `reject` - запретить с отправкой RST-сообщения источнику;
  * `drop` - запретить без отправки RST-сообщения источнику.

{% endcut %}

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

```
GET /firewall/rules/dnat
```

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

```json5
[
  {
    "id": "string",
    "parent_id": "string",
    "enabled": true | false,
    "logging": true | false,
    "protocol": "string",
    "sources": [
      {
        "addresses": ["string"],
        "addresses_negate": true | false
      },
      ...
    ],
    "source_ports": ["string"],
    "incoming_interface": "string",
    "destinations": [
    {
      "addresses": ["string"],
      "addresses_negate": true | false,
    },
    ...
    ],
    "destination_ports": ["string"],
    "timetable": ["string"],
    "comment": "string",
    "action": "accept" | "dnat",
    "change_destination_address": null | "string",
    "change_destination_port": null | "string"
  }
]  
```

* `id` - идентификатор правила;
* `parent_id` - идентификатор группы в Ideco Center, в которую входит сервер, или константа `f3ffde22-a562-4f43-ac04-c40fcec6a88c` (соответствует Корневой группе);
* `enabled` - cтатус правила:
  * `true` - включено;
  * `false` - выключено.
* `logging` - логирование правила:
  * `true` - включено;
  * `false` - выключено.
* `protocol` - идентификатор протокола с префиксом `protocol.`, например, `protocol.udp`;
* `sources` - не более двух списков адресов источника, объединенных логическим оператором `and`. Не может быть пустой строкой:
  * `addresses` - список идентификаторов объектов, содержащих адреса источников (не более двухсот адресов);
  * `addresses_negate` - инвертирование адреса источника:
    * `true` - включено;
    * `false` - выключено.
* `source_ports` - порты источников, список идентификаторов алиасов;
* `incoming_interface` - зона источника;
* `destinations` - не более двух списков адресов назначений, объединенных логическим оператором `and`. Не может быть пустой строкой:
  * `addresses` - список идентификаторов объектов, содержащих адреса назначений;
  * `addresses_negate` - инвертирование адреса назначения:
    * `true` - включено;
    * `false` - выключено.
* `destination_ports` - порты назначения;
* `timetable` - время действия;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым;
* `action` - действие:
  * `accept` - разрешить;
  * `dnat` - производить DNAT.
* `change_destination_address` - IP-адрес или диапазон IP-адресов для замены назначения, или `null`, если `action` = `accept`;
* `change_destination_port` - порт или диапазон портов для замены значения, или `null`, если `action` = `accept`.

{% endcut %}

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

```
GET /firewall/rules/snat
```

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

```json5
[
  {
    "id": "string",
    "parent_id": "string",
    "enabled": true | false,
    "logging": true | false,
    "protocol": "string",
    "sources": [
    {
      "addresses": ["string"],
      "addresses_negate": true | false
    },
    ...
    ],
    "source_ports": ["string"],
    "destinations": [
    {
      "addresses": ["string"],
      "addresses_negate": true | false,
    },
    ...
    ],
    "destination_ports": ["string"],
    "outgoing_interface": "string",
    "timetable": ["string"],
    "comment": "string",
    "action": "accept" | "snat",
    "change_source_address": null | "string"
  },
  ...
]
```

* `id` - идентификатор правила;
* `parent_id` - идентификатор группы в Ideco Center, в которую входит сервер, или константа `f3ffde22-a562-4f43-ac04-c40fcec6a88c` (соответствует Корневой группе);
* `enabled` - если `true`, то правило включено, `false` - выключено;
* `logging` - если `true`, то включено логирование правила, `false` - выключено;
* `protocol` - протокол;
* `sources` - не более двух списков адресов источника, объединенных логическим оператором `and`. Не может быть пустой строкой:
  * `addresses` - список идентификаторов объектов, содержащих адреса источников (не более двухсот адресов);
  * `addresses_negate` - инвертирование адреса источника:
    * `true` - включено;
    * `false` - выключено.
* `source_ports` - порты источников, список идентификаторов алиасов;
* `destinations` - не более двух списков адресов назначений, объединенных логическим оператором `and`. Не может быть пустой строкой:
  * `addresses` - список идентификаторов объектов, содержащих адреса назначений;
  * `addresses_negate` - инвертирование адреса назначения:
    * `true` - включено;
    * `false` - выключено.
* `destination_ports` - порты назначения;
* `outgoing_interface` - зона назначения;
* `timetable` - время действия;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым;
* `action` - действие:
  * `accept` - разрешить;
  * `snat` - производить SNAT.
* `change_destination_address` - IP-адрес для замены источника, или `null`, если `action` = `accept`.

{% endcut %}

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

```
GET /firewall/rules/log
```

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

```json5
[
  {
      "id": "string",
      "parent_id": "string",
      "enabled": true | false,
      "protocol": "string",
      "sources": [
      {
        "addresses": ["string"],
        "addresses_negate": true | false
      },
      ...
      ],
      "source_ports": ["string"],
      "incoming_interface": "string",
      "destinations": [
      {
        "addresses": ["string"],
        "addresses_negate": true | false
      },
      ...
      ],
      "destination_ports": ["string"],
      "outgoing_interface": "string",
      "timetable": ["string"],
      "comment": "string",
      "action": "mark_log" | "mark_not_log"
  },
  ...
]
```

* `id` - идентификатор правила.
* `parent_id` - идентификатор группы в Ideco Center, в которую входит сервер, или константа `f3ffde22-a562-4f43-ac04-c40fcec6a88c` (соответствует Корневой группе);
* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.
* `protocol` - протокол;
* `sources` - не более двух списков адресов источника, объединенных логическим оператором `and`. Не может быть пустой строкой:
  * `addresses` - список идентификаторов объектов, содержащих адреса источников (не более двухсот адресов);
  * `addresses_negate` - инвертирование адреса источника:
    * `true` - включено;
    * `false` - выключено.
* `source_ports` - порты источников, список идентификаторов алиасов;
* `incoming_interface` - зона источника;
* `destinations` - не более двух списков адресов назначений, объединенных логическим оператором `and`. Не может быть пустой строкой:
  * `addresses` - список идентификаторов объектов, содержащих адреса назначений;
  * `addresses_negate` - инвертирование адреса назначения:
    * `true` - включено;
    * `false` - выключено.
* `destination_ports` - порты назначения;
* `outgoing_interface` - зона назначения;
* `timetable` - время действия;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым;
* `action` - действие:
  * `mark_log` - логировать;
  * `mark_not_log` - не логировать.

{% endcut %}

## Управление правилами

{% cut "Добавление правила" %}

* `POST /firewall/rules/forward?anchor_item_id=<id правила>&insert_after={true|false}` - раздел FORWARD;
* `POST /firewall/rules/input?anchor_item_id=<id правила>&insert_after={true|false}` - раздел INPUT;
* `POST /firewall/rules/dnat?anchor_item_id=<id правила>&insert_after={true|false}` - раздел DNAT;
* `POST /firewall/rules/snat?anchor_item_id=<id правила>&insert_after={true|false}` - раздел SNAT;
* `POST /firewall/rules/log?anchor_item_id=<id правила>&insert_after={true|false}` - раздел Логирование.

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

**Json-тело запроса:** один из объектов описанных в разделе [**Получение списка правил**](firewall.md#poluchenie-spiska-pravil), без поля `id`.

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

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

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

{% endcut %}

{% cut "Редактирование правила" %}

* `PATCH  /firewall/rules/forward/<id правила>` - раздел FORWARD;
* `PATCH  /firewall/rules/input/<id правила>` - раздел INPUT;
* `PATCH  /firewall/rules/dnat/<id правила>` - раздел DNAT;
* `PATCH  /firewall/rules/snat/<id правила>` - раздел SNAT;
* `PATCH  /firewall/rules/log/<id правила>` - раздел Логирование.

**Json-тело запроса:** один из объектов описанных в разделе [**Получение списка правил**](firewall.md#poluchenie-spiska-pravil), без поля `id`.

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

{% endcut %}

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

* `PATCH /firewall/rules/forward/move` - раздел FORWARD;
* `PATCH /firewall/rules/input/move` - раздел INPUT;
* `PATCH /firewall/rules/dnat/move` - раздел DNAT;
* `PATCH /firewall/rules/snat/move` - раздел SNAT;
* `PATCH /firewall/rules/log/move` - раздел Логирование.

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

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

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

{% endcut %}

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

* `DELETE /firewall/rules/forward/<id правила>` - раздел FORWARD;
* `DELETE /firewall/rules/input/<id правила>` - раздел INPUT;
* `DELETE /firewall/rules/dnat/<id правила>` - раздел DNAT;
* `DELETE /firewall/rules/snat/<id правила>` - раздел SNAT;
* `DELETE /firewall/rules/log/<id правила>` - раздел Логирование.

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

{% endcut %}

<!--https://stash.ideco.dev/projects/UTM/repos/firewall-backend/browse/docs/api.md?at=refs%2Fheads%2F21_release-->

## Счетчик срабатывания правил

{% cut "Проверка включенности счетчика срабатываний правил" %}

```
GET /firewall/watch
```

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

```json5
{
   "enabled": true | false
}
```

* `enabled` - состояние счетчика:
  * `true` - включен;
  * `false` - выключен.

{% endcut %}

{% cut "Управление счетчиком срабатывания правил" %}

```
PATCH /firewall/watch
```

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

```json5
{
   "enabled": true | false
}
```

* `enabled` - состояние счетчика:
  * `true` - включен;
  * `false` - выключен.

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

{% endcut %}

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

* `GET /firewall/counters/forward` - раздел FORWARD;
* `GET /firewall/counters/input` - раздел INPUT;
* `GET /firewall/counters/dnat` - раздел DNAT;
* `GET /firewall/counters/snat` - раздел SNAT;
* `GET /firewall/rules/log` - раздел Логирование.

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

```json5
[
   {
      "id": "string",
      "packets": "integer"
   },
   ...
]
```

* `id` - идентификатор правила;
* `packets` - количество пакетов, прошедших через правило.

{% endcut %}

<!--https://stash.ideco.dev/projects/UTM/repos/firewall-backend/browse/docs/api.md?at=refs%2Fheads%2F21_release-->

## Проверка прохождения трафика

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

```
GET /firewall/checks_packets
```

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

```json5
{
    "id": "string",
    "enabled": true | false,
    "protocol": "tcp" | "udp",
    "src_ip": "string",
    "src_port": "integer",
    "dst_ip": "string",
    "dst_port": "integer",
    "incoming_interface": "string",
    "expected_result": "drop" | "accept",
    "comment": "string"
}
```

* `id` - идентификатор проверки;
* `enabled` - состояние проверки:
  * `true` - включена;
  * `false` - выключена.
* `protocol` - протокол, используемый в данной проверке. Может быть `tcp` или `udp`;
* `src_ip` - адрес источника тестовых пакетов;
* `src_port` - порт источника тестовых пакетов;
* `dst_ip` - адрес назначения тестовых пакетов;
* `dst_port` - порт назначения тестовых пакетов;
* `incoming_interface` - идентификатор алиаса сетевого интерфейса, на который приходят тестовые пакеты;
* `expected_result` - ожидаемый результат выполнения проверки. Может быть `drop` или `accept`;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым.

{% endcut %}

{% cut "Добавление новых проверок" %}

```
POST /firewall/checks_packets
```

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

```json5
{
    "enabled": true | false,
    "protocol": "tcp" | "udp",
    "src_ip": "string",
    "src_port": "integer",
    "dst_ip": "string",
    "dst_port": "integer",
    "incoming_interface": "string",
    "expected_result": "drop" | "accept",
    "comment": "string"
}
```

* `enabled` - состояние проверки:
  * `true` - включена;
  * `false` - выключена.
* `protocol` - протокол, используемый в данной проверке. Может быть `tcp` или `udp`;
* `src_ip` - адрес источника тестовых пакетов;
* `src_port` - порт источника тестовых пакетов;
* `dst_ip` - адрес назначения тестовых пакетов;
* `dst_port` - порт назначения тестовых пакетов;
* `incoming_interface` - идентификатор алиаса сетевого интерфейса, на который приходят тестовые пакеты;
* `expected_result` - ожидаемый результат выполнения проверки. Может быть `drop` или `accept`;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым.

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

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

* `id` - идентификатор созданной проверки.

{% endcut %}

{% cut "Добавление новой проверки путем копирования существующей" %}

```
POST /firewall/checks_packets/<id проверки>/copy
```

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

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

* `id` - идентификатор созданной проверки.

{% endcut %}

{% cut "Редактирование проверок" %}

```
PATCH /firewall/checks_packets/<id проверки>
```

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

```json5
{
    "enabled": true | false,
    "protocol": "tcp" | "udp",
    "src_ip": "string",
    "src_port": "integer",
    "dst_ip": "string",
    "dst_port": "integer",
    "incoming_interface": "string",
    "expected_result": "drop" | "accept",
    "comment": "string"
}
```

* `enabled` - состояние проверки:
  * `true` - включена;
  * `false` - выключена.
* `protocol` - протокол, используемый в данной проверке. Может быть `tcp` или `udp`;
* `src_ip` - адрес источника тестовых пакетов;
* `src_port` - порт источника тестовых пакетов;
* `dst_ip` - адрес назначения тестовых пакетов;
* `dst_port` - порт назначения тестовых пакетов;
* `incoming_interface` - идентификатор алиаса сетевого интерфейса, на который приходят тестовые пакеты;
* `expected_result` - ожидаемый результат выполнения проверки. Может быть:
  * `drop` - отбросить;
  * `accept` - разрешить.
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым.

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

{% endcut %}

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

```
PATCH /firewall/checks_packets/<id проверки>
```

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

{% endcut %}

{% cut "Запуск проверок" %}

```
POST /firewall/checks_start
```

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

{% endcut %}

{% cut "Получение результатов проверок" %}

```
GET /firewall/checks_result
```

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

```json5
{
    "block_status": true | false,
    "in_progress": true | false,
    "check_datetime": "integer",
    "data": { 
        "check_id": {
                "result": "drop" | "accept",
                "rule_id": "string",
                "verdict": true | false
                },
                ...
    }
}
```

* `block_status` - статус блокировки трафика, вызванный провалом проверок:
  * `true` - включен;
  * `false` - выключен.
* `in_progress` - процесс проверки в данный момент:
  * `true` - выполняется;
  * `false` - не выполняется.
* `check_datetime` - время выполнения последних проверок в формате `YYYYMMDDHMS`;
* `data` - массив, содержащий результаты проверок в виде списка объектов `check_id`:
  * `result` - результат выполнения проверки. Допустимые значения:
    * `drop` - отброшено;
    * `accept` - разрешено.
  * `rule_id` - идентификатор отработавшего правила. Пример: `fwd.ngfw.2`;
  * `verdict` - совпадение фактического результата с ожидаемым:
    * `true` - совпадает;
    * `false` - не совпадает.

**Номер правила в поле `rule_id` будет отсутствовать, если пакет был заблокирован пользовательским правилом INPUT. В этом случае поле `rule_id` будет иметь вид `inp.ngfw`**.

{% endcut %}

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

```
GET /firewall/checks_settings
```

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

```json5
{
    "block_traffic": true | false
}
```

* `block_traffic` - блокировка прохождения трафика при провале какой-либо проверки:
  * `true` - включена;
  * `false` - выключена.

{% endcut %}

{% cut "Изменение настроек блокировки трафика в случае неудачных проверок" %}

```
PATCH /firewall/checks_settings
```

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

```json5
{
    "block_traffic": true | false
}
```

* `block_traffic` - блокировка прохождения трафика при провале какой-либо проверки:
  * `true` - включена;
  * `false` - выключена.

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

{% endcut %}

<!-- https://stash.ideco.dev/projects/UTM/repos/firewall-backend/browse/docs/checks_packets.md?at=refs%2Fheads%2F21_release -->

## Аппаратная фильтрация

Список поддерживаемых сетевых карт доступен в [статье](https://docs.ideco.ru/v22/ru/ngfw/settings/access-rules/hardware-filtering).

{% endcut %}

{% cut "Получение выбранного режима фильтрации" %}

```
GET /firewall/hw_settings
```

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

```json5
{
    "mode": "string"
}
```

* `mode` - режим фильтрации. Допустимые значения:
  * `mac` - по MAC-адресу источника;
  * `src-ip` - по IP-адресу источника;
  * `dst-ip` - по IP-адресу назначения;
  * `src-and-dst-ip` - по IP-адресу источника и назначения.

{% endcut %}

{% cut "Изменение выбранного режима фильтрации" %}

```
PATCH /firewall/hw_settings
```

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

```json5
{
    "mode": "string"
}
```

* `mode` - режим фильтрации. Допустимые значения:
  * `mac` - по MAC-адресу источника;
  * `src-ip` - по IP-адресу источника;
  * `dst-ip` - по IP-адресу назначения;
  * `src-and-dst-ip` - по IP-адресу источника и назначения.

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

{% endcut %}

### Управление правилами аппаратной фильтрации

{% cut "Получение правил фильтрации по MAC-адресу источника" %}

```
GET /firewall/hw_rules_mac
```

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

```json5
[
    {
        "id": "string",
        "mac": "string",
        "protocol": "integer",
        "comment": "string",
        "enabled": true | false
    },
    ...
]
```

* `id` - идентификатор правила;
* `mac` - MAC-адрес в формате `11:22:33:aa:bb:СС`;
* `protocol` - [номер](https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml) протокола сетевого уровня. Диапазон 1-65535;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым;
* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.

{% endcut %}

{% cut "Создание правил фильтрации по MAC-адресу источника" %}

```
POST /firewall/hw_rules_mac
```

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

```json5

{
    "mac": "string",
    "protocol": "integer",
    "comment": "string",
    "enabled": true | false    
}
```

* `mac` - MAC-адрес в формате `11:22:33:aa:bb:СС`;
* `protocol` - [номер](https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml) протокола сетевого уровня. Диапазон 1-65535. **Не указывайте протокол IPv4** (значение 2048), для фильтрации  на сетевом уровне используйте правила *По IP-адресу источника*, *По IP-адресу назначения*, *По IP-адресу источника и назначения*;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым;
* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.

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

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

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

{% endcut %}

{% cut "Редактирование правил фильтрации по MAC-адресу источника" %}

```
PATCH /firewall/hw_rules_mac/<id правила>
```

**Json-тело запроса (любые поля):**

```json5

{
    "mac": "string",
    "protocol": "integer",
    "comment": "string",
    "enabled": true | false    
}
```

* `mac` - MAC-адрес в формате `11:22:33:aa:bb:СС`;
* `protocol` - [номер](https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml) протокола сетевого уровня. Диапазон 1-65535. **Не указывайте протокол IPv4** (значение 2048), для фильтрации  на сетевом уровне используйте правила *По IP-адресу источника*, *По IP-адресу назначения*, *По IP-адресу источника и назначения*;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым;
* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.

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

{% endcut %}

{% cut "Удаление правил фильтрации по MAC-адресу источника" %}

```
DELETE /firewall/hw_rules_mac/<id правила>
```

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

{% endcut %}

{% cut "Получение правил фильтрации по IP-адресу источника" %}

```
GET /firewall/hw_rules_src_ip
```

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

```json5
[
    {
    "id": "string",
    "enabled": true | false,
    "source_ip": "string",
    "comment": "string"
    },
    ...
]
```

* `id` - идентификатор правила;
* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.
* `source_ip` - IP-адрес источника без маски в формате `192.168.1.1`;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым.

{% endcut %}

{% cut "Создание правил фильтрации по IP-адресу источника" %}

```
POST /firewall/hw_rules_src_ip
```

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

```json5
{
    "enabled": true | false,
    "source_ip": "string",
    "comment": "string"
}
```

* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.
* `source_ip` - IP-адрес источника без маски в формате `192.168.1.1`;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым.

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

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

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

{% endcut %}

{% cut "Редактирование правил фильтрации по IP-адресу источника" %}

```
PATCH /firewall/hw_rules_src_ip/<id правила>
```

**Json-тело запроса (любые поля):**

```json5
{
    "enabled": true | false,
    "source_ip": "string",
    "comment": "string"
}
```

* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.
* `source_ip` - IP-адрес источника без маски в формате `192.168.1.1`;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым.

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

{% endcut %}

{% cut "Удаление правил фильтрации по IP-адресу источника" %}

```
DELETE /firewall/hw_rules_src_ip/<id правила>
```

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

{% endcut %}

{% cut "Получение правил фильтрации по IP-адресу назначения" %}

```
GET /firewall/hw_rules_dst_ip
```

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

```json5
[
    {
    "id": "string",
    "enabled": true | false,
    "destination_ip": "string",
    "comment": "string"
    },
    ...
]
```

* `id` - идентификатор правила;
* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.
* `destination_ip` - IP-адрес назначения без маски в формате `192.168.1.1`;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым.

{% endcut %}

{% cut "Создание правил фильтрации по IP-адресу назначения" %}

```
POST /firewall/hw_rules_dst_ip
```

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

```json5
{
    "enabled": true | false,
    "destination_ip": "string",
    "comment": "string"
}
```

* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.
* `destination_ip` - IP-адрес назначения без маски в формате `192.168.1.1`;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым.

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

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

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

{% endcut %}

{% cut "Редактирование правил фильтрации по IP-адресу назначения" %}

```
PATCH /firewall/hw_rules_dst_ip/<id правила>
```

**Json-тело запроса (любые поля):**

```json5
{
    "enabled": true | false,
    "destination_ip": "string",
    "comment": "string"
}
```

* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.
* `destination_ip` - IP-адрес назначения без маски в формате `192.168.1.1`;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым.

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

{% endcut %}

{% cut "Удаление правил фильтрации по IP-адресу назначения" %}

```
DELETE /firewall/hw_rules_dst_ip/<id правила>
```

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

{% endcut %}

{% cut "Получение правил фильтрации по IP-адресу источника и назначения" %}

```
GET /firewall/hw_rules_src_dst_ip
```

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

```json5
[
    {
    "id": "string",
    "enabled": true | false,
    "source_ip": "string",
    "destination_ip": "string",
    "comment": "string"
    },
    ...
]
```

* `id` - идентификатор правила;
* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.
* `source_ip` - IP-адрес источника без маски в формате `192.168.1.2`
* `destination_ip` - IP-адрес назначения без маски в формате `192.168.1.1`;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым.

{% endcut %}

{% cut "Создание правил фильтрации по IP-адресу назначения" %}

```
POST /firewall/hw_rules_dst_ip
```

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

```json5
{
    "enabled": true | false,
    "source_ip": "string",
    "destination_ip": "string",
    "comment": "string"
}
```

* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.
* `source_ip` - IP-адрес источника без маски в формате `192.168.1.2`
* `destination_ip` - IP-адрес назначения без маски в формате `192.168.1.1`;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым.

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

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

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

{% endcut %}

{% cut "Редактирование правил фильтрации по IP-адресу назначения" %}

```
PATCH /firewall/hw_rules_src_dst_ip/<id правила>
```

**Json-тело запроса (любые поля):**

```json5
{
    "enabled": true | false,
    "source_ip": "string",
    "destination_ip": "string",
    "comment": "string"
}
```

* `enabled` - состояние правила:
  * `true` - включено;
  * `false` - выключено.
* `source_ip` - IP-адрес источника без маски в формате `192.168.1.2`
* `destination_ip` - IP-адрес назначения без маски в формате `192.168.1.1`;
* `comment` - комментарий. Максимальная длина - 256 символов. Может быть пустым.

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

{% endcut %}

{% cut "Удаление правил фильтрации по IP-адресу назначения" %}

```
DELETE /firewall/hw_rules_src_dst_ip/<id правила>
```

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

{% endcut %}

<!-- https://stash.ideco.dev/projects/UTM/repos/firewall-backend/browse/docs/hw_filter_api.md?at=refs%2Fheads%2F21_release -->

## Управление списками ACL

{% note info "" %}

ACL (Access Control List) - способ фильтрации трафика, применяемый при большом количестве правил. Он позволяет контролировать, какие данные могут проходить через устройство, а какие будут блокироваться. ACL анализирует пакеты по IP-адресам, портам и протоколам. Этот метод нельзя настроить через веб-интерфейс, управление осуществляется только через API.

{% endnote %}

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

```
GET /acl/rules
```

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

```json5
[
    {
        "name": "string",
        "value": [
            {
                "saddr": "string",
                "daddr": "string",
                "proto": "tcp" | "udp" | "ip" | "icmp",
                "sport_min": "integer",
                "sport_max": "integer",
                "dport_min": "integer",
                "dport_max": "integer",
                "action": "allow" | "deny"
            }
        ],
        "id": "string"
    }, 
    ...
]
```

* `id` - идентификатор правила;
* `name` - название правила;
* `saddr` - сеть источника, указанная в формате CIDR (адрес сети и префикс маски). Например, `10.11.12.0/24`. Допустимо - `0.0.0.0/0`;
* `daddr` - сеть назначения, указанная в формате CIDR (адрес сети и префикс маски). Например: `8.8.8.8/32`. Допустимо - `0.0.0.0/0`;
* `proto` - тип протокола. Допустимые значения:
  * `tcp` - протокол **TCP**;
  * `udp` - протокол **UDP**;
  * `ip` - протокол **IP**;
  * `icmp` - протокол **ICMP**.
* `sport_min` - порт источника начальный (0-65535). Для протоколов без порта - `0`;
* `sport_max` - порт источника конечный (0-65535). Для протоколов без порта - `0`;
* `dport_min` - порт назначения начальный (0-65535). Для протоколов без порта - `0`;
* `dport_max` - порт назначения конечный (0-65535). Для протоколов без порта - `0`;
* `action` - действие для сетевых пакетов, если для них нет подходящего правила блокировки:
  * `allow` - пропускать; 
  * `deny` - блокировать.

{% endcut %}

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

```
POST /acl/rules
```

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

```json5
{
    "name": "string",
    "value": [
        {
            "saddr": "string",
            "daddr": "string",
            "proto": "tcp" | "udp" | "ip" | "icmp",
            "sport_min": "integer",
            "sport_max": "integer",
            "dport_min": "integer",
            "dport_max": "integer",
            "action": "allow" | "deny"
        }
    ]
}
```

* `name` - название правила;
* `saddr` - сеть источника, указанная в формате CIDR (адрес сети и префикс маски). Например, `10.11.12.0/24`. Допустимо - `0.0.0.0/0`;
* `daddr` - сеть назначения, указанная в формате CIDR (адрес сети и префикс маски). Например: `8.8.8.8/32`. Допустимо - `0.0.0.0/0`;
* `proto` - тип протокола. Допустимые значения:
  * `tcp` - протокол **TCP**;
  * `udp` - протокол **UDP**;
  * `ip` - протокол **IP**;
  * `icmp` - протокол **ICMP**.
* `sport_min` - порт источника начальный (0-65535). Для протоколов без порта - `0`;
* `sport_max` - порт источника конечный (0-65535). Для протоколов без порта - `0`;
* `dport_min` - порт назначения начальный (0-65535). Для протоколов без порта - `0`;
* `dport_max` - порт назначения конечный (0-65535). Для протоколов без порта - `0`;
* `action` - действие для сетевых пакетов, если для них нет подходящего правила блокировки:
  * `allow` - пропускать; 
  * `deny` - блокировать.

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

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

{% endcut %}  

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

```
PATCH /acl/rules/<id правила>
```

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

```json5
{
    "name": "string",
    "value": [
        {
            "saddr": "string",
            "daddr": "string",
            "proto": "tcp" | "udp" | "ip" | "icmp",
            "sport_min": "integer",
            "sport_max": "integer",
            "dport_min": "integer",
            "dport_max": "integer",
            "action": "allow" | "deny"
        }
    ]
}
```

* `name` - название правила;
* `saddr` - сеть источника, указанная в формате CIDR (адрес сети и префикс маски). Например, `10.11.12.0/24`. Допустимо - `0.0.0.0/0`;
* `daddr` - сеть назначения, указанная в формате CIDR (адрес сети и префикс маски). Например: `8.8.8.8/32`. Допустимо - `0.0.0.0/0`;
* `proto` - тип протокола. Допустимые значения:
  * `tcp` - протокол **TCP**;
  * `udp` - протокол **UDP**;
  * `ip` - протокол **IP**;
  * `icmp` - протокол **ICMP**.
* `sport_min` - порт источника начальный (0-65535). Для протоколов без порта - `0`;
* `sport_max` - порт источника конечный (0-65535). Для протоколов без порта - `0`;
* `dport_min` - порт назначения начальный (0-65535). Для протоколов без порта - `0`;
* `dport_max` - порт назначения конечный (0-65535). Для протоколов без порта - `0`;
* `action` - действие для сетевых пакетов, если для них нет подходящего правила блокировки:
  * `allow` - пропускать; 
  * `deny` - блокировать.
**Ответ на успешный запрос**: 200 ОК

{% endcut %}  

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

```
DELETE /acl/rules/<id правила>
```

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

{% endcut %}  

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

```
GET /acl/acl-order
```

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

```json5
{
    "acl_ordered_list": 
    [
        {
            "src": ["string"],
            "hip": ["string"],
            "acl": "string"
        }
    ],
  ...
}
```

* `src` - источник содержит список алиасов групп пользователей или групп безопасности, таких как AD;
* `hip` - HIP-профили;
* `acl` - идентификатор правила ACL.

{% endcut %}  

{% cut "Изменение упорядоченного списка ACL правил" %}

```
PATCH /acl/acl-order
```

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

```json5
{
    "acl_ordered_list": 
    [
        {
            "src": ["string"],
            "hip": ["string"],
            "acl": "string"
        }
    ]
}
```

* `src` - источник содержит список алиасов групп пользователей или групп безопасности, таких как AD;
* `hip` - HIP-профили;
* `acl` - идентификатор правил ACL.

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

{% endcut %}

{% cut "Получение настроек ACL" %}

```
GET /acl/acl-state
```

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

```json5
{
    "enabled": true | false,
    "default_action": "allow" | "deny",
    "logging_enabled": true | false
}
```

* `enabled` - действие обработки правила:
  * `true` - разрешить;
  * `false` - запретить для всего трафика.
* `default_action` - действие для сетевых пакетов, если для них нет подходящего правила блокировки:
  * `allow` - пропускать; 
  * `deny` - блокировать.
* `logging_enabled` - логирование действий по обработке трафика:
  * `true` - разрешить;
  * `false` - запретить.

{% endcut %}  

{% cut "Изменение настроек ACL" %}

```
PATCH /acl/acl-state
```

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

```json5
{
    "enabled": true | false,
    "default_action": "deny" | "allow",
    "logging_enabled": true | false
}
```

* `enabled` - действие обработки правила:
  * `true` - разрешить;
  * `false` - запретить для всего трафика.
* `default_action` - действие для сетевых пакетов, если для них нет подходящего правила блокировки:
  * `allow` - пропускать; 
  * `deny` - блокировать.
* `logging_enabled` - логирование действий по обработке трафика:
  * `true` - разрешить;
  * `false` - запретить.

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

{% endcut %}

<!-- https://stash.ideco.dev/projects/UTM/repos/acl-backend/browse/docs/api.md?at=refs%2Fheads%2F21_release -->

## Управление настройками ALG NAT

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

```
GET /firewall/alg_nat_settings
```

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

```json5
{
  "h323_enabled": true | false,
  "sip_enabled": true | false,
  "sip_ports": ["integer"]
}
```

* `h323_enabled` - опция **H.323**:
  * `true` - включена;
  * `false` - выключена.
* `sip_enabled` - опция **SIP**:
  * `true` - включена;
  * `false` - выключена.
* `sip_ports` - список портов для SIP. Диапазон значений - от 1 до 65535. Не может быть пустым и содержать более 10 элементов, дублирующиеся значения не допускаются.

{% endcut %}

{% cut "Изменение настроек" %}

```
PATCH /firewall/alg_nat_settings
```

**Json-тело запроса (все или часть полей):**

```json5
{
  "h323_enabled": true | false,
  "sip_enabled": true | false,
  "sip_ports": ["integer"]
}
```

* `h323_enabled` - опция **H.323**:
  * `true` - включена;
  * `false` - выключена.
* `sip_enabled` - опция **SIP**:
  * `true` - включена;
  * `false` - выключена.
* `sip_ports` - список портов для SIP. Диапазон значений - от 1 до 65535. Не может быть пустым и содержать более 10 элементов, дублирующиеся значения не допускаются.


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

{% endcut %}


