Настройка и запуск воркспейса с ограничениями белого списка на доступ к API и вкладкам панели администратора воркспейса¶
Описание функционала¶
Данный функционал реализован в версиях воркспейса 9.200.70.482
Упрощённо, логика работы следующая:
- С помощью манифеста описываются параметры Regex паттерны URL и сети в CIDR формате (до CIDR /8)
- Порядок заполнения манифеста влияет на последовательность применения ограничений
- Так же есть возможность ограничить доступ к вкладкам API если пользователь не авторизован на воркспейсе
Конфигурирование¶
Для включения функционала, необходимо на выключенном воркспейсе отредактировать
манифест, добавив в блок workspace.web
блок locationFirewall, очистить блок container.ports, настроить работу ip-tables
Для корректной работы данного функционала, необходимо настроить работу iptables вместо использования redir:
Смотрим существующие сетевые интерфейсы хоста командой:
Выбираем тот, по которому будут подключаться клиенты и вставляем в параметр -i в команды:sudo iptables -t nat -A PREROUTING -i <название_интерфейса> -p tcp --dport 80 -j DNAT --to-destination 10.0.3.15:80
sudo iptables -t nat -A PREROUTING -i <название_интерфейса> -p tcp --dport 443 -j DNAT --to-destination 10.0.3.15:443
sudo iptables -t nat -A PREROUTING -i ens18 -p tcp --dport 80 -j DNAT --to-destination 10.0.3.15:80
sudo iptables -t nat -A PREROUTING -i ens18 -p tcp --dport 443 -j DNAT --to-destination 10.0.3.15:443
Первый способ:¶
Второй способ¶
Пример заполненного манифеста:
"workspace": {
"id": "<WORKSPACE_ID>",
"name": "<WORKSPACE_NAME>",
"web": {
"url": "<WORKSPACE_URL>",
"ssl": {
"cert": "<PATH_TO_BUNDLE>",
"key": "<PATH_TO_KEY>"
},
"locationFirewall": [
{
"allowedPathPatterns": ["#^/api/v1/.*$#"],
"anonymous": false,
"allowedNetworks": ["10.0.0.0/8"]
},
{
"allowedPathPatterns": ["#^/admin/server-status/dashboard/.*$#"],
"anonymous": false,
"allowedNetworks": ["192.0.0.0/8"]
},
{
"allowedPathPatterns": ["#^/admin/server-status/.*$#"],
"anonymous": false,
"allowedNetworks": ["217.23.138.0/24", "68.23.0.0/16"]
},
{
"allowedPathPatterns": ["#^/admin/models/backups/trash/.*$#"],
"anonymous": false,
"allowedNetworks": ["192.168.1.0/24"]
},
{
"allowedPathPatterns": ["#^/admin/models/.*$#"],
"anonymous": false,
"allowedNetworks": ["192.168.1.0/24", "68.23.0.0/16"]
},
{
"allowedPathPatterns": ["#^/admin/requests/.*$#"],
"anonymous": false,
"allowedNetworks": ["217.23.138.0/24", "192.168.1.0/24"]
},
{
"allowedPathPatterns": ["#^/admin/api-services/.*$#"],
"anonymous": false,
"allowedNetworks": ["1.23.38.0/24"]
},
{
"allowedPathPatterns": ["#^/admin/.*$#"],
"anonymous": false,
"allowedNetworks": ["10.0.0.0/8"]
}
]
},
Важно обращать внимание на порядок заполнения белого списка. Если поставить
самый верхний уровень ссылки i.e. "#^/admin/.*$#" в начало блока - то
все последующие за ним правила, для страниц панели администратора
то есть "#^/admin/models/backups/trash/.*$#" применяться не будут.
Поэтому необходимо заполнять список в обратном порядке.
Пример последовательности введения ограничений:
/admin/models/backups/trash/ -> /admin/models/backups/ -> /admin/models/ -> /admin/
Описание параметров¶
"allowedPathPatterns" - Regex-шаблон адреса к которому применяются правила.
Тип - строка, массив.
"anonymous" - переключение доступности страницы в не авторизованном режиме.
False - для просмотра страницы
Необходима авторизация, True - для просмотра страницы авторизация не нужна.
Тип - boolean.
"allowedNetworks" - Разрешённые сети, в формате CIDR, от 1.0.0.0/8 до 1.2.3.4/32
(формат 0.0.0.0/0 не поддерживается). Тип - строка, массив.