Использование API-шлюзов для чёрных/белых списков
Описание использования API шлюзов для создания чёрных/белых списков.
Основное назначение чёрных/белых списков API шлюзов это возможность срочной блокировки или разрешения доступа для пользователей. Блокировка или разрешение происходят непосредственно после выполнения команды добавления или удаления элемента списка на шлюзе.
Особенности использования API и отличия от веб-интерфейса СУ
- Записи в чёрные/белые списки при использовании API добавляются непосредственно в базу данных сессий на шлюзах, при этом в веб-интерфейсе системы управления такие записи изначально не отображаются. Поэтому для загрузки данных записей в веб-интерфейсе системы управления необходимо после загрузки непосредственно записей выполнить синхронизацию чёрных/белых списков.
- Собранные со шлюзов записи сохраняются в автоматически создаваемом в базе данных веб-интерфейса списке с названием <имя-портала>-API в случае добавления записи для конкретного портала или в список с названием <имя-активной-конфигурации>-API в случае добавления записи в глобальный список, автоматически создаваемый список сразу привязывается к порталу или конфигурации соответственно.
- Синхронизация списков. В
процессе синхронизации чёрных/белых списков со шлюзов (узлов NGate кластера)
в уже существующий автоматически сгенерированный список (или в новый, если
список ранее не был создан) добавляются только отсутствующие в этом списке
записи. В то же время записи, существующие в списке, но удалённые на шлюзах,
не будут автоматически удалены.Важно, что синхронизация чёрных/белых списков автоматически выполняется перед каждой публикацией конфигурации. Поэтому, если администратор хочет проверить пришедшие со шлюзов записи и, например, удалить некоторые из записей, то Администратор должен:
- выполнить публикацию конфигурации;
- только после успешной публикации изменять или удалять автоматический созданный чёрно/белый список по своим требованиям;
- после завершения внесения изменений нужно выполнить повторную публикацию;
- оставшиеся в автоматически созданных списках записи будут добавлены в предварительно очищенную базу данных сессий на шлюзах при запуске соответствующего сервиса.
Добавление новой записи на шлюзе
- Чёрные списки: https://<ngate>:7019/api/v1/blacklist
- Белые списки: https://<ngate>:7019/api/v1/whitelist
- action – обязательное действие, которое необходимо совершить с записью – добавить или удалить, соответственно «add» или «remove»;
- portal_name – (опциональное) hostname портала для применения списка. Если поле отсутствует, используется глобальный список;
- cert — (опциональное) может быть строкой, списком
строк, структурой без attr, структурой с attr, списком таких
структур.
- attr (опциональное) может быть одна из строк: cert_serial, cert_sha1_fingerprint, cert_gost_fingerprint, upn или список из них. Если attr задан, то соответствующие атрибуты сертификата будут добавлены или удалены из списка, если не задан то сертификаты добавляются и удаляются из списка по отпечатку GOST2012 256bit;
- text (обязательное) должен находиться текст сертификата. Сертификаты добавляются и удаляются из списка по отпечатку GOST2012 256bit, в случае если не указано что-то иное посредством задания attr;
- Пример строки:
{ "cert": "MIICFjCCAcOgAwIBAgIMXyn2W15damn954qpMAoGCCqFAwcBAQMCMG0xITAfBgNV..." } - Пример списка строк:
{ "cert": [ "MIICFjCCAcOgAwIBAgIMXyn2W15damn954qpMAoGCCqFAwcBAQMCMG0xITAfBgNV...", "MIICFjCCAcOgAwIBAgIMXyn2W15damn954qpMAoGCCqFAwcBAQMCMG0xITAfBgNV..." ] } - Пример структуры без attr:
{ "cert": { "text": "MIICFjCCAcOgAwIBAgIMXyn2W15damn954qpMAoGCCqFAwcBAQMCMG0xITAfBgNV..." } } - Пример структуры с attr:
{ "cert": { "attr": "cert_serial", "text": "MIICFjCCAcOgAwIBAgIMXyn2W15damn954qpMAoGCCqFAwcBAQMCMG0xITAfBgNV..." } } - Пример списка структур без attr
{ "cert": [ { "text": "MIICFjCCAcOgAwIBAgIMXyn2W15damn954qpMAoGCCqFAwcBAQMCMG0xITAfBgNV..." }, { "text": "MIICFjCCAcOgAwIBAgIMXyn2W15damn954qpMAoGCCqFAwcBAQMCMG0xITAfBgNV..." } ] } - Пример списка структур с
attr
{ "cert": [ { "attr": "cert_serial", "text": "MIICFjCCAcOgAwIBAgIMXyn2W15damn954qpMAoGCCqFAwcBAQMCMG0xITAfBgNV..." }, { "attr": "cert_sha1_fingerprint", "text": "MIICFjCCAcOgAwIBAgIMXyn2W15damn954qpMAoGCCqFAwcBAQMCMG0xITAfBgNV..." } ] }
- cert_serial — (опциональное) строка или список строк — добавляет/удаляет из списка серийные номера сертификатов;
- cert_sha1_fingerprint — (опциональное) строка или список строк — добавляет/удаляет из списка отпечатки сертификатов;
- login — (опциональное) строка или список строк — добавляет/удаляет из списка логины пользователей;
- upn — (опциональное) строка или список строк — добавляет/удаляет из списка UPN пользователей;
- ldap_dn — (опциональное) строка или список строк — добавляет/удаляет из списка полные LDAP DN пользователей;
- client_ip — (опциональное) но может использоваться только при значении action равном add и на URL https://<ngate>:7019/api/v1/blacklist. Строка, содержащая VPN IP пользователя, которого необходимо добавить в черный список. Такой пользователь будет добавлен по всем возможным полям;
- sess_id — (опциональное) но может использоваться только при значении action равном add и на URL https://<ngate>:7019/api/v1/blacklist. Строка, содержащая ID сессии, пользователя которой необходимо добавить в черный список. Такой пользователь будет добавлен по всем возможным полям.
- /opt/cprocsp/bin/amd64/curl -q -k -v -X PATCH https://<ngate>:7019/api/v1/blacklist -H 'Authentication: Bearer cn2…YX' -H ‘Content-Type: application/json’ -E 14e…6a -d '{"action": "add", "login": "ivanov"}'
- /opt/cprocsp/bin/amd64/curl -q -k -v -X PATCH https://<ngate>:7019/api/v1/whitelist -H 'Authentication: Bearer cn2…YX' -H ‘Content-Type: application/json’ -E 14e…6a -d '{"action": "add", "login": "ivanov"}'
- cn2…YX – API токен, должен иметь права на редактирование списков;
- 14e…6a – отпечаток сертификата сервиса API.
В случае успеха возвращается код статуса 200 и пустое тело, если не заданы client_ip и sess_id в теле запроса. Если они были заданы, в случае успеха будет возвращён JSON следующего вида, содержащий поля, по которым был заблокирован пользователь:
{
"blacklisted_by": {
"cert_serail": "0x12…",
"cert_sha1_fingerprint": "e9a7…",
"cert_gost_fingerprint": "10a…"
}
}
В случае неудачи возвращается код статуса, отличный от 200, и JSON, содержащий список ошибок, в том числе список строк, не применённых к списку, подробнее см. Возможные ошибки при работе с сервисом API.
Удаление записи на шлюзе
- Чёрные списки: https://<ngate>:7019/api/v1/blacklist
- Белые списки: https://<ngate>:7019/api/v1/whitelist
Запрос должен содержать JSON с полями, аналогичными запросу на добавление, но действие будет "action": "remove".
- /opt/cprocsp/bin/amd64/curl -q -k -v -X PATCH https://<ngate>:7019/api/v1/blacklist -H 'Authentication: Bearer cn2…YX' -H ‘Content-Type: application/json’ -E 14e…6a -d '{"action": "remove", "login": "ivanov"}'
- /opt/cprocsp/bin/amd64/curl -q -k -v -X PATCH https://<ngate>:7019/api/v1/whitelist -H 'Authentication: Bearer cn2…YX' -H ‘Content-Type: application/json’ -E 14e…6a -d '{"action": "remove", "login": "ivanov"}'
- через веб-интерфейс;
- с помощью API-Системы управления
В случае, если нужно, чтобы в автоматически сгенерированном в процессе синхронизации списке находились только текущие записи со шлюзов, можно удалить в веб-интерфейсе данный список и выполнить синхронизацию заново.
