Разберем частую ситуацию: у нас есть локальная файловая база 1С, в которой разработаны HTTP-сервисы для обмена данными с мобильным клиентом. При тестировании в локальной сети все работает отлично, но возникает необходимость дать доступ мобильному приложению из любой точки мира через интернет. При этом открывать всю внутреннюю сеть наружу совершенно не хочется из соображений безопасности. Давайте подробно рассмотрим, как правильно и безопасно решить эту задачу.
Для публикации HTTP-сервисов платформы 1С нам потребуется веб-сервер. Официально 1С поддерживает два основных варианта:
Проанализируем архитектуру для повышения безопасности. Хорошей практикой является использование Nginx в качестве обратного прокси-сервера (reverse proxy). Сам по себе сервер 1С напрямую с Nginx не работает, но мы можем поставить Nginx «перед» Apache или IIS. В такой схеме Nginx принимает весь входящий трафик из интернета, фильтрует его, обрабатывает SSL-сертификаты и только проверенные запросы передает на локальный сервер 1С. Это создает дополнительный, очень надежный контур защиты.
Чтобы запросы из мобильной сети попадали на наш веб-сервер, настроим маршрутизацию на роутере. Нам потребуется статический («белый») IP-адрес от провайдера.
Рассмотрим по шагам настройку проброса портов:
Важно: Если вы пробрасываете только порт веб-сервера на конкретную машину, то доступ из интернета будет открыт исключительно к веб-серверу, а не ко всей локальной сети. Защита внутренней сети при этом не страдает.
Даже если злоумышленник узнает ваш внешний IP-адрес и порт, мы должны быть уверены, что он не получит доступ к данным или интерфейсу программы. Для этого правильно настроим параметры публикации в конфигураторе.
При публикации базы на веб-сервере 1С формирует конфигурационный файл default.vrd. Чтобы максимально обезопасить систему, выполним следующие действия:
Таким образом, внешние запросы смогут обращаться только к строго определенным методам HTTP-сервиса, а открыть саму базу через браузер будет невозможно.
Выставлять 1С наружу по обычному, незашифрованному протоколу HTTP категорически не рекомендуется. В этом случае все данные (включая логины, пароли пользователей и коммерческую информацию) передаются в открытом виде, и их легко перехватить.
Более того, современные мобильные операционные системы (Android и iOS) на уровне ядра блокируют незашифрованный HTTP-трафик внутри мобильных приложений.
Обязательно настроим SSL-сертификат. Можно использовать бесплатные сертификаты (например, от Let's Encrypt). Они легко обновляются и поддерживаются всеми устройствами. Самоподписанные сертификаты использовать можно, но это потребует ручной установки корневого сертификата на каждое мобильное устройство, что крайне неудобно на практике.
Так как в нашем случае используется файловая база (файл 1Cv8.1CD), разберем технические нюансы, с которыми мы столкнемся:
www-data, а для IIS на Windows — IUSR или пользователь пула приложений. Убедимся, что этому пользователю выданы полные права на чтение, запись и модификацию папки, где лежит файл базы данных. Без этого HTTP-сервисы будут возвращать ошибку прав доступа.При передаче данных через мобильную сеть (3G, LTE) связь часто обрывается. Посмотрим на классическую проблему: мобильный клиент отправляет POST-запрос в 1С на создание заказа. 1С заказ создает, но при отправке ответа связь обрывается. Мобильное приложение думает, что произошла ошибка, и отправляет запрос повторно. В итоге в 1С создаются дубли.
Чтобы этого избежать, в коде HTTP-сервиса обязательно реализуем механизм идемпотентности. Мобильное приложение должно генерировать уникальный идентификатор запроса (например, GUID) и передавать его в заголовках. На стороне 1С мы проверяем: если запрос с таким идентификатором уже успешно обработан, мы не создаем документ заново, а просто возвращаем успешный ответ.
Если мобильное приложение предназначено только для внутренних сотрудников компании, и нет необходимости делать его доступным для всех желающих, выясним, можно ли обойтись вообще без публикации базы в открытом интернете.
Отличным решением будет развертывание VPN-сервера (например, WireGuard, OpenVPN или IPsec).
В этой архитектуре никакие порты наружу (кроме порта самого VPN) открывать не нужно. База 1С остается полностью скрытой от внешнего мира, что является самым безопасным решением для корпоративного сегмента.