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 redes | Mantener accesible desde internet |
|---|---|
| La aplicación web y todo lo que no figura a la derecha | Las 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
| Ruta | Llamada por | Definida en |
|---|---|---|
<hookPath>/webhooks (POST) | omni-message, para WhatsApp Cloud, WhatsApp Gupshup, Instagram, Messenger, Telegram, TikTok, Twilio SMS y Varan OTP | packages/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 API | channelConnectors.messagesApi.hookPath, packages/app-connectors-messages-api/src/webhooks/webhook.ts |
<hookPath>/message, <hookPath>/info (POST) | Chatwoot | channelConnectors.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 Flows | server/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.
| Conector | Rutas 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 |
| MyFatoorah | el propio hookPath (POST), /:paymentSystemOrderId/:status (POST) |
| N-Genius | el propio hookPath (POST), /:paymentSystemOrderId/:status |
| Paywall | /:paymentSystemOrderId/:status |
| UniqoPay | el propio hookPath (POST), /:paymentSystemOrderId/:status (POST) |
| VakıfBank Sanal POS | /:status (GET y POST) |
| İş Yerim POS | el 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
| Ruta | Se usa para | Definida en |
|---|---|---|
/api/:slug/custom-functions/… (POST) | Llamar a una función personalizada por HTTP con un token de acceso | lib/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 MonoChat | server/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 TikTok | packages/app-managers-channel/src/webhook.ts |
/l/:_id (GET) | Enlaces cortos que usted envía a los clientes | server/api/short-link.js |
/api/status (GET) | La aplicación móvil comprueba el servidor y sus opciones de inicio de sesión | server/api/status.js |
/.well-known/assetlinks.json, /.well-known/apple-app-site-association (GET) | Enlaces de aplicación de Android e iOS | server/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.
- Haga que nginx (o su balanceador de carga) envíe la dirección original en el encabezado
X-Forwarded-For, por ejemploproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;. - Establezca la variable de entorno
HTTP_FORWARDED_COUNTen 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
- Desde una red no permitida, abra la aplicación web. Debe ser rechazada.
- 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.
- Envíe un mensaje de prueba a un canal conectado desde fuera de su red y confirme que llega a la bandeja de entrada.
- Cree un enlace de pago para un pedido de prueba de poco importe, pague y confirme que el pedido figura como pagado.
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.