Saltar al contenido principal

Restringir una instalación on-premise por IP

Esta página está dirigida a los operadores de una instalación on-premise de MonoChat. Explica cómo limitar la aplicación web a sus propias redes a nivel de red (nginx o un firewall) sin bloquear los servicios que deben llamar a MonoChat desde internet.

MonoChat no tiene una lista de IP permitidas propia. La restricción se define en su nginx, balanceador de carga o firewall y se aplica a toda la instalación, no a una sola organización.

Qué restringir y qué mantener abierto​

Mantener restringido a sus redesMantener accesible desde internet
La aplicación web y todo lo que no figura a la derechaLas rutas de webhook y de callback de las tablas siguientes
El endpoint DDP/WebSocket al que se conecta la aplicación web (/websocket)

Restrinja juntos la interfaz web y el endpoint WebSocket: la aplicación usa ambos. Permita para todos los demás únicamente las rutas siguientes y bloquee el resto.

Rutas que llaman los servicios externos​

Todas las rutas siguientes están registradas por el servidor de MonoChat. Una ruta construida a partir de un ajuste es el hookPath que configuró en el servidor (en channelConnectors.<name> o paymentSystemConnectors.<name> en los ajustes del servidor); el sufijo lo añade el código. Abra solo los conectores que utilice.

Canales​

RutaLlamada porDefinida en
<hookPath>/webhooks (POST)omni-message, para WhatsApp Cloud, WhatsApp Gupshup, Instagram, Messenger, Telegram, TikTok, Twilio SMS y 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)Sus propios sistemas, a través del canal 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)El proveedor SIP (canales SIP genérico y Sonitel SIP)channelConnectors.genericSip.hookPath, channelConnectors.sonitelSip.hookPath
/api/facebook/channels/:channelId/flows/:flowId (POST)WhatsApp, para WhatsApp Flowsserver/api/whatsapp-flow.js

Los proveedores de canales (Meta, Telegram, TikTok, Twilio) no llaman directamente a MonoChat. Llaman al webhook listener de omni-message, que reenvía a la ruta /webhooks indicada arriba. Si ejecuta omni-message usted mismo, su webhook listener debe ser accesible desde internet en estas rutas: /webhooks/meta-messenger, /webhooks/instagram-business, /webhooks/wab-cloud, /webhooks/wab-gupshup/:channelId, /webhooks/wab-360-dialog/:channelId, /webhooks/telegram-bot/:channelId, /webhooks/tiktok y /webhooks/twilio-sms/:channelId (apps/webhook-listener/src/modules/webhook-listeners/webhook-listeners.controller.ts en omni-message). MonoChat debe ser accesible desde omni-message en las rutas /webhooks indicadas arriba.

Sistemas de pago​

Los proveedores de pago llaman de vuelta cuando un cliente paga y, después, devuelven al cliente a MonoChat. Ambos deben funcionar desde fuera de su red.

ConectorRutas bajo su 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
MyFatoorahel propio hookPath (POST), /:paymentSystemOrderId/:status (POST)
N-Geniusel propio hookPath (POST), /:paymentSystemOrderId/:status
Paywall/:paymentSystemOrderId/:status
UniqoPayel propio hookPath (POST), /:paymentSystemOrderId/:status (POST)
VakıfBank Sanal POS/:status (GET y POST)
İş Yerim POSel propio hookPath (GET y POST)

La regla más sencilla es abrir <hookPath> y todo lo que hay debajo para cada conector de pago que utilice. Cada origen es packages/app-connectors-<name>/src/webhook.ts.

Otros endpoints del servidor​

RutaSe usa paraDefinida en
/api/:slug/custom-functions/… (POST)Llamar a una función personalizada por HTTP con un token de accesolib/managers/custom-function-sdk/_/server/endpoint.js
/api/ai-agent/mcp, /api/ai-agent/events (POST)Las ejecuciones del agente de IA que informan de vuelta a MonoChatserver/api/ai-agent.ts
/api/channels-manager/facebook/auth, /api/channels-manager/tiktok/auth (GET)La ventana emergente que se muestra tras conectar una cuenta de Facebook o TikTokpackages/app-managers-channel/src/webhook.ts
/l/:_id (GET)Enlaces cortos que usted envía a los clientesserver/api/short-link.js
/api/status (GET)La aplicación móvil comprueba el servidor y sus opciones de inicio de sesiónserver/api/status.js
/.well-known/assetlinks.json, /.well-known/apple-app-site-association (GET)Enlaces de aplicación de Android e iOSserver/api/assetlinks.js, server/api/apple-app-site-association.js

Abra /api/:slug/custom-functions, /api/ai-agent, /l/ y las dos rutas de ventana emergente de canales si utiliza esas funciones desde fuera de su red. Las rutas de la ventana emergente de canales se abren en el navegador de la persona que conecta la cuenta, por lo que pueden seguir restringidas si solo las personas de su red conectan canales. Abra /api/status y los dos archivos /.well-known solo si sus agentes usan la aplicación móvil de MonoChat desde fuera de su red.

Inicio de sesión con un proveedor (OAuth)​

Cuando un proveedor de inicio de sesión redirige el navegador de vuelta a MonoChat, la redirección es una solicitud normal del navegador de la persona que inicia sesión, por lo que sigue la misma restricción que la aplicación web. Mantenga accesibles las rutas de redirección para las personas que inician sesión de esta forma. Las rutas son los valores redirectPath en public.oauth.<provider> en los ajustes del servidor (los ejemplos predeterminados son /api/oauth/google/redirect, /api/oauth/microsoft/redirect, /api/oauth/facebook/redirect y /api/oauth/apple/redirect). El inicio de sesión con Apple devuelve el navegador con un POST (responseMode: form_post), que la misma ruta acepta. Para la aplicación móvil, el servidor también responde en /api/oauth/facebook/mobile, /api/oauth/microsoft/mobile y /auth/oauth-callback/<provider> (server/configs/oauth/mobile.ts).

Si utiliza la integración con Microsoft Marketplace, la ruta de microsoftMarketplace.redirectWebhookPath recibe la solicitud de Microsoft Marketplace y debe ser accesible desde internet (server/configs/microsoft-marketplace/webook.ts).

Pasar la IP real del cliente a través del proxy​

MonoChat registra la IP del cliente para las sesiones y los registros de estado. Detrás de un proxy inverso o un balanceador de carga ve la dirección del proxy, a menos que usted transmita la real.

  1. Haga que nginx (o su balanceador de carga) envíe la dirección original en el encabezado X-Forwarded-For, por ejemplo proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;.
  2. Establezca la variable de entorno HTTP_FORWARDED_COUNT en el servidor de MonoChat con el número de proxies delante de la aplicación. La lee el framework Meteor, no el código de MonoChat, por lo que pertenece a los ajustes de su despliegue y no al JSON de ajustes.

Compruebe su configuración​

  1. Desde una red no permitida, abra la aplicación web. Debe ser rechazada.
  2. Desde una red permitida, inicie sesión y abra la bandeja de entrada. Los mensajes deben cargarse, lo que demuestra que el endpoint WebSocket está abierto para usted.
  3. Envíe un mensaje de prueba a un canal conectado desde fuera de su red y confirme que llega a la bandeja de entrada.
  4. Cree un enlace de pago para un pedido de prueba de poco importe, pague y confirme que el pedido figura como pagado.
aviso

Pruebe las rutas después de cada cambio en las reglas de su proxy. Una ruta de webhook bloqueada no muestra ningún error en MonoChat: simplemente dejan de llegar los mensajes y las confirmaciones de pago.