Aller au contenu principal

Restreindre une installation on-premise par IP

Cette page s'adresse aux exploitants d'une installation MonoChat on-premise. Elle explique comment limiter l'application web à vos propres réseaux au niveau réseau (nginx ou pare-feu) sans bloquer les services qui doivent appeler MonoChat depuis internet.

MonoChat n'a pas de liste d'IP autorisées propre. La restriction se trouve dans votre nginx, votre répartiteur de charge ou votre pare-feu et s'applique à toute l'installation, pas à une seule organisation.

Ce qu'il faut restreindre, ce qu'il faut laisser ouvert​

À restreindre à vos réseauxÀ laisser joignable depuis internet
L'application web et tout ce qui ne figure pas à droiteLes chemins de webhook et de callback des tableaux ci-dessous
Le point d'accès DDP/WebSocket auquel l'application web se connecte (/websocket)

Restreignez ensemble l'interface web et le point d'accès WebSocket : l'application utilise les deux. N'autorisez que les chemins ci-dessous pour tous les autres et bloquez le reste.

Chemins appelés par les services externes​

Chaque chemin ci-dessous est enregistré par le serveur MonoChat. Un chemin construit à partir d'un paramètre est le hookPath que vous avez configuré sur le serveur (dans channelConnectors.<name> ou paymentSystemConnectors.<name> dans les paramètres du serveur) ; le suffixe est ajouté par le code. N'ouvrez que les connecteurs que vous utilisez.

Canaux​

CheminAppelé parDéfini dans
<hookPath>/webhooks (POST)omni-message, pour WhatsApp Cloud, WhatsApp Gupshup, Instagram, Messenger, Telegram, TikTok, Twilio SMS et 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)Vos propres systèmes, via le 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)Le fournisseur SIP (canaux SIP générique et Sonitel SIP)channelConnectors.genericSip.hookPath, channelConnectors.sonitelSip.hookPath
/api/facebook/channels/:channelId/flows/:flowId (POST)WhatsApp, pour WhatsApp Flowsserver/api/whatsapp-flow.js

Les fournisseurs de canaux (Meta, Telegram, TikTok, Twilio) n'appellent pas MonoChat directement. Ils appellent le webhook listener d'omni-message, qui transmet au chemin /webhooks ci-dessus. Si vous exploitez omni-message vous-même, son webhook listener doit être joignable depuis internet sur ces chemins : /webhooks/meta-messenger, /webhooks/instagram-business, /webhooks/wab-cloud, /webhooks/wab-gupshup/:channelId, /webhooks/wab-360-dialog/:channelId, /webhooks/telegram-bot/:channelId, /webhooks/tiktok et /webhooks/twilio-sms/:channelId (apps/webhook-listener/src/modules/webhook-listeners/webhook-listeners.controller.ts dans omni-message). MonoChat doit être joignable depuis omni-message sur les chemins /webhooks ci-dessus.

Systèmes de paiement​

Les fournisseurs de paiement rappellent MonoChat lorsqu'un client paie, puis renvoient le client vers MonoChat. Les deux doivent fonctionner depuis l'extérieur de votre réseau.

ConnecteurChemins sous son 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
MyFatoorahle hookPath lui-même (POST), /:paymentSystemOrderId/:status (POST)
N-Geniusle hookPath lui-même (POST), /:paymentSystemOrderId/:status
Paywall/:paymentSystemOrderId/:status
UniqoPayle hookPath lui-même (POST), /:paymentSystemOrderId/:status (POST)
VakıfBank Sanal POS/:status (GET et POST)
İş Yerim POSle hookPath lui-même (GET et POST)

La règle la plus simple consiste à ouvrir <hookPath> et tout ce qui se trouve en dessous pour chaque connecteur de paiement que vous utilisez. Chaque source est packages/app-connectors-<name>/src/webhook.ts.

Autres points d'accès du serveur​

