Przejdź do głównej zawartości

Ograniczanie instalacji lokalnej (on-premise) według adresu IP

Ta strona jest przeznaczona dla administratorów lokalnej instalacji MonoChat. Wyjaśnia, jak ograniczyć aplikację internetową do własnych sieci na poziomie sieci (nginx lub zapora sieciowa), nie blokując usług, które muszą łączyć się z MonoChat z internetu.

MonoChat nie ma własnej listy dozwolonych adresów IP. Ograniczenie jest ustawiane w nginx, load balancerze lub zaporze sieciowej i dotyczy całej instalacji, a nie pojedynczej organizacji.

Co ograniczyć, a co pozostawić otwarte​

Ogranicz do swoich sieciPozostaw dostępne z internetu
Aplikacja internetowa i wszystko, czego nie ma na liście po prawejŚcieżki webhooków i callbacków z poniższych tabel
Punkt końcowy DDP/WebSocket, z którym łączy się aplikacja internetowa (/websocket)

Ogranicz interfejs internetowy i punkt końcowy WebSocket razem: aplikacja korzysta z obu. Dla pozostałych użytkowników zezwól tylko na poniższe ścieżki, a resztę zablokuj.

Ścieżki, z których korzystają usługi zewnętrzne​

Każda poniższa ścieżka jest rejestrowana przez serwer MonoChat. Ścieżka zbudowana z ustawienia to skonfigurowany na serwerze hookPath (w channelConnectors.<name> lub paymentSystemConnectors.<name> w ustawieniach serwera); sufiks dodaje kod. Otwórz tylko te konektory, z których korzystasz.

Kanały​

ŚcieżkaWywoływana przezZdefiniowana w
<hookPath>/webhooks (POST)omni-message, dla WhatsApp Cloud, WhatsApp Gupshup, Instagram, Messenger, Telegram, TikTok, Twilio SMS i Varan OTPpackages/app-connectors-om2-*/src/webhooks/webhook.ts; hookPath z channelConnectors.whatsappBusinessVegaCloud, whatsappBusinessVegaGupshup, instagramCastor, messengerRigel, telegramBotRegulus, tikTokTimir, twilioSms, varanOtp
<hookPath>/webhooks, <hookPath>/sessions, <hookPath>/messages (POST)Twoje własne systemy, przez kanał 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)Dostawca SIP (kanały generic SIP i Sonitel SIP)channelConnectors.genericSip.hookPath, channelConnectors.sonitelSip.hookPath
/api/facebook/channels/:channelId/flows/:flowId (POST)WhatsApp, dla WhatsApp Flowsserver/api/whatsapp-flow.js

Dostawcy kanałów (Meta, Telegram, TikTok, Twilio) nie łączą się bezpośrednio z MonoChat. Łączą się z webhook listenerem omni-message, który przekazuje żądania do powyższej ścieżki /webhooks. Jeśli sam uruchamiasz omni-message, jego webhook listener musi być dostępny z internetu pod tymi ścieżkami: /webhooks/meta-messenger, /webhooks/instagram-business, /webhooks/wab-cloud, /webhooks/wab-gupshup/:channelId, /webhooks/wab-360-dialog/:channelId, /webhooks/telegram-bot/:channelId, /webhooks/tiktok i /webhooks/twilio-sms/:channelId (apps/webhook-listener/src/modules/webhook-listeners/webhook-listeners.controller.ts w omni-message). Sam MonoChat musi być dostępny dla omni-message pod powyższymi ścieżkami /webhooks.

Systemy płatności​

Dostawcy płatności wywołują callback, gdy klient zapłaci, a następnie odsyłają klienta z powrotem do MonoChat. Oba mechanizmy muszą działać spoza Twojej sieci.

KonektorŚcieżki pod jego 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
MyFatoorahsam hookPath (POST), /:paymentSystemOrderId/:status (POST)
N-Geniussam hookPath (POST), /:paymentSystemOrderId/:status
Paywall/:paymentSystemOrderId/:status
UniqoPaysam hookPath (POST), /:paymentSystemOrderId/:status (POST)
VakıfBank Sanal POS/:status (GET i POST)
İş Yerim POSsam hookPath (GET i POST)

Najprościej otworzyć <hookPath> i wszystko pod nim dla każdego używanego konektora płatności. Źródłem każdego z nich jest packages/app-connectors-<name>/src/webhook.ts.

Pozostałe punkty końcowe serwera​

