Зачастую при разработке интеграционных решений на базе 1С возникает необходимость сделать определенные HTTP-сервисы доступными только для внутреннего контура компании, в то время как остальные интерфейсы базы должны оставаться доступными из интернета. Поскольку платформа 1С по умолчанию публикует все сервисы при создании файла публикации default.vrd, нам потребуется применить дополнительные настройки на стороне веб-сервера.
Самым эффективным способом решения задачи при использовании Apache является создание двух отдельных публикаций одной и той же информационной базы. Давайте разберем этот процесс по шагам.
/base. В ней оставьте доступными все необходимые HTTP-сервисы и Web-сервисы./baselocal, которая будет ссылаться на ту же самую информационную базу..htaccess, расположенном в папке /baselocal, настройте правила ограничения доступа.Для реализации ограничения доступа к /baselocal воспользуйтесь следующими директивами модуля mod_authz_host:
Require ip ::1
Require ip 127.0.0.1
Require ip 192.168.1.0/24
Важное примечание: Чтобы веб-сервер учитывал правила из .htaccess, убедитесь, что в конфигурационном файле httpd.conf для соответствующей директории установлено значение AllowOverride All. В противном случае сервер проигнорирует ваши настройки безопасности.
Если в качестве веб-сервера вы используете IIS, логика остается аналогичной — мы создаем два виртуальных каталога. Однако механизм управления доступом здесь встроен в оснастку управления сервером.
IIS.baselocal).Таким образом, внешние запросы, пытающиеся обратиться к /baselocal/hs/API/, получат ошибку доступа на уровне IIS, не доходя до исполнения кода внутри 1С.
Если вы не хотите менять настройки веб-сервера, вы можете реализовать проверку прав внутри самого HTTP-сервиса. Однако помните, что это защищает данные, но не скрывает факт наличия сервиса.
В методе HTTP-сервиса вы можете получить IP-адрес клиента. Если вы используете обратный прокси, обязательно проверяйте заголовок X-Forwarded-For.
Функция ПолучитьIPКлиента(Запрос)
Заголовки = Запрос.Заголовки;
// Проверяем, нет ли заголовка прокси
Если Заголовки.Свойство("X-Forwarded-For") Тогда
Возврат Заголовки["X-Forwarded-For"];
Иначе
Возврат Запрос.АдресХоста;
КонецЕсли;
КонецФункции
Если полученный адрес не входит в ваш белый список, просто возвращайте 403 Forbidden или 404 Not Found. Использование кода 404 предпочтительнее с точки зрения безопасности, так как злоумышленник не получит подтверждение того, что сервис вообще существует.
Мы настоятельно рекомендуем использовать Reverse Proxy (например, Nginx) перед веб-сервером 1С. Это позволит вам гибко настраивать фильтрацию трафика по URL, не создавая множественных публикаций. Вы сможете прописать правило, при котором запросы к пути /hs/SecretService/ с внешних IP будут блокироваться еще до того, как они достигнут процесса w3wp.exe или httpd.exe.
Если сервис критически важен, самым надежным решением остается публикация сервиса только внутри VPN-сети, закрыв доступ к веб-серверу 1С из публичного интернета полностью.