Ограничение доступа к 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

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

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

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме. Без существенных изменений типовой конфигурации. Проверено с брендами: Интеграция 1С и GEELY Интеграция 1С и HAVAL Интеграция 1С и KIA Интеграция 1С и FORD Интеграция 1С и LADA ГАРАНТИЯ 100% ВНЕДРЕНИЯ!

36000 руб.

03.08.2020    15655    9    17    

9

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

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

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

22656 руб.

25.05.2021    12809    30    8    

10

Интеграция 1С — Битрикс24. Обмен задачами

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

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

5040 руб.

04.05.2021    17419    6    15    

13

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25686    9    0    

7

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16253    41    49    

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

Кеширование через Nginx не пробовал?
2. malikov_pro 1288 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 1288 26.12.20 11:59 Сейчас в теме
(3) При файловой базе больше проблема в блокировке файла чем в web сервере. Из моего опыта 3-5 пользователей работают нормально, далее уже сервер МИНИ и далее, видел информацию что запускали данный вариант на 10+ пользователей.
5. XAKEP 26.12.20 12:01 Сейчас в теме
(4)
до двадцати есть вариант ?

или публикация на разных адресах
для пяти клиентов на адрес и четыре адреса ?
6. malikov_pro 1288 26.12.20 12:34 Сейчас в теме
(5) Смотря какая конфигурация и сколько пользователей на 1 базу, сам бы в такое не стал лезть, потенциально куча проблем с администрированием. Публиковать можно на одном адресе на разных портах либо в разных корневых папках.
7. XAKEP 26.12.20 12:35 Сейчас в теме
8. pbabincev 132 22.05.21 12:56 Сейчас в теме
Добрый день!
Автор, объясни, пожалуйста, у меня не совсем пазл сошёлся в одном вопросе.
Ведь можно же было сделать просто разные (несколько) публикаций на IIS (Apache)?
Для чего тут ngnix?
Не докопаться ради, а ликбез для меня и таких как я.
Заранее спасибо за ответ!
9. malikov_pro 1288 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 1288 03.11.22 14:40 Сейчас в теме
(11) Что именно пробросить?
13. 1piligrim1 06.11.22 17:59 Сейчас в теме
(12)Как правильно опубликовать базу через Nginx Proxy Manager
14. malikov_pro 1288 06.11.22 22:56 Сейчас в теме
(13) База публикуется на сервере с apache либо IIS.
Nginx принимает подключения из интернета (WAN), фильтрует по DNS имени, добавляет SSL (HTTPS) и перенаправляет на сервер с публикацией.
Оставьте свое сообщение