پرش به مطلب اصلی

محدود کردن نصب On-Premise بر اساس IP

این صفحه برای مدیران نصب On-Premise مونوچت (MonoChat) است. توضیح می‌دهد چگونه برنامه وب را در سطح شبکه (nginx یا فایروال) به شبکه‌های خودتان محدود کنید، بدون اینکه سرویس‌هایی را که باید از اینترنت با MonoChat تماس بگیرند مسدود کنید.

MonoChat فهرست IP مجاز مخصوص خود را ندارد. محدودیت در nginx، لود بالانسر یا فایروال شما اعمال می‌شود و برای کل نصب است، نه برای یک سازمان.

چه چیزی را محدود کنیم و چه چیزی را باز بگذاریم​

محدود به شبکه‌های شما بمانداز اینترنت در دسترس بماند
برنامه وب و هر چیزی که در ستون سمت چپ فهرست نشده استمسیرهای وب‌هوک و کال‌بک در جدول‌های زیر
نقطه پایانی DDP/WebSocket که برنامه وب به آن متصل می‌شود (/websocket)

رابط وب و نقطه پایانی WebSocket را با هم محدود کنید: برنامه از هر دو استفاده می‌کند. برای بقیه فقط مسیرهای زیر را مجاز کنید و مابقی را مسدود کنید.

مسیرهایی که سرویس‌های خارجی فراخوانی می‌کنند​

هر مسیر زیر توسط سرور MonoChat ثبت شده است. مسیری که از یک تنظیم ساخته می‌شود همان hookPath است که روی سرور پیکربندی کرده‌اید (در channelConnectors.<name> یا paymentSystemConnectors.<name> در تنظیمات سرور)؛ پسوند را کد اضافه می‌کند. فقط کانکتورهایی را که استفاده می‌کنید باز کنید.

کانال‌ها​

مسیرفراخوانی‌کنندهتعریف‌شده در
<hookPath>/webhooks (POST)omni-message، برای WhatsApp Cloud، WhatsApp Gupshup، Instagram، Messenger، Telegram، TikTok، Twilio SMS و 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)سیستم‌های خودتان، از طریق کانال 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)ارائه‌دهنده SIP (کانال‌های SIP عمومی و Sonitel SIP)channelConnectors.genericSip.hookPath, channelConnectors.sonitelSip.hookPath
/api/facebook/channels/:channelId/flows/:flowId (POST)WhatsApp، برای WhatsApp Flowsserver/api/whatsapp-flow.js

ارائه‌دهندگان کانال (Meta، Telegram، TikTok، Twilio) مستقیماً MonoChat را فراخوانی نمی‌کنند. آن‌ها webhook listener مربوط به omni-message را فراخوانی می‌کنند که درخواست را به مسیر /webhooks بالا ارسال می‌کند. اگر omni-message را خودتان اجرا می‌کنید، webhook listener آن باید از اینترنت روی این مسیرها در دسترس باشد: /webhooks/meta-messenger, /webhooks/instagram-business, /webhooks/wab-cloud, /webhooks/wab-gupshup/:channelId, /webhooks/wab-360-dialog/:channelId, /webhooks/telegram-bot/:channelId, /webhooks/tiktok و /webhooks/twilio-sms/:channelId (apps/webhook-listener/src/modules/webhook-listeners/webhook-listeners.controller.ts در omni-message). MonoChat باید از omni-message روی مسیرهای /webhooks بالا در دسترس باشد.

سیستم‌های پرداخت​

ارائه‌دهندگان پرداخت هنگام پرداخت مشتری کال‌بک می‌زنند و پس از آن مشتری را به MonoChat برمی‌گردانند. هر دو باید از خارج از شبکه شما کار کنند.

کانکتورمسیرهای زیر 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خود hookPath (POST), /:paymentSystemOrderId/:status (POST)
N-Geniusخود hookPath (POST), /:paymentSystemOrderId/:status
Paywall/:paymentSystemOrderId/:status
UniqoPayخود hookPath (POST), /:paymentSystemOrderId/:status (POST)
VakıfBank Sanal POS/:status (GET و POST)
İş Yerim POSخود hookPath (GET و POST)

ساده‌ترین قاعده این است که برای هر کانکتور پرداختی که استفاده می‌کنید، <hookPath> و همه مسیرهای زیر آن را باز کنید. منبع هر کدام packages/app-connectors-<name>/src/webhook.ts است.

سایر نقاط پایانی سرور​