ŚcieżkaDo czego służyZdefiniowana w
/api/:slug/custom-functions/… (POST)Wywoływanie funkcji niestandardowej przez HTTP z tokenem dostępulib/managers/custom-function-sdk/_/server/endpoint.js
/api/ai-agent/mcp, /api/ai-agent/events (POST)Uruchomienia agenta AI raportujące z powrotem do MonoChatserver/api/ai-agent.ts
/api/channels-manager/facebook/auth, /api/channels-manager/tiktok/auth (GET)Okno podręczne, które wraca po połączeniu konta Facebook lub TikTokpackages/app-managers-channel/src/webhook.ts
/l/:_id (GET)Krótkie linki wysyłane klientomserver/api/short-link.js
/api/status (GET)Aplikacja mobilna sprawdza serwer i dostępne opcje logowaniaserver/api/status.js
/.well-known/assetlinks.json, /.well-known/apple-app-site-association (GET)Linki aplikacji dla Androida i iOSserver/api/assetlinks.js, server/api/apple-app-site-association.js

Otwórz /api/:slug/custom-functions, /api/ai-agent, /l/ i dwie ścieżki okien podręcznych kanałów, jeśli korzystasz z tych funkcji spoza swojej sieci. Ścieżki okien podręcznych kanałów otwierają się w przeglądarce osoby łączącej konto, więc mogą pozostać ograniczone, jeśli kanały łączą tylko osoby z Twojej sieci. Otwórz /api/status i dwa pliki /.well-known tylko wtedy, gdy Twoi agenci korzystają z aplikacji mobilnej MonoChat spoza Twojej sieci.

Logowanie przez dostawcę (OAuth)​

Gdy dostawca logowania przekierowuje przeglądarkę z powrotem do MonoChat, przekierowanie jest zwykłym żądaniem przeglądarki osoby, która się loguje, więc podlega temu samemu ograniczeniu co aplikacja internetowa. Pozostaw ścieżki przekierowań dostępne dla osób logujących się w ten sposób. Ścieżki to wartości redirectPath w public.oauth.<provider> w ustawieniach serwera (domyślne przykłady to /api/oauth/google/redirect, /api/oauth/microsoft/redirect, /api/oauth/facebook/redirect i /api/oauth/apple/redirect). Logowanie przez Apple odsyła przeglądarkę metodą POST (responseMode: form_post), którą ta sama ścieżka akceptuje. Dla aplikacji mobilnej serwer odpowiada też na /api/oauth/facebook/mobile, /api/oauth/microsoft/mobile i /auth/oauth-callback/<provider> (server/configs/oauth/mobile.ts).

Jeśli korzystasz z integracji Microsoft Marketplace, ścieżka z microsoftMarketplace.redirectWebhookPath odbiera żądanie Microsoft Marketplace i musi być dostępna z internetu (server/configs/microsoft-marketplace/webook.ts).

Przekazywanie prawdziwego adresu IP klienta przez proxy​

MonoChat zapisuje adres IP klienta dla sesji i logów statusu. Za reverse proxy lub load balancerem widzi adres proxy, dopóki nie przekażesz prawdziwego.

  1. Skonfiguruj nginx (lub load balancer), aby wysyłał oryginalny adres w nagłówku X-Forwarded-For, na przykład proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;.
  2. Ustaw na serwerze MonoChat zmienną środowiskową HTTP_FORWARDED_COUNT na liczbę serwerów proxy przed aplikacją. Odczytuje ją framework Meteor, a nie kod MonoChat, więc należy do ustawień wdrożenia, a nie do pliku JSON z ustawieniami.

Sprawdź konfigurację​

  1. Z sieci, która nie jest dozwolona, otwórz aplikację internetową. Dostęp musi zostać odrzucony.
  2. Z dozwolonej sieci zaloguj się i otwórz skrzynkę odbiorczą. Wiadomości muszą się załadować, co potwierdza, że punkt końcowy WebSocket jest dla Ciebie otwarty.
  3. Wyślij wiadomość testową do podłączonego kanału spoza swojej sieci i sprawdź, czy dotarła do skrzynki odbiorczej.
  4. Utwórz link płatności dla małego zamówienia testowego, opłać go i sprawdź, czy zamówienie jest oznaczone jako opłacone.
ostrzeżenie

Przetestuj ścieżki po każdej zmianie reguł proxy. Zablokowana ścieżka webhooka nie powoduje błędu w MonoChat: wiadomości i potwierdzenia płatności po prostu przestają docierać.