CheminUtilisé pourDéfini dans
/api/:slug/custom-functions/… (POST)Appeler une fonction personnalisée en HTTP avec un jeton d'accèslib/managers/custom-function-sdk/_/server/endpoint.js
/api/ai-agent/mcp, /api/ai-agent/events (POST)Les exécutions de l'agent IA qui font un retour à MonoChatserver/api/ai-agent.ts
/api/channels-manager/facebook/auth, /api/channels-manager/tiktok/auth (GET)La fenêtre contextuelle qui s'affiche après la connexion d'un compte Facebook ou TikTokpackages/app-managers-channel/src/webhook.ts
/l/:_id (GET)Les liens courts que vous envoyez aux clientsserver/api/short-link.js
/api/status (GET)L'application mobile vérifie le serveur et ses options de connexionserver/api/status.js
/.well-known/assetlinks.json, /.well-known/apple-app-site-association (GET)Liens d'application Android et iOSserver/api/assetlinks.js, server/api/apple-app-site-association.js

Ouvrez /api/:slug/custom-functions, /api/ai-agent, /l/ et les deux chemins de fenêtre contextuelle des canaux si vous utilisez ces fonctionnalités depuis l'extérieur de votre réseau. Les chemins de fenêtre contextuelle des canaux s'ouvrent dans le navigateur de la personne qui connecte le compte ; ils peuvent donc rester restreints si seules les personnes de votre réseau connectent des canaux. N'ouvrez /api/status et les deux fichiers /.well-known que si vos agents utilisent l'application mobile MonoChat depuis l'extérieur de votre réseau.

Connexion avec un fournisseur (OAuth)​

Lorsqu'un fournisseur de connexion redirige le navigateur vers MonoChat, la redirection est une requête de navigateur normale de la personne qui se connecte ; elle suit donc la même restriction que l'application web. Gardez les chemins de redirection joignables pour les personnes qui se connectent ainsi. Les chemins sont les valeurs redirectPath dans public.oauth.<provider> dans les paramètres du serveur (les exemples par défaut sont /api/oauth/google/redirect, /api/oauth/microsoft/redirect, /api/oauth/facebook/redirect et /api/oauth/apple/redirect). La connexion Apple renvoie le navigateur par un POST (responseMode: form_post), que le même chemin accepte. Pour l'application mobile, le serveur répond aussi sur /api/oauth/facebook/mobile, /api/oauth/microsoft/mobile et /auth/oauth-callback/<provider> (server/configs/oauth/mobile.ts).

Si vous utilisez l'intégration Microsoft Marketplace, le chemin de microsoftMarketplace.redirectWebhookPath reçoit la requête de Microsoft Marketplace et doit être joignable depuis internet (server/configs/microsoft-marketplace/webook.ts).

Transmettre l'IP réelle du client via le proxy​

MonoChat enregistre l'IP du client pour les sessions et les journaux d'état. Derrière un proxy inverse ou un répartiteur de charge, il voit l'adresse du proxy, sauf si vous transmettez la véritable.

  1. Faites en sorte que nginx (ou votre répartiteur de charge) envoie l'adresse d'origine dans l'en-tête X-Forwarded-For, par exemple proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;.
  2. Définissez la variable d'environnement HTTP_FORWARDED_COUNT sur le serveur MonoChat avec le nombre de proxys placés devant l'application. Elle est lue par le framework Meteor, pas par le code de MonoChat ; elle relève donc des paramètres de votre déploiement et non du JSON de paramètres.

Vérifier votre configuration​

  1. Depuis un réseau non autorisé, ouvrez l'application web. L'accès doit être refusé.
  2. Depuis un réseau autorisé, connectez-vous et ouvrez la boîte de réception. Les messages doivent se charger, ce qui prouve que le point d'accès WebSocket vous est ouvert.
  3. Envoyez un message de test vers un canal connecté depuis l'extérieur de votre réseau et vérifiez qu'il arrive dans la boîte de réception.
  4. Créez un lien de paiement pour une petite commande de test, payez-la et vérifiez que la commande apparaît comme payée.
attention

Testez les chemins après chaque modification de vos règles de proxy. Un chemin de webhook bloqué n'affiche aucune erreur dans MonoChat : les messages et les confirmations de paiement cessent simplement d'arriver.