Перейти к основному содержимому

Ограничение on-premise установки по IP

Эта страница предназначена для администраторов on-premise установки MonoChat. Она объясняет, как ограничить веб-приложение вашими собственными сетями на сетевом уровне (nginx или файрвол), не блокируя сервисы, которые должны обращаться к MonoChat из интернета.

В MonoChat нет собственного списка разрешённых IP-адресов. Ограничение настраивается в вашем nginx, балансировщике нагрузки или файрволе и действует на всю установку, а не на отдельный tenant.

Что ограничивать, а что оставить открытым​

Ограничить вашими сетямиОставить доступным из интернета
Веб-приложение и всё, чего нет в списке справаПути вебхуков и обратных вызовов из таблиц ниже
Конечная точка DDP/WebSocket, к которой подключается веб-приложение (/websocket)

Ограничивайте веб-интерфейс и конечную точку WebSocket вместе: приложение использует обе. Для всех остальных разрешите только пути ниже, а остальное заблокируйте.

Пути, к которым обращаются внешние сервисы​

Каждый путь ниже регистрируется сервером MonoChat. Путь, построенный из настройки, это hookPath, который вы задали на сервере (в channelConnectors.<name> или paymentSystemConnectors.<name> в настройках сервера); суффикс добавляется кодом. Открывайте только те коннекторы, которые вы используете.

Каналы​

ПутьКто обращаетсяГде определён
<hookPath>/webhooks (POST)omni-message, для WhatsApp Cloud, WhatsApp Gupshup, Instagram, Messenger, Telegram, TikTok, Twilio SMS и Varan OTPpackages/app-connectors-om2-*/src/webhooks/webhook.ts; hookPath from channelConnectors.whatsappBusinessVegaCloud, whatsappBusinessVegaGupshup, instagramCastor, messengerRigel, telegramBotRegulus, tikTokTimir, twilioSms, varanOtp
<hookPath>/webhooks, <hookPath>/sessions, <hookPath>/messages (POST)Ваши собственные системы через канал Messages APIchannelConnectors.messagesApi.hookPath, packages/app-connectors-messages-api/src/webhooks/webhook.ts
<hookPath>/message, <hookPath>/info (POST)ChatwootchannelConnectors.chatwoot.hookPath, packages/app-connectors-chatwoot/src/webhook.ts
<hookPath>/inbound (POST)SIP-провайдер (каналы generic SIP и Sonitel SIP)channelConnectors.genericSip.hookPath, channelConnectors.sonitelSip.hookPath
/api/facebook/channels/:channelId/flows/:flowId (POST)WhatsApp, для WhatsApp Flowsserver/api/whatsapp-flow.js

Провайдеры каналов (Meta, Telegram, TikTok, Twilio) не обращаются к MonoChat напрямую. Они обращаются к webhook listener omni-message, который пересылает запросы на путь /webhooks выше. Если вы запускаете omni-message самостоятельно, его webhook listener должен быть доступен из интернета по этим путям: /webhooks/meta-messenger, /webhooks/instagram-business, /webhooks/wab-cloud, /webhooks/wab-gupshup/:channelId, /webhooks/wab-360-dialog/:channelId, /webhooks/telegram-bot/:channelId, /webhooks/tiktok и /webhooks/twilio-sms/:channelId (apps/webhook-listener/src/modules/webhook-listeners/webhook-listeners.controller.ts в omni-message). Сам MonoChat должен быть доступен для omni-message по путям /webhooks выше.

Платёжные системы​

Платёжные провайдеры отправляют обратный вызов, когда клиент оплачивает заказ, а затем возвращают клиента в MonoChat. И то и другое должно работать из-за пределов вашей сети.

КоннекторПути под его hookPath (paymentSystemConnectors.<name>.hookPath)
Stripe/webhook/:clientId (POST), /return/success/:paymentSystemId, /return/cancel/:paymentSystemId
HyperPay/pay/:clientId/:paymentSystemOrderId, /result/:clientId/:paymentSystemOrderId
Mamo/webhook/:clientId (POST), /return/:clientId/:paymentSystemOrderId
Midtrans/webhook/:clientId (POST), /return/:paymentSystemOrderId
Paymob/webhook/:clientId (POST), /return/:paymentSystemOrderId
PayTabs/callback/:clientId/:paymentSystemOrderId (POST), /return/:paymentSystemOrderId
Tabby/webhook/:clientId (POST), /return/:paymentSystemOrderId/:status
Tamara/webhook/:clientId (POST), /return/:paymentSystemOrderId/:status
Tap/webhook/:clientId (POST), /return/:clientId/:paymentSystemOrderId
Telr/webhook/:clientId/:paymentSystemOrderId (POST), /return/:paymentSystemOrderId/:status
Ziina/return/:clientId/:paymentSystemOrderId/:status
iyzico/:transactionId (POST)
JCC/:status
MyFatoorahсам hookPath (POST), /:paymentSystemOrderId/:status (POST)
N-Geniusсам hookPath (POST), /:paymentSystemOrderId/:status
Paywall/:paymentSystemOrderId/:status
UniqoPayсам hookPath (POST), /:paymentSystemOrderId/:status (POST)
VakıfBank Sanal POS/:status (GET и POST)
İş Yerim POSсам hookPath (GET и POST)

