Restricționarea unei instalări On-Premise după IP
Această pagină se adresează operatorilor unei instalări MonoChat on-premise. Explică cum limitați aplicația web la propriile rețele, la nivel de rețea (nginx sau firewall), fără a bloca serviciile care trebuie să apeleze MonoChat din internet.
MonoChat nu are o listă proprie de IP-uri permise. Restricția se află în nginx, în load balancer sau în firewall și se aplică întregii instalări, nu unui singur tenant.
Ce se restricționează și ce rămâne deschis
| Rămâne restricționat la rețelele dvs. | Rămâne accesibil din internet |
|---|---|
| Aplicația web și tot ce nu este listat în dreapta | Căile de webhook și de callback din tabelele de mai jos |
Endpoint-ul DDP/WebSocket la care se conectează aplicația web (/websocket) |
Restricționați împreună interfața web și endpoint-ul WebSocket: aplicația le folosește pe ambele. Pentru toți ceilalți permiteți doar căile de mai jos și blocați restul.
Căile apelate de serviciile externe
Fiecare cale de mai jos este înregistrată de serverul MonoChat. O cale construită dintr-o setare este hookPath configurat de dvs. pe server (în channelConnectors.<name> sau paymentSystemConnectors.<name> din setările serverului); sufixul este adăugat de cod. Deschideți doar conectorii pe care îi folosiți.
Canale
| Cale | Apelată de | Definită în |
|---|---|---|
<hookPath>/webhooks (POST) | omni-message, pentru WhatsApp Cloud, WhatsApp Gupshup, Instagram, Messenger, Telegram, TikTok, Twilio SMS și 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) | Propriile dvs. sisteme, prin canalul 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) | Furnizorul SIP (canalele generic SIP și Sonitel SIP) | channelConnectors.genericSip.hookPath, channelConnectors.sonitelSip.hookPath |
/api/facebook/channels/:channelId/flows/:flowId (POST) | WhatsApp, pentru WhatsApp Flows | server/api/whatsapp-flow.js |
Furnizorii de canale (Meta, Telegram, TikTok, Twilio) nu apelează direct MonoChat. Ei apelează webhook listener-ul omni-message, care transmite mai departe către calea /webhooks de mai sus. Dacă rulați singuri omni-message, webhook listener-ul său trebuie să fie accesibil din internet pe aceste căi: /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 în omni-message). MonoChat însuși trebuie să fie accesibil din omni-message pe căile /webhooks de mai sus.
Sisteme de plată
Furnizorii de plăți fac un apel de confirmare când un client plătește și îl redirecționează apoi pe client înapoi la MonoChat. Ambele trebuie să funcționeze din afara rețelei dvs.
| Conector | Căi sub 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 | chiar hookPath (POST), /:paymentSystemOrderId/:status (POST) |
| N-Genius | chiar hookPath (POST), /:paymentSystemOrderId/:status |
| Paywall | /:paymentSystemOrderId/:status |
| UniqoPay | chiar hookPath (POST), /:paymentSystemOrderId/:status (POST) |
| VakıfBank Sanal POS | /:status (GET și POST) |
| İş Yerim POS | chiar hookPath (GET și POST) |
Cea mai simplă regulă este să deschideți <hookPath> și tot ce se află sub el pentru fiecare conector de plată pe care îl folosiți. Fiecare sursă este packages/app-connectors-<name>/src/webhook.ts.
Alte endpoint-uri ale serverului
| Cale | Utilizare | Definită în |
|---|---|---|
/api/:slug/custom-functions/… (POST) | Apelarea unei funcții personalizate prin HTTP cu un token de acces | lib/managers/custom-function-sdk/_/server/endpoint.js |
/api/ai-agent/mcp, /api/ai-agent/events (POST) | Rulările agentului AI raportează înapoi către MonoChat | server/api/ai-agent.ts |
/api/channels-manager/facebook/auth, /api/channels-manager/tiktok/auth (GET) | Fereastra pop-up care se întoarce după conectarea unui cont Facebook sau TikTok | packages/app-managers-channel/src/webhook.ts |
/l/:_id (GET) | Linkuri scurte pe care le trimiteți clienților | server/api/short-link.js |
/api/status (GET) | Aplicația mobilă verifică serverul și opțiunile sale de autentificare | server/api/status.js |
/.well-known/assetlinks.json, /.well-known/apple-app-site-association (GET) | Linkuri de aplicație Android și iOS | server/api/assetlinks.js, server/api/apple-app-site-association.js |
Deschideți /api/:slug/custom-functions, /api/ai-agent, /l/ și cele două căi pop-up ale canalelor dacă folosiți aceste funcții din afara rețelei dvs. Căile pop-up ale canalelor se deschid în browserul persoanei care conectează contul, deci pot rămâne restricționate dacă doar persoanele din rețeaua dvs. conectează canale. Deschideți /api/status și cele două fișiere /.well-known doar dacă agenții dvs. folosesc aplicația mobilă MonoChat din afara rețelei dvs.
Autentificarea cu un furnizor (OAuth)
Când un furnizor de autentificare redirecționează browserul înapoi la MonoChat, redirecționarea este o cerere obișnuită de browser din partea persoanei care se autentifică, deci urmează aceeași restricție ca aplicația web. Păstrați căile de redirecționare accesibile pentru persoanele care se autentifică astfel. Căile sunt valorile redirectPath din public.oauth.<provider> în setările serverului (exemplele implicite sunt /api/oauth/google/redirect, /api/oauth/microsoft/redirect, /api/oauth/facebook/redirect și /api/oauth/apple/redirect). Autentificarea cu Apple trimite browserul înapoi cu un POST (responseMode: form_post), pe care aceeași cale îl acceptă. Pentru aplicația mobilă, serverul răspunde și la /api/oauth/facebook/mobile, /api/oauth/microsoft/mobile și /auth/oauth-callback/<provider> (server/configs/oauth/mobile.ts).
Dacă folosiți integrarea Microsoft Marketplace, calea din microsoftMarketplace.redirectWebhookPath primește cererea Microsoft Marketplace și trebuie să fie accesibilă din internet (server/configs/microsoft-marketplace/webook.ts).
Transmiteți IP-ul real al clientului prin proxy
MonoChat înregistrează IP-ul clientului pentru sesiuni și pentru jurnalele de stare. În spatele unui reverse proxy sau al unui load balancer vede adresa proxy-ului, dacă nu o transmiteți pe cea reală.
- Configurați nginx (sau load balancer-ul) să trimită adresa originală în antetul
X-Forwarded-For, de exempluproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;. - Setați variabila de mediu
HTTP_FORWARDED_COUNTpe serverul MonoChat la numărul de proxy-uri din fața aplicației. Ea este citită de framework-ul Meteor, nu de codul MonoChat, deci își are locul în setările de deployment și nu în JSON-ul de setări.
Verificați configurația
- Dintr-o rețea care nu este permisă, deschideți aplicația web. Accesul trebuie refuzat.
- Dintr-o rețea permisă, autentificați-vă și deschideți inbox-ul. Mesajele trebuie să se încarce, ceea ce dovedește că endpoint-ul WebSocket este deschis pentru dvs.
- Trimiteți un mesaj de test către un canal conectat din afara rețelei dvs. și confirmați că ajunge în inbox.
- Creați un link de plată pentru o comandă de test de mică valoare, plătiți-o și confirmați că comanda apare ca plătită.
Testați căile după fiecare modificare a regulilor proxy-ului. O cale de webhook blocată nu afișează nicio eroare în MonoChat: mesajele și confirmările de plată pur și simplu nu mai ajung.