On-Premise-Installation nach IP-Adresse einschränken
Diese Seite richtet sich an Betreiber einer On-Premise-Installation von MonoChat. Sie erklärt, wie Sie die Web-App auf Netzwerkebene (nginx oder Firewall) auf Ihre eigenen Netze beschränken, ohne die Dienste zu blockieren, die MonoChat aus dem Internet aufrufen müssen.
MonoChat hat keine eigene IP-Allowlist. Die Einschränkung liegt in Ihrem nginx, Load Balancer oder Ihrer Firewall und gilt für die gesamte Installation, nicht für einen einzelnen Mandanten.
Was einzuschränken ist und was offen bleibt
| Auf Ihre Netze beschränkt lassen | Aus dem Internet erreichbar lassen |
|---|---|
| Die Web-App und alles, was rechts nicht aufgeführt ist | Die Webhook- und Callback-Pfade in den folgenden Tabellen |
Der DDP/WebSocket-Endpunkt, mit dem sich die Web-App verbindet (/websocket) |
Beschränken Sie die Web-Oberfläche und den WebSocket-Endpunkt gemeinsam: Die App nutzt beide. Erlauben Sie allen anderen nur die folgenden Pfade und blockieren Sie den Rest.
Pfade, die externe Dienste aufrufen
Jeder der folgenden Pfade wird vom MonoChat-Server registriert. Ein aus einer Einstellung gebildeter Pfad ist der hookPath, den Sie auf dem Server konfiguriert haben (in channelConnectors.<name> oder paymentSystemConnectors.<name> in den Servereinstellungen); das Suffix fügt der Code hinzu. Öffnen Sie nur die Connectors, die Sie verwenden.
Kanäle
| Pfad | Aufgerufen von | Definiert in |
|---|---|---|
<hookPath>/webhooks (POST) | omni-message, für WhatsApp Cloud, WhatsApp Gupshup, Instagram, Messenger, Telegram, TikTok, Twilio SMS und Varan OTP | packages/app-connectors-om2-*/src/webhooks/webhook.ts; hookPath aus channelConnectors.whatsappBusinessVegaCloud, whatsappBusinessVegaGupshup, instagramCastor, messengerRigel, telegramBotRegulus, tikTokTimir, twilioSms, varanOtp |
<hookPath>/webhooks, <hookPath>/sessions, <hookPath>/messages (POST) | Ihre eigenen Systeme, über den Messages-API-Kanal | 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) | Der SIP-Anbieter (Kanäle Generic SIP und Sonitel SIP) | channelConnectors.genericSip.hookPath, channelConnectors.sonitelSip.hookPath |
/api/facebook/channels/:channelId/flows/:flowId (POST) | WhatsApp, für WhatsApp Flows | server/api/whatsapp-flow.js |
Die Kanalanbieter (Meta, Telegram, TikTok, Twilio) rufen MonoChat nicht direkt auf. Sie rufen den Webhook-Listener von omni-message auf, der an den oben genannten Pfad /webhooks weiterleitet. Wenn Sie omni-message selbst betreiben, muss sein Webhook-Listener auf diesen Pfaden aus dem Internet erreichbar sein: /webhooks/meta-messenger, /webhooks/instagram-business, /webhooks/wab-cloud, /webhooks/wab-gupshup/:channelId, /webhooks/wab-360-dialog/:channelId, /webhooks/telegram-bot/:channelId, /webhooks/tiktok und /webhooks/twilio-sms/:channelId (apps/webhook-listener/src/modules/webhook-listeners/webhook-listeners.controller.ts in omni-message). MonoChat selbst muss für omni-message auf den oben genannten /webhooks-Pfaden erreichbar sein.
Zahlungssysteme
Zahlungsanbieter rufen zurück, wenn ein Kunde bezahlt, und leiten den Kunden danach zu MonoChat zurück. Beides muss von außerhalb Ihres Netzes funktionieren.
| Connector | Pfade unter dessen 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 | der hookPath selbst (POST), /:paymentSystemOrderId/:status (POST) |
| N-Genius | der hookPath selbst (POST), /:paymentSystemOrderId/:status |
| Paywall | /:paymentSystemOrderId/:status |
| UniqoPay | der hookPath selbst (POST), /:paymentSystemOrderId/:status (POST) |
| VakıfBank Sanal POS | /:status (GET und POST) |
| İş Yerim POS | der hookPath selbst (GET und POST) |
Am einfachsten öffnen Sie für jeden verwendeten Zahlungs-Connector <hookPath> und alles darunter. Die jeweilige Quelle ist packages/app-connectors-<name>/src/webhook.ts.
Weitere Server-Endpunkte
| Pfad | Verwendet für | Definiert in |
|---|---|---|
/api/:slug/custom-functions/… (POST) | Aufruf einer benutzerdefinierten Funktion über HTTP mit einem Zugriffstoken | lib/managers/custom-function-sdk/_/server/endpoint.js |
/api/ai-agent/mcp, /api/ai-agent/events (POST) | KI-Agent-Läufe, die an MonoChat zurückmelden | server/api/ai-agent.ts |
/api/channels-manager/facebook/auth, /api/channels-manager/tiktok/auth (GET) | Das Pop-up, das nach dem Verbinden eines Facebook- oder TikTok-Kontos zurückkehrt | packages/app-managers-channel/src/webhook.ts |
/l/:_id (GET) | Kurzlinks, die Sie an Kunden senden | server/api/short-link.js |
/api/status (GET) | Die Mobile App prüft den Server und seine Anmeldeoptionen | server/api/status.js |
/.well-known/assetlinks.json, /.well-known/apple-app-site-association (GET) | App-Links für Android und iOS | server/api/assetlinks.js, server/api/apple-app-site-association.js |
Öffnen Sie /api/:slug/custom-functions, /api/ai-agent, /l/ und die beiden Kanal-Pop-up-Pfade, wenn Sie diese Funktionen von außerhalb Ihres Netzes nutzen. Die Kanal-Pop-up-Pfade werden im Browser der Person geöffnet, die das Konto verbindet; sie können daher eingeschränkt bleiben, wenn nur Personen in Ihrem Netz Kanäle verbinden. Öffnen Sie /api/status und die beiden /.well-known-Dateien nur, wenn Ihre Agenten die MonoChat Mobile App von außerhalb Ihres Netzes nutzen.
Anmeldung über einen Anbieter (OAuth)
Wenn ein Anmeldeanbieter den Browser zurück zu MonoChat umleitet, ist das eine normale Browser-Anfrage der anmeldenden Person und unterliegt daher derselben Einschränkung wie die Web-App. Halten Sie die Weiterleitungspfade für die Personen erreichbar, die sich auf diese Weise anmelden. Die Pfade sind die redirectPath-Werte in public.oauth.<provider> in den Servereinstellungen (die Standardbeispiele sind /api/oauth/google/redirect, /api/oauth/microsoft/redirect, /api/oauth/facebook/redirect und /api/oauth/apple/redirect). Die Anmeldung mit Apple schickt den Browser per POST zurück (responseMode: form_post), was derselbe Pfad akzeptiert. Für die Mobile App beantwortet der Server außerdem /api/oauth/facebook/mobile, /api/oauth/microsoft/mobile und /auth/oauth-callback/<provider> (server/configs/oauth/mobile.ts).
Wenn Sie die Microsoft-Marketplace-Integration nutzen, empfängt der Pfad in microsoftMarketplace.redirectWebhookPath die Anfrage von Microsoft Marketplace und muss aus dem Internet erreichbar sein (server/configs/microsoft-marketplace/webook.ts).
Die echte Client-IP durch den Proxy weiterreichen
MonoChat speichert die Client-IP für Sitzungen und Status-Logs. Hinter einem Reverse Proxy oder Load Balancer sieht es die Adresse des Proxys, sofern Sie nicht die echte weiterreichen.
- Lassen Sie nginx (oder Ihren Load Balancer) die ursprüngliche Adresse im Header
X-Forwarded-Forsenden, zum Beispiel mitproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;. - Setzen Sie die Umgebungsvariable
HTTP_FORWARDED_COUNTauf dem MonoChat-Server auf die Anzahl der Proxys vor der App. Sie wird vom Meteor-Framework gelesen, nicht vom MonoChat-Code, und gehört daher in Ihre Deployment-Einstellungen und nicht in die Settings-JSON.
Ihre Einrichtung prüfen
- Öffnen Sie die Web-App aus einem Netz, das nicht erlaubt ist. Sie muss abgewiesen werden.
- Melden Sie sich aus einem erlaubten Netz an und öffnen Sie den Posteingang. Die Nachrichten müssen laden; das beweist, dass der WebSocket-Endpunkt für Sie offen ist.
- Senden Sie von außerhalb Ihres Netzes eine Testnachricht an einen verbundenen Kanal und prüfen Sie, dass sie im Posteingang ankommt.
- Erstellen Sie einen Zahlungslink für eine kleine Testbestellung, bezahlen Sie ihn und prüfen Sie, dass die Bestellung als bezahlt angezeigt wird.
Testen Sie die Pfade nach jeder Änderung Ihrer Proxy-Regeln. Ein blockierter Webhook-Pfad löst in MonoChat keinen Fehler aus: Die Nachrichten und Zahlungsbestätigungen kommen einfach nicht mehr an.