Проще всего открыть <hookPath> и всё, что находится под ним, для каждого используемого платёжного коннектора. Источник каждого из них: packages/app-connectors-<name>/src/webhook.ts.

Прочие конечные точки сервера​

ПутьНазначениеГде определён
/api/:slug/custom-functions/… (POST)Вызов пользовательской функции по HTTP с токеном доступаlib/managers/custom-function-sdk/_/server/endpoint.js
/api/ai-agent/mcp, /api/ai-agent/events (POST)Запуски AI-агента отправляют результаты обратно в MonoChatserver/api/ai-agent.ts
/api/channels-manager/facebook/auth, /api/channels-manager/tiktok/auth (GET)Всплывающее окно, которое возвращается после подключения аккаунта Facebook или TikTokpackages/app-managers-channel/src/webhook.ts
/l/:_id (GET)Короткие ссылки, которые вы отправляете клиентамserver/api/short-link.js
/api/status (GET)Мобильное приложение проверяет сервер и доступные способы входаserver/api/status.js
/.well-known/assetlinks.json, /.well-known/apple-app-site-association (GET)Ссылки приложений Android и iOSserver/api/assetlinks.js, server/api/apple-app-site-association.js

Откройте /api/:slug/custom-functions, /api/ai-agent, /l/ и два пути всплывающих окон каналов, если вы используете эти функции из-за пределов вашей сети. Пути всплывающих окон каналов открываются в браузере того, кто подключает аккаунт, поэтому они могут оставаться ограниченными, если каналы подключают только сотрудники из вашей сети. Откройте /api/status и два файла /.well-known только в том случае, если ваши агенты используют мобильное приложение MonoChat из-за пределов вашей сети.

Вход через провайдера (OAuth)​

Когда провайдер входа перенаправляет браузер обратно в MonoChat, это обычный запрос браузера от входящего пользователя, поэтому к нему применяется то же ограничение, что и к веб-приложению. Оставьте пути перенаправления доступными для людей, которые входят таким способом. Пути задаются значениями redirectPath в public.oauth.<provider> в настройках сервера (в примерах по умолчанию это /api/oauth/google/redirect, /api/oauth/microsoft/redirect, /api/oauth/facebook/redirect и /api/oauth/apple/redirect). Вход через Apple возвращает браузер запросом POST (responseMode: form_post), который тот же путь принимает. Для мобильного приложения сервер также отвечает на /api/oauth/facebook/mobile, /api/oauth/microsoft/mobile и /auth/oauth-callback/<provider> (server/configs/oauth/mobile.ts).

Если вы используете интеграцию с Microsoft Marketplace, путь из microsoftMarketplace.redirectWebhookPath принимает запрос Microsoft Marketplace и должен быть доступен из интернета (server/configs/microsoft-marketplace/webook.ts).

Передайте реальный IP клиента через прокси​

MonoChat записывает IP клиента для сессий и журналов состояния. За обратным прокси или балансировщиком нагрузки он видит адрес прокси, пока вы не передадите настоящий.

  1. Настройте nginx (или балансировщик нагрузки) так, чтобы он отправлял исходный адрес в заголовке X-Forwarded-For, например proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;.
  2. Задайте на сервере MonoChat переменную окружения HTTP_FORWARDED_COUNT, равную числу прокси перед приложением. Её читает фреймворк Meteor, а не код MonoChat, поэтому она относится к настройкам развёртывания, а не к JSON с настройками.

Проверьте настройку​

  1. Из сети, которой доступ не разрешён, откройте веб-приложение. Доступ должен быть отклонён.
  2. Из разрешённой сети войдите и откройте inbox. Сообщения должны загрузиться, что доказывает, что конечная точка WebSocket открыта для вас.
  3. Отправьте тестовое сообщение в подключённый канал из-за пределов вашей сети и убедитесь, что оно пришло в inbox.
  4. Создайте ссылку на оплату для небольшого тестового заказа, оплатите её и убедитесь, что заказ отображается как оплаченный.
предупреждение

Проверяйте пути после каждого изменения правил прокси. Заблокированный путь вебхука не вызывает ошибку в MonoChat: сообщения и подтверждения платежей просто перестают приходить.