Ограничение доступа к HTTP публикациям 1С сервера используя NGINX

10.11.21

Интеграция - WEB-интеграция

В статье опишу вариант ограничения доступа к HTTP публикациям 1С сервера используя NGINX.

Вводные

  • База 1С: Управление торговлей 11 с публикацией по HTTP
  • Требуется подключить входящие уведомления то АТС, без Basic аутентификации, с Token аутентификацией
  • Требуется подключить тонкий клиент по HTTPS
  • Требуется подключить API для работы с мобильными клиентами (товары, заказы)
    • с basic аутентификацией на уровне кода HTTP сервиса (без использования внутреннего справочника пользователи).
    • с ограничением по количеству запросов в минуту

Базовая схема подключения:

 

Описание проблемы

 

Для каждого из видов подключения нужна своя аутентификация и отдельный набор ролей доступа. При одной публикации доступ пересекается, стандартные "грабли": при подключении телефонии тонкий клиент на автомате подключается под сервисным пользователем телефонии.

Разнесение на отдельные публикации 

 

Решает проблему пересечения, но не решает вопрос контроля доступа. При публикации HTTP сервисов расширений публикуются все, потенциально под одним пользователем могут подключится к другому сервису.

Так же остается проблема если нужна Basic аутентификация на уровне кода сервиса.

 

Вариант решения

Использовать обратный прокси перед основным web сервером и на его уровне настроить ограничения доступа.

Схема:

 

Подготовка

  • для тестов организовал DNS запись test.malikov.pro
  • основная машина на win 10,
  • сервер 1С на основной машине c apache 2.4 (IP 192.168.57.2) на порту 8080
  • конфигурация УТ 11.4.11.100
  • в качестве ОС использую Ubuntu, инструкция по установке Nginx в Ubuntu 18.04
    • для установки ubuntu тестов использую VMWare Workstation
    • в настройках сетевого адаптера VM стоит "bridge" для нахождения в одной сети с роутером и проброса портов извне (IP 192.168.57.5) 
    • подключаюсь к ubuntu через SSH, (клиент), отправляю файлы через WinSCP(ссылка), в тестовой среде подключаюсь под root (инструкция по включению root), в рабочей среде желательно использовать SSL ключи и использовать нестандартный порт.

1. Проверяю доступность web сервера из вне

 
 скриншот

 

Публикация клиента 1C

 
 c:\www_data\ut_demo_cl\default.vrd

Проверяю корректность публикации

 
 скриншот

 

Настраиваю обратный прокси для /ut_demo_cl

По нормальному нужно в sites-available + добавить ссылку в sites-enabled, пока тестирую пишу напрямую в sites-enabled

 
 /etc/nginx/sites-enabled/test_malikov_pro.nginx

Проверяю конфигурацию через SSH "nginx -t", перезагружаю конфигурацию "service nginx reload".

Проверяю работоспособность

 
 скриншот

 

Публикация HTTP сервиса телефонии

Реализовано через расширение, публикация с указанием сервисного пользователя (документация), URL /api_vpbx/*

 
 c:\www_data\ut_demo_tel\default.vrd

 

Проверяю работоспособность 

 
 скриншот

 

Настраиваю обратный прокси для /api_vpbx

 
 /etc/nginx/sites-enabled/test_malikov_pro.nginx

 

Перезагружаю конфигурацию, проверяю работоспособность

 
 скриншот

 

Публикация HTTP сервиса API

Публикация с указанием сервисного пользователя, различие с "ut_demo_tel" только в пользователях которым разрешено обращаться к определенным HTTP сервисам, URL /api_v1/*

 
 c:\www_data\ut_demo_api\default.vrd

 

 
 Код модуля HTTP сервиса для проверки

 

При обращении к сервису с basic аутентификацией идет перехват и замена пользователя по умолчанию на пользователя из запроса

 
 скриншот


Для обхода этой ситуации использую замену заголовка

 
 /etc/nginx/sites-enabled/test_malikov_pro.nginx

 

Проверяю

 
 скриншот

 

Ограничение доступа по IP

Для телефонии известны IP адреса серверов (пример Манго-Офис, ссылка на описание).

Расширяю описание блока "/api_vpbx"

 
 location /api_vpbx

 

Проверяю, получаю 403 ответ

 
 скриншот

 

Ограничение на количество запросов

Если API ресурсоёмкое, то имеет смысл поставить ограничение по количеству запросов с IP адреса

Добавляю в основную конфигурацию зону

 
 /etc/nginx/nginx.conf

Расширяю описание блока "/api_v1"

 
 location /api_v1

 

Проверяю, при частом запросе получаю 503.

 
 скриншот

 

Организация HTTPS

Ссылка на статью по настройке

Добавляю в настройки настройки для "/"

 
 /etc/nginx/sites-enabled/test_malikov_pro.nginx

 

  • Добавил репозиторий "sudo add-apt-repository ppa:certbot/certbot"
  • Установил certbot "sudo apt install python-certbot-nginx"
  • Запустил установку сертификата "sudo certbot --nginx -d test.malikov.pro"
  • Для варианта настройки выбрал "2: Redirect"

В результате успешно получил сертификат. Проверяю работоспособность

 
 скриншот

 

Использование Web интерфейса для настройки

Если лезть и разбираться в конфигах и командах не очень хочется то можно поставить "Nginx Proxy Manager" https://github.com/jc21/nginx-proxy-manager.

Особенности

  • Красивый и безопасный интерфейс администратора на основе Tabler
  • Легко создавать домены пересылки, перенаправления, потоки и 404 хосты, ничего не зная о Nginx
  • Бесплатный SSL с использованием Let's Encrypt или используя ваши собственные пользовательские SSL-сертификаты
  • Списки доступа и базовая HTTP-аутентификация для ваших хостов
  • Расширенная конфигурация Nginx, доступная для суперпользователей
  • Управление пользователями, разрешения и журнал аудита

Запускается как докер контейнер

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

В базе на сколько понимаю работает в SQLite, можно подключить к Mysql.

После установки доступен по http://127.0.0.1:81.

Благодарю Алексея Лустина за информацию.

 

Применение в облачных средах

В kubernetes есть Ingress - механизм, обеспечивающий маршрутизацию входящего трафика на уровне приложения (L7), предоставляемый через Ingress-контроллер. В основе которого базово используется Nginx.

Итог

Используя Nginx можно организовать безопасный доступ к HTTP публикации базы 1C.

 

Благодарю за внимание.

HTTP Nginx

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17780    19    22    

16

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19844    13    17    

16

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14421    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1169    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. NoRazum 29 12.10.20 18:06 Сейчас в теме
Столько вопросов
Как сделать несколько подключений с разными правами через ВЕб
Вот оно ))

Кеширование через Nginx не пробовал?
2. malikov_pro 1324 12.10.20 18:28 Сейчас в теме
(1) Статику кешировать относительно просто.
Хотел расширить по аутентификации, чтобы отсекало перед 1С и IPS приделать (Snort).

Пишите задачу, если получится, то дополню статью.

По статике от 1С статью писал https://infostart.ru/public/1292433/, сильно зависит что отдаете, если много картинок, то проще опубликовать по HTTP на selectel https://infostart.ru/1c/articles/1188662/ при необходимости CDN настроить.
3. XAKEP 26.12.20 11:07 Сейчас в теме
сколько пользователей потянет веб сервер при публикации файловой базы ?
может подсказать... ?
4. malikov_pro 1324 26.12.20 11:59 Сейчас в теме
(3) При файловой базе больше проблема в блокировке файла чем в web сервере. Из моего опыта 3-5 пользователей работают нормально, далее уже сервер МИНИ и далее, видел информацию что запускали данный вариант на 10+ пользователей.
5. XAKEP 26.12.20 12:01 Сейчас в теме
(4)
до двадцати есть вариант ?

или публикация на разных адресах
для пяти клиентов на адрес и четыре адреса ?
6. malikov_pro 1324 26.12.20 12:34 Сейчас в теме
(5) Смотря какая конфигурация и сколько пользователей на 1 базу, сам бы в такое не стал лезть, потенциально куча проблем с администрированием. Публиковать можно на одном адресе на разных портах либо в разных корневых папках.
7. XAKEP 26.12.20 12:35 Сейчас в теме
8. pbabincev 133 22.05.21 12:56 Сейчас в теме
Добрый день!
Автор, объясни, пожалуйста, у меня не совсем пазл сошёлся в одном вопросе.
Ведь можно же было сделать просто разные (несколько) публикаций на IIS (Apache)?
Для чего тут ngnix?
Не докопаться ради, а ликбез для меня и таких как я.
Заранее спасибо за ответ!
9. malikov_pro 1324 22.05.21 15:49 Сейчас в теме
(8) По простому: для меня проще настроить сертификаты letsencrypt на ubuntu c nginx, чем на win+IIS.
Если копнуть в web то обычно ставят прокси/балансировщик, а за ними уже сервера приложений, на уровень прокси можно навесить системы защиты, мониторинга. Удобно по настройке доступа, ограничения ставлю в одном месте.

На практике у меня на прокси приходит публичный траффик с одного IP и его распределяю исходя из доменных имен (из того что вижу у коллег раскидано на разные порты).

Из минусов, у меня нормально не запустился nextcloud+onlyoffice т.к. они в докере, в сборке перед ними свой прокси и между ними передается локальное имя, по хорошему нужно прокачать знание docker и по нормальному настроить.

Недавно в продолжение темы перевел вариант с docker и traefik.
pbabincev; +1 Ответить
10. Agnostion 13.04.22 08:24 Сейчас в теме
Хорошая статья, спасибо!
Один только вопрос, можно ли вообще обойтись одним лишь nginx? Как можно опубликоваться в нём напрямую?
11. 1piligrim1 03.11.22 11:57 Сейчас в теме
Добрый день!
Подскажите пожалуйста как пробросить через Nginx Proxy Manager ?
12. malikov_pro 1324 03.11.22 14:40 Сейчас в теме
(11) Что именно пробросить?
13. 1piligrim1 06.11.22 17:59 Сейчас в теме
(12)Как правильно опубликовать базу через Nginx Proxy Manager
14. malikov_pro 1324 06.11.22 22:56 Сейчас в теме
(13) База публикуется на сервере с apache либо IIS.
Nginx принимает подключения из интернета (WAN), фильтрует по DNS имени, добавляет SSL (HTTPS) и перенаправляет на сервер с публикацией.
Оставьте свое сообщение