---
canonical: https://docs.ideco.ru/v22/ru/ngfw/api/vpn-servers-api
---

# VPN-подключения

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

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

```
GET /vpn_servers/status
```

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

```json5
{
    "name": "string",
    "status": "string",
    "msg": ["string"]
}
```

* `name` - название службы;
* `status` - статус службы;
* `msg` - список сообщений, объясняющий текущее состояние.

{% endcut %}

## Настройка VPN-подключения 

### SSTP

{% cut "Получение настроек VPN-подключения" %}

```
GET /vpn_servers/settings
```

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

```json5
{
  "sstp": {
      "enabled": true | false,
      "domain": "string",
      "port": integer
  },
  "network": "string",
  "zone": "string" | null,
  "dns_suffix": "string",
  "netflow_index": integer,
  "expired_after_seconds": integer
}
```

* `sstp` - настройки **SSTP** в разделе **Пользователи → VPN-подключения → Основное**:
  * `enabled` - состояние опции **SSTP**:
    * `true` - включен;
    * `false` - выключен.
  * `domain` - доменное имя, присвоенное внешнему интерфейсу. Если домен еще не задан, то `null`;
  * `port` - порт для подключения, одно из предустановленных значений (`1443`, `2443`, `3443`, `4443`).
* `network` - сеть, из которой VPN-серверы раздают адреса. Первый адрес в этой сети - всегда адрес самого сервера;
* `zone` - зона для Lvpn0-интерфейса. Если зона не назначена, то `null`;
* `dns_suffix` - DNS-суффикс, передаваемый в Ideco Client. Если не назначен, то может быть пустой строкой;
* `netflow_index` - целое число от 0 до 65535, индекс сетевого подключения для [Netflow](https://docs.ideco.ru/v22/ru/ngfw/settings/services/netflow);
* `expired_after_seconds` - количество секунд, после которого VPN сессия считается просроченной.

{% endcut %}

{% cut "Изменение настроек VPN-подключения" %}

```
PATCH /vpn_servers/settings
```

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

```json5
{
  "sstp": {
      "enabled": true | false,
      "domain": "string",
      "port": integer
  },
  "network": "string",
  "zone": "string" | null,
  "dns_suffix": "string",
  "netflow_index": integer,
  "expired_after_seconds": integer
}
```

* `sstp` - настройки **SSTP** в разделе **Пользователи → VPN-подключения → Основное**:
  * `enabled` - состояние опции **SSTP**:
    * `true` - включен;
    * `false` - выключен.
  * `domain` - доменное имя, присвоенное внешнему интерфейсу. Если домен еще не задан, то `null`;
  * `port` - порт для подключения, одно из предустановленных значений (`1443`, `2443`, `3443`, `4443`).
* `network` - сеть, из которой VPN-серверы раздают адреса. Первый адрес в этой сети - всегда адрес самого сервера;
* `zone` - зона для Lvpn0-интерфейса. Если зона не назначена, то `null`;
* `dns_suffix` - DNS-суффикс, передаваемый в Ideco Client. Если не назначен, то может быть пустой строкой;
* `netflow_index` - целое число от 0 до 65535, индекс сетевого подключения для [Netflow](https://docs.ideco.ru/v22/ru/ngfw/settings/services/netflow);
* `expired_after_seconds` - количество секунд, после которого VPN сессия считается просроченной.

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

{% endcut %}

### L2TP/IPSec

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

```
GET /ipsec/road_warriors/settings
```

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

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

* `enabled` - авторизация L2TP/IPSec:
  * `true` - включена;
  * `false` - выключена.
* `psk` - секретная фраза (PSK-ключ).

{% endcut %}

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

```
PATCH /ipsec/road_warriors/settings
```

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

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

* `enabled` - авторизация L2TP/IPSec:
  * `true` - включена;
  * `false` - выключена.
* `psk` - секретная фраза (PSK-ключ).

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

{% endcut %}

### IKEv2/IPSec

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

```
GET /ipsec/road_warriors_ikev2/settings
```

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

```json5
{
  "enabled": true | false,
  "domain": "string" | null,
  "auth_method": ["password", "cert"],
  "ca_chain": "string",
  "ocsp_uri": "string"
}
```

* `enabled` - авторизация IKEv2:
  * `true` - включена;
  * `false` - выключена.
* `domain` - домен или IP-адрес для подключения. Может быть `null`, только если `enabled` равен `false`;
* `auth_method` - тип аутентификации по IKEv2:
  * `password` - вход по логину и паролю;
  * `cert` - вход по сертификату пользователя.
* `ca_chain` - корневой сертификат или цепочка сертификатов. Может быть пустой строкой, если аутентификация по паролю;
* `ocsp_uri` - адрес службы OCSP (Online Certificate Status Protocol) для проверки отзыва сертификата. Может быть пустой строкой.


{% endcut %}

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

```
PATCH /ipsec/road_warriors_ikev2/settings
```

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

```json5
{
  "enabled": true | false,
  "domain": "string" | null,
  "auth_method": ["password", "cert"],
  "ca_chain": "string",
  "ocsp_uri": "string"
}
```

* `enabled` - авторизация IKEv2:
  * `true` - включена;
  * `false` - выключена.
* `domain` - домен или IP-адрес для подключения. Может быть `null`, только если `enabled` равен `false`;
* `auth_method` - тип аутентификации по IKEv2:
  * `password` - вход по логину и паролю;
  * `cert` - вход по сертификату пользователя.
* `ca_chain` - корневой сертификат или цепочка сертификатов. Может быть пустой строкой, если аутентификация по паролю;
* `ocsp_uri` - адрес службы OCSP (Online Certificate Status Protocol) для проверки отзыва сертификата. Может быть пустой строкой.


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

{% endcut %}

### Скрипты для подключения пользователей

{% cut "Проверка доступности скрипта по SSTP" %}

```
GET /vpn_servers/powershell/status
```

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

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

{% endcut %}

{% cut "Получение скрипта подключения по SSTP" %}

```
GET /vpn_servers/powershell/sstp
```

**Ответ на успешный запрос:** создается скрипт для подключения пользователей по SSTP. В ответе отображается заголовок `Content-Disposition: attachment; filename=\"Ideco_NGFW_VPN_SSTP.ps1`

{% endcut %}

{% cut "Проверка доступности скриптов по IKEv2/IPSec и L2TP/IPSec" %}

```
GET /ipsec/powershell/status
```

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

```json5
{
  "ikev2_available": true | false,
  "l2tp_available": true | false
}
```

* `ikev2_available` - скрипт подключения по IKEv2:
  * `true` - доступен;
  * `false` - недоступен.
* `l2tp_available` - скрипт подключения по L2TP/IPSec:
  * `true` - доступен;
  * `false` - недоступен.

{% endcut %}

{% cut "Получение скрипта подключения по IKEv2/IPSec" %}

```
GET /ipsec/powershell/ikev2
```

**Ответ на успешный запрос:** скрипт для подключения пользователей по IKEv2.

В ответе выставляется заголовок `Content-Disposition: attachment; filename="Ideco_NGFW Novum_VPN_IKEv2.ps1"`.

{% endcut %}

{% cut "Получение скрипта подключения по L2TP/IPSec" %}

```
GET /ipsec/powershell/l2tp
```

**Ответ на успешный запрос:** скрипт для подключения пользователей по L2TP/IPSec.

В ответе выставляется заголовок `Content-Disposition: attachment; filename="Ideco_NGFW Novum_VPN_L2TP.ps1"`.

{% endcut %}

## Управление правилами доступа к VPN

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

```
GET /vpn_servers/access_rules
```

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

```json5
[
    {
        "id": "string",
        "enabled": true | false,
        "title": "string",
        "sources": ["string"],
        "objects": ["string"],
        "vpns": ["string"],
        "action": "allow" | "deny",
        "two_factor": "user_2fa.smsaero" | "user_2fa.totp" | "user_2fa.multifactor" | "user_2fa.not_required",
        "comment": "string",
        "hip_profile_required": "string",
        "allowed_ca_certs": ["string"],
        "binding": true | false
    },
    ...
]
```

* `id` - идентификатор правила;
* `enabled` - статус правила: 
  * `true` - включено;
  * `false` - выключено.
* `title` - название правила, может быть пустым, но не должно превышать 42 символов;
* `sources` - список источников подключения, не может быть пустым, допустимые типы:
  * `any` - любой источник подключения (если указан алиас `any`, то других алиасов в списке быть не должно);
  * `ip.id` - IP-адрес;
  * `ip_range.id` - диапазон IP-адресов;
  * `subnet.id` - подсеть;
  * `ip_address_list.id` - список IP-адресов;
  * `list_of_iplists.id` - cписок стран и континентов;
  * `domain.id` - домен.
* `objects` - список объектов, для которых будут назначены адреса, не может быть пустым. Объекты могут быть:
  * `any` - для любых объектов (если указан объект `any`, то других объектов в списке быть не должно);
  * `user.id` - для пользователей;
  * `ad_user.guid` - для пользователей AD;
  * `group.id` - для групп;
  * `security_group.guid` - для групп безопасности AD.
* `vpns` - список типов VPN (протоколов подключения), не может быть пустым. Допустимые варианты:
  * `any` - любой тип подключения (если указан `any`, то других типов VPN в списке быть не должно);
  * `pptp` - подключение по PPTP не поддерживается. Оставлен только для совместимости и может быть только в отключенных правилах доступа по VPN;
  * `l2tp` - подключение по L2TP;
  * `sstp` - подключение по SSTP;
  * `ikev2`- подключение по IKEv2;
  * `agent-vpn-ng` - подключение по Wireguard (Ideco Client);
  * `agent-vpn-tls` - подключение по TLS (Ideco Client).
* `action` - действие при совпадении источника, объекта и типа VPN, не может быть пустым, допустимые варианты:
  * `allow` - разрешить;
  * `deny` - запретить.
* `two_factor` - тип требуемой двухфакторной аутентификации, не может быть пустым. Должен быть `not_required`, если в поле `action` выбран `deny`. Допустимые варианты:
  * `user_2fa.smsaero` - аутентификация при помощи ввода кода из СМС;
  * `user_2fa.totp` - аутентификация сканированием QR-кода или использованием токена;
  * `user_2fa.multifactor` - аутентификация подтверждением личности в стороннем приложении;
  * `user_2fa.not_required` - двухфакторная аутентификация не требуется.
* `comment` - комментарий, может быть пустым, но не должен превышать 256 символов;
* `hip_profile_required` - идентификатор требуемого HIP-профиля.  Может быть заполнен, если `vpns` содержит `agent-vpn-ng` или `agent-vpn-tls`;
* `allowed_ca_certs` - список идентификаторов CA-сертификатов для трехфакторной аутентификации. Может быть пустым. Допустимые значения:
   * `agent_3fa_cert.id` - CA-сертификат.
* `binding` - привязка CA-сертификата:
  * `true` - включена;
  * `false` - выключена.
При включенной привязке поле `allowed_ca_certs` не может быть пустым.

{% endcut %}

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

```
POST /vpn_servers/access_rules?anchor_item_id={string}&insert_after={true|false}
```

Параметры запроса:

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

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

```json5
{
    "enabled": true | false,
    "title": "string",
    "sources": ["string"],
    "objects": ["string"],
    "vpns": ["string"],
    "action": "allow" | "deny",
    "two_factor": "user_2fa.smsaero" | "user_2fa.totp" | "user_2fa.multifactor" | "user_2fa.not_required",
    "comment": "string",
    "hip_profile_required": "string",
    "allowed_ca_certs": ["string"],
    "binding": true | false
}
```

* `enabled` - статус правила: 
  * `true` - включено;
  * `false` - выключено.
* `title` - название правила, может быть пустым, но не должно превышать 42 символов;
* `sources` - список источников подключения, не может быть пустым, допустимые типы:
  * `any` - любой источник подключения (если указан алиас `any`, то других алиасов в списке быть не должно);
  * `ip.id` - IP-адрес;
  * `ip_range.id` - диапазон IP-адресов;
  * `subnet.id` - подсеть;
  * `ip_address_list.id` - список IP-адресов;
  * `list_of_iplists.id` - cписок стран и континентов;
  * `domain.id` - домен.
* `objects` - список объектов, для которых будут назначены адреса, не может быть пустым. Объекты могут быть:
  * `any` - для любых объектов (если указан объект `any`, то других объектов в списке быть не должно);
  * `user.id` - для пользователей;
  * `ad_user.guid` - для пользователей AD;
  * `group.id` - для групп;
  * `security_group.guid` - для групп безопасности AD.
* `vpns` - список типов VPN (протоколов подключения), не может быть пустым. Допустимые варианты:
  * `any` - любой тип подключения (если указан `any`, то других типов VPN в списке быть не должно);
  * `pptp` - подключение по PPTP не поддерживается. Оставлен только для совместимости и может быть только в отключенных правилах доступа по VPN;
  * `l2tp` - подключение по L2TP;
  * `sstp` - подключение по SSTP;
  * `ikev2`- подключение по IKEv2;
  * `agent-vpn-ng` - подключение по Wireguard (Ideco Client);
  * `agent-vpn-tls` - подключение по TLS (Ideco Client).
* `action` - действие при совпадении источника, объекта и типа VPN, не может быть пустым, допустимые варианты:
  * `allow` - разрешить;
  * `deny` - запретить.
* `two_factor` - тип требуемой двухфакторной аутентификации, не может быть пустым. Должен быть `not_required`, если в поле `action` выбран `deny`. Допустимые варианты:
  * `user_2fa.smsaero` - аутентификация при помощи ввода кода из СМС;
  * `user_2fa.totp` - аутентификация сканированием QR-кода или использованием токена;
  * `user_2fa.multifactor` - аутентификация подтверждением личности в стороннем приложении;
  * `user_2fa.not_required` - двухфакторная аутентификация не требуется.
* `comment` - комментарий, может быть пустым, но не должен превышать 256 символов;
* `hip_profile_required` - идентификатор требуемого HIP-профиля.  Может быть заполнен, если `vpns` содержит `agent-vpn-ng` или `agent-vpn-tls`;
* `allowed_ca_certs` - список идентификаторов CA-сертификатов для трехфакторной аутентификации. Может быть пустым. Допустимые значения:
   * `agent_3fa_cert.id` - CA-сертификат.
* `binding` - привязка CA-сертификата:
  * `true` - включена;
  * `false` - выключена.
При включенной привязке поле `allowed_ca_certs` не может быть пустым.

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

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

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

{% endcut %}

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

```
PATCH /vpn_servers/access_rules/<id правила>
```

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

```json5
{
    "enabled": true | false,
    "title": "string",
    "sources": ["string"],
    "objects": ["string"],
    "vpns": ["string"],
    "action": "allow" | "deny",
    "two_factor": "user_2fa.smsaero" | "user_2fa.totp" | "user_2fa.multifactor" | "user_2fa.not_required",
    "comment": "string",
    "hip_profile_required": "string",
    "allowed_ca_certs": ["string"],
    "binding": true | false
}
```

* `enabled` - статус правила: 
  * `true` - включено;
  * `false` - выключено.
* `title` - название правила, может быть пустым, но не должно превышать 42 символов;
* `sources` - список источников подключения, не может быть пустым, допустимые типы:
  * `any` - любой источник подключения (если указан алиас `any`, то других алиасов в списке быть не должно);
  * `ip.id` - IP-адрес;
  * `ip_range.id` - диапазон IP-адресов;
  * `subnet.id` - подсеть;
  * `ip_address_list.id` - список IP-адресов;
  * `list_of_iplists.id` - cписок стран и континентов;
  * `domain.id` - домен.
* `objects` - список объектов, для которых будут назначены адреса, не может быть пустым. Объекты могут быть:
  * `any` - для любых объектов (если указан объект `any`, то других объектов в списке быть не должно);
  * `user.id` - для пользователей;
  * `ad_user.guid` - для пользователей AD;
  * `group.id` - для групп;
  * `security_group.guid` - для групп безопасности AD.
* `vpns` - список типов VPN (протоколов подключения), не может быть пустым. Допустимые варианты:
  * `any` - любой тип подключения (если указан `any`, то других типов VPN в списке быть не должно);
  * `pptp` - подключение по PPTP не поддерживается. Оставлен только для совместимости и может быть только в отключенных правилах доступа по VPN;
  * `l2tp` - подключение по L2TP;
  * `sstp` - подключение по SSTP;
  * `ikev2`- подключение по IKEv2;
  * `agent-vpn-ng` - подключение по Wireguard (Ideco Client);
  * `agent-vpn-tls` - подключение по TLS (Ideco Client).
* `action` - действие при совпадении источника, объекта и типа VPN, не может быть пустым, допустимые варианты:
  * `allow` - разрешить;
  * `deny` - запретить.
* `two_factor` - тип требуемой двухфакторной аутентификации, не может быть пустым. Должен быть `not_required`, если в поле `action` выбран `deny`. Допустимые варианты:
  * `user_2fa.smsaero` - аутентификация при помощи ввода кода из СМС;
  * `user_2fa.totp` - аутентификация сканированием QR-кода или использованием токена;
  * `user_2fa.multifactor` - аутентификация подтверждением личности в стороннем приложении;
  * `user_2fa.not_required` - двухфакторная аутентификация не требуется.
* `comment` - комментарий, может быть пустым, но не должен превышать 256 символов;
* `hip_profile_required` - идентификатор требуемого HIP-профиля.  Может быть заполнен, если `vpns` содержит `agent-vpn-ng` или `agent-vpn-tls`;
* `allowed_ca_certs` - список идентификаторов CA-сертификатов для трехфакторной аутентификации. Может быть пустым. Допустимые значения:
   * `agent_3fa_cert.id` - CA-сертификат.
* `binding` - привязка CA-сертификата:
  * `true` - включена;
  * `false` - выключена.
При включенной привязке поле `allowed_ca_certs` не может быть пустым.

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

{% endcut %}

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

```
DELETE /vpn_servers/access_rules/<id правила>
```

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

{% endcut %}

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

```
PATCH /vpn_servers/access_rules/move
```

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

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

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

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

{% endcut %}

## Управление правилами выдачи IP-адресов

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

```
GET /vpn_servers/lease_rules
```

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

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

* `id` - идентификатор правила получения адресов;
* `title` - название правила, может быть пустым, но не должно превышать 42 символов;
* `objects` - список объектов, для которых будут назначены адреса, не может быть пустым. Объекты могут быть следующими:
  * `any` - для любых объектов (если указан объект `any`, то других объектов в списке быть не должно);
  * `user.id` - для пользователей;
  * `group.id` - для групп;
  * `security_group.guid` - для групп безопасности AD.
* `address` - IP-адрес, который будет назначен пользователю, или адрес сети, в которой ему будет выделен IP-адрес, если пользователь соответствует списку объектов. В строке может быть указан IP-адрес без маски или подсеть (значение не может быть пустым и не должно повторяться);
* `comment` - комментарий, может быть пустым, но не должен превышать 256 символов;
* `enabled` - статус правила: 
  * `true` - включено;
  * `false` - выключено.

{% endcut %}

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

```
POST /vpn_servers/lease_rules?anchor_item_id=<string>&insert_after=<true|false>
```

Параметры запроса:

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

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

```json5
{
  "title": "string",
  "objects": ["string"],
  "address": "string",
  "comment": "string",
  "enabled": true | false
}
```

* `title` - название правила, может быть пустым, но не должно превышать 42 символов;
* `objects` - список объектов, для которых будут назначены адреса, не может быть пустым. Объекты могут быть следующими:
  * `any` - для любых объектов (если указан объект `any`, то других объектов в списке быть не должно);
  * `user.id` - для пользователей;
  * `group.id` - для групп;
  * `security_group.guid` - для групп безопасности AD.
* `address` - IP-адрес, который будет назначен пользователю, или адрес сети, в которой ему будет выделен IP-адрес, если пользователь соответствует списку объектов. В строке может быть указан IP-адрес без маски или подсеть (значение не может быть пустым и не должно повторяться);
* `comment` - комментарий, может быть пустым, но не должен превышать 256 символов;
* `enabled` - статус правила: 
  * `true` - включено;
  * `false` - выключено.

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

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

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

{% endcut %}

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

```
PATCH /vpn_servers/lease_rules/<id правила>
```

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

```json5
{
  "title": "string",
  "objects": ["string"],
  "address": "string",
  "comment": "string",
  "enabled": true | false
}
```

* `title` - название правила, может быть пустым, но не должно превышать 42 символов;
* `objects` - список объектов, для которых будут назначены адреса, не может быть пустым. Объекты могут быть следующими:
  * `any` - для любых объектов (если указан объект `any`, то других объектов в списке быть не должно);
  * `user.id` - для пользователей;
  * `group.id` - для групп;
  * `security_group.guid` - для групп безопасности AD.
* `address` - IP-адрес, который будет назначен пользователю, или адрес сети, в которой ему будет выделен IP-адрес, если пользователь соответствует списку объектов. В строке может быть указан IP-адрес без маски или подсеть (значение не может быть пустым и не должно повторяться);
* `comment` - комментарий, может быть пустым, но не должен превышать 256 символов;
* `enabled` - статус правила: 
  * `true` - включено;
  * `false` - выключено.

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

{% endcut %}

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

```
DELETE /vpn_servers/lease_rules/<id правила>
```

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

{% endcut %}

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

```
PATCH /vpn_servers/lease_rules/move
```

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

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

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

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

{% endcut %}

## Работа с таблицей VPN

{% cut "Получение типов VPN, используемых в таблице Доступ по VPN" %}

```
GET /vpn_servers/vpns_in_access_rules
```

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

```json5
{
   "l2tp": true | false,
   "sstp": true | false,
   "ikev2": true | false,
   "agent-vpn-ng": true | false,
   "agent-vpn-tls": true | false,
   "win-terminal-agent": true | false
}
```

* `l2tp` - подключение по L2TP:
  * `true` - используется в таблице VPN;
  * `false` - не используется.
* `sstp` - подключение по SSTP:
  * `true` - используется в таблице VPN;
  * `false` - не используется.
* `ikev2` - подключение по IKEv2:
  * `true` - используется в таблице VPN;
  * `false` - не используется.
* `agent-vpn-ng` - подключение по Wireguard (Ideco Client):
  * `true` - используется в таблице VPN;
  * `false` - не используется.
* `agent-vpn-tls` - подключение по TLS (Ideco Client):
  * `true` - используется в таблице VPN;
  * `false` - не используется.
* `win-terminal-agent` - авторизация терминального сервера Windows:
  * `true` - используется в таблице VPN;
  * `false` - не используется.

{% endcut %}

{% cut "Получение типов двуфакторной авторизации, используемых в таблице Доступ по VPN" %}

```
GET /vpn_servers/two_factor_in_access_rules
```

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

```json5
{
   "user_2fa.smsaero": true | false,
   "user_2fa.totp": true | false,
   "user_2fa.multifactor": true | false
}
```

* `user_2fa.smsaero` - аутентификация при помощи ввода кода из СМС:
  * `true` - используется в таблице VPN;
  * `false` - не используется.
* `user_2fa.totp` - аутентификация сканированием QR-кода или использованием токена:
  * `true` - используется в таблице VPN;
  * `false` - не используется.
* `user_2fa.multifactor` - аутентификация подтверждением личности в стороннем приложении:
  * `true` - используется в таблице VPN;
  * `false` - не используется.

{% endcut %}

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

```
GET /vpn_servers/user_access_rules/<id пользователя>
```

* `id` - идентификатор пользователя из дерева или пользователя Active Directory с префиксом (`user.id.`, `ad_user.guid.`).

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

```json5
[
    {
        "id": "string",
        "enabled": true | false,
        "title": "string",
        "sources": ["string"],
        "objects": ["string"],
        "vpns": ["string"],
        "action": "allow" | "deny",
        "two_factor": "user_2fa.smsaero" | "user_2fa.totp" | "user_2fa.multifactor" | "user_2fa.not_required",
        "comment": "string",
        "hip_profile_required": "string",
        "allowed_ca_certs": ["string"],
        "binding": true | false
    },
    ...
]
```

* `id` - идентификатор правила;
* `enabled` - статус правила: 
  * `true` - включено;
  * `false` - выключено.
* `title` - название правила, может быть пустым, но не должно превышать 42 символов;
* `sources` - список источников подключения, не может быть пустым, допустимые типы:
  * `any` - любой источник подключения (если указан алиас `any`, то других алиасов в списке быть не должно);
  * `ip.id` - IP-адрес;
  * `ip_range.id` - диапазон IP-адресов;
  * `subnet.id` - подсеть;
  * `ip_address_list.id` - список IP-адресов;
  * `list_of_iplists.id` - cписок стран и континентов;
  * `domain.id` - домен.
* `objects` - список объектов, для которых будут назначены адреса, не может быть пустым. Объекты могут быть:
  * `any` - для любых объектов (если указан объект `any`, то других объектов в списке быть не должно);
  * `user.id` - для пользователей;
  * `ad_user.guid` - для пользователей AD;
  * `group.id` - для групп;
  * `security_group.guid` - для групп безопасности AD.
* `vpns` - список типов VPN (протоколов подключения), не может быть пустым. Допустимые варианты:
  * `any` - любой тип подключения (если указан `any`, то других типов VPN в списке быть не должно);
  * `pptp` - подключение по PPTP не поддерживается. Оставлен только для совместимости и может быть только в отключенных правилах доступа по VPN;
  * `l2tp` - подключение по L2TP;
  * `sstp` - подключение по SSTP;
  * `ikev2`- подключение по IKEv2;
  * `agent-vpn-ng` - подключение по Wireguard (Ideco Client);
  * `agent-vpn-tls` - подключение по TLS (Ideco Client).
* `action` - действие при совпадении источника, объекта и типа VPN, не может быть пустым, допустимые варианты:
  * `allow` - разрешить;
  * `deny` - запретить.
* `two_factor` - тип требуемой двухфакторной аутентификации, не может быть пустым. Должен быть `not_required`, если в поле `action` выбран `deny`. Допустимые варианты:
  * `user_2fa.smsaero` - аутентификация при помощи ввода кода из СМС;
  * `user_2fa.totp` - аутентификация сканированием QR-кода или использованием токена;
  * `user_2fa.multifactor` - аутентификация подтверждением личности в стороннем приложении;
  * `user_2fa.not_required` - двухфакторная аутентификация не требуется.
* `comment` - комментарий, может быть пустым, но не должен превышать 256 символов;
* `hip_profile_required` - идентификатор требуемого HIP-профиля.  Может быть заполнен, если `vpns` содержит `agent-vpn-ng` или `agent-vpn-tls`;
* `allowed_ca_certs` - список идентификаторов CA-сертификатов для трехфакторной аутентификации. Может быть пустым. Допустимые значения:
   * `agent_3fa_cert.id` - CA-сертификат.
* `binding` - привязка CA-сертификата:
  * `true` - включена;
  * `false` - выключена.
При включенной привязке поле `allowed_ca_certs` не может быть пустым.

 Для несуществующего пользователя или пользователя, для которого нельзя получить полный список групп, возвращается пустой список правил.

{% endcut %}

## Передача маршрутов

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

```
GET /vpn_servers/route_rules
```

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

```json
[
 {
    "id": "string",
    "title": "string",
    "objects": ["string"],
    "mode": "all" | "utm" | "local" | "none" | "custom",
    "networks": ["string"],
    "excluded_networks": ["string"],
    "comment": "string",
    "enabled": true | false
  },
  ...
]
```

* `id` - идентификатор правила;
* `title` - наименование правила, может быть пустым, максимум 42 символа;
* `objects` - пользователи и группы (пользователи, группы, группы безопасности AD), не может быть пустым, допустимые типы алиасов:
  * `any` - для любых объектов (если указан объект `any`, то других объектов в списке быть не должно);
  * `user.id` - для пользователей;
  * `group.id` - для групп;
  * `security_group.guid` - для групп безопасности AD.
* `mode`* режим отправки маршрутов:
  * `all` - отправлять весь трафик на Ideco NGFW Novum (маршрут `0.0.0.0/0`);
  * `utm` - отправлять маршруты до всех локальных сетей;
  * `local` - отправлять маршруты до локальных сетей Ideco NGFW Novum;
  * `none` - не отправлять;
  * `custom` - отправлять только указанные.
* `networks` - список подсетей, маршруты до которых передаются в режиме `custom`. Допускаются объекты подсетей, IP-адресов, доменов;
* `excluded_networks` - исключение адресов из маршрутов. Допускаются объекты подсетей, IP-адресов, доменов;
* `comment` - комментарий, может быть пустым, максимум 256 символов;
* `enabled` - статус правила:
  * `true` - включено;
  * `false` - выключено.
  
{% endcut %}

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

```
POST /vpn_servers/route_rules?anchor_item_id={string}&insert_after={true|false}
```

Параметры запроса:

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

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

```json5
{
    "title": "string",
    "objects": ["string"],
    "mode": "all" | "utm" | "local" | "none" | "custom",
    "networks": ["string"],
    "excluded_networks": ["string"],
    "comment": "string",
    "enabled": true | false
}
```

* `title` - наименование правила, может быть пустым, максимум 42 символа;
* `objects` - пользователи и группы (пользователи, группы, группы безопасности AD), не может быть пустым, допустимые типы объектов:
  * `any` - для любых объектов (если указан объект `any`, то других объектов в списке быть не должно);
  * `user.id` - для пользователей;
  * `group.id` - для групп;
  * `security_group.guid` - для групп безопасности AD.
* `mode` - режим отправки маршрутов:
  * `all` - отправлять весь трафик на Ideco NGFW Novum (маршрут `0.0.0.0/0`);
  * `utm` - отправлять маршруты до всех локальных сетей;
  * `local` - отправлять маршруты до локальных сетей Ideco NGFW Novum;
  * `none` - не отправлять;
  * `custom` - отправлять только указанные.
* `networks` - список подсетей, маршруты до которых передаются в режиме `custom`. Допускаются объекты подсетей, IP-адресов, доменов;
* `excluded_networks` - исключение адресов из маршрутов. Допускаются объекты подсетей, IP-адресов, доменов;
* `comment` - комментарий, может быть пустым, максимум 256 символов;
* `enabled` - статус правила: 
  * `true` - включено;
  * `false` - выключено.

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

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

* `id` - уникальный идентификатор добавленного правила.

{% endcut %}

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

```
PATCH /vpn_servers/route_rules/<id правила>
```
**Json-тело запроса (все или некоторые поля):**

```json5
  {
    "title": "string",
    "objects": ["string"],
    "mode": "all" | "utm" | "local" | "none" | "custom",
    "networks": ["string"],
    "excluded_networks": ["string"],
    "comment": "string",
    "enabled": true | false
  }
```

* `title` - наименование правила, может быть пустым, максимум 42 символа;
* `objects` - пользователи и группы (пользователи, группы, группы безопасности AD), не может быть пустым, допустимые типы алиасов:
  * `any` - для любых объектов (если указан объект `any`, то других объектов в списке быть не должно);
  * `user.id` - для пользователей;
  * `group.id` - для групп;
  * `security_group.guid` - для групп безопасности AD.
* `mode` - режим отправки маршрутов:
  * `all` - отправлять весь трафик на Ideco NGFW Novum (маршрут `0.0.0.0/0`);
  * `utm` - отправлять маршруты до всех локальных сетей;
  * `local` - отправлять маршруты до локальных сетей Ideco NGFW Novum;
  * `none` - не отправлять;
  * `custom` - отправлять только указанные.
* `networks` - список подсетей, маршруты до которых передаются в режиме `custom`. Допускаются объекты подсетей, IP-адресов, доменов;
* `excluded_networks` - исключение адресов из маршрутов. Допускаются объекты подсетей, IP-адресов, доменов;
* `comment` - комментарий, может быть пустым, максимум 256 символов;
* `enabled` - статус правила:
  * `true` - включено;
  * `false` - выключено.
  
**Ответ на успешный запрос:** 200 OK

{% endcut %}

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

```
DELETE /vpn_servers/route_rules/<id правила>
```

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

{% endcut %}

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

```
PATCH /vpn_servers/route_rules/move
```

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

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

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

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

{% endcut %}