مسیرکاربردتعریف‌شده در
/api/:slug/custom-functions/… (POST)فراخوانی یک تابع سفارشی از طریق HTTP با توکن دسترسیlib/managers/custom-function-sdk/_/server/endpoint.js
/api/ai-agent/mcp, /api/ai-agent/events (POST)گزارش اجراهای عامل هوش مصنوعی به MonoChatserver/api/ai-agent.ts
/api/channels-manager/facebook/auth, /api/channels-manager/tiktok/auth (GET)پنجره بازشویی که پس از اتصال حساب Facebook یا TikTok برمی‌گرددpackages/app-managers-channel/src/webhook.ts
/l/:_id (GET)لینک‌های کوتاهی که برای مشتریان می‌فرستیدserver/api/short-link.js
/api/status (GET)برنامه موبایل سرور و گزینه‌های ورود آن را بررسی می‌کندserver/api/status.js
/.well-known/assetlinks.json, /.well-known/apple-app-site-association (GET)لینک‌های برنامه در Android و iOSserver/api/assetlinks.js, server/api/apple-app-site-association.js

اگر از این قابلیت‌ها خارج از شبکه خود استفاده می‌کنید، /api/:slug/custom-functions، /api/ai-agent، /l/ و دو مسیر پنجره بازشوی کانال را باز کنید. مسیرهای پنجره بازشوی کانال در مرورگر فردی باز می‌شوند که حساب را متصل می‌کند؛ بنابراین اگر فقط افراد داخل شبکه شما کانال‌ها را متصل می‌کنند، می‌توانند محدود بمانند. /api/status و دو فایل /.well-known را فقط زمانی باز کنید که کارشناسان شما از برنامه موبایل MonoChat خارج از شبکه شما استفاده می‌کنند.

ورود با یک ارائه‌دهنده (OAuth)​

وقتی یک ارائه‌دهنده ورود، مرورگر را به MonoChat برمی‌گرداند، این بازگشت یک درخواست معمولی مرورگر از طرف فردی است که وارد می‌شود؛ بنابراین از همان محدودیت برنامه وب پیروی می‌کند. مسیرهای بازگشت را برای افرادی که از این روش وارد می‌شوند در دسترس نگه دارید. این مسیرها مقادیر redirectPath در public.oauth.<provider> در تنظیمات سرور هستند (نمونه‌های پیش‌فرض /api/oauth/google/redirect, /api/oauth/microsoft/redirect, /api/oauth/facebook/redirect و /api/oauth/apple/redirect هستند). ورود با Apple مرورگر را با POST برمی‌گرداند (responseMode: form_post) که همان مسیر آن را می‌پذیرد. برای برنامه موبایل، سرور همچنین به /api/oauth/facebook/mobile, /api/oauth/microsoft/mobile و /auth/oauth-callback/<provider> پاسخ می‌دهد (server/configs/oauth/mobile.ts).

اگر از یکپارچه‌سازی Microsoft Marketplace استفاده می‌کنید، مسیر microsoftMarketplace.redirectWebhookPath درخواست Microsoft Marketplace را دریافت می‌کند و باید از اینترنت در دسترس باشد (server/configs/microsoft-marketplace/webook.ts).

عبور دادن IP واقعی کلاینت از پروکسی​

MonoChat برای نشست‌ها و لاگ‌های وضعیت، IP کلاینت را ثبت می‌کند. پشت یک پروکسی معکوس یا لود بالانسر، آدرس پروکسی را می‌بیند، مگر اینکه آدرس واقعی را منتقل کنید.

  1. کاری کنید که nginx (یا لود بالانسر شما) آدرس اصلی را در هدر X-Forwarded-For بفرستد، برای مثال proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;.
  2. متغیر محیطی HTTP_FORWARDED_COUNT را روی سرور MonoChat برابر تعداد پروکسی‌های جلوی برنامه تنظیم کنید. این متغیر را فریم‌ورک Meteor می‌خواند، نه کد MonoChat؛ بنابراین جایش در تنظیمات استقرار شماست، نه در JSON تنظیمات.

بررسی پیکربندی​

  1. از یک شبکه غیرمجاز، برنامه وب را باز کنید. باید رد شود.
  2. از یک شبکه مجاز وارد شوید و صندوق ورودی را باز کنید. پیام‌ها باید بارگذاری شوند؛ این نشان می‌دهد نقطه پایانی WebSocket برای شما باز است.
  3. از خارج از شبکه خود یک پیام آزمایشی به یک کانال متصل بفرستید و تأیید کنید که در صندوق ورودی می‌رسد.
  4. برای یک سفارش آزمایشی کوچک لینک پرداخت بسازید، آن را پرداخت کنید و تأیید کنید که سفارش پرداخت‌شده نشان داده می‌شود.
هشدار

پس از هر تغییر در قوانین پروکسی خود مسیرها را آزمایش کنید. مسدود بودن یک مسیر وب‌هوک در MonoChat خطایی نشان نمی‌دهد: فقط پیام‌ها و تأییدیه‌های پرداخت دیگر نمی‌رسند.