Metabase

تونل SSH (SSH tunneling)

متابیس می‌تواند برای اتصال به برخی پایگاه‌داده‌ها، ابتدا یک اتصال SSH به سروری میان متابیس و انبار داده برقرار کند و سپس از طریق آن اتصال میانی به خود انبار داده وصل شود. این کار در موقعیت‌هایی که اتصال مستقیم ممکن یا مجاز نیست، استفاده از متابیس را ممکن می‌کند.

چه زمانی از تونل SSH استفاده کنیم؟

به‌طور کلی، دو سناریوی اصلی برای استفاده از تونل SSH وجود دارد:

  • وقتی اتصال مستقیم به پایگاه‌داده امکان‌پذیر نیست.
  • وقتی اتصال مستقیم بنا به سیاست‌های امنیتی ممنوع است.

گاهی وقتی انبار داده در محیط سازمانی (Enterprise) قرار دارد، اتصال مستقیم توسط فایروال‌ها یا سامانه‌های جلوگیری از نفوذ مسدود می‌شود. در این‌جا «Bastion host»ها راه‌حلی ارائه می‌دهند: ابتدا به یک سرور روی لبهٔ شبکهٔ محافظت‌شده وصل می‌شوید و سپس از همان سرور واسط، یک اتصال دوم به انبار داده در شبکهٔ داخلی برقرار می‌کنید و این دو اتصال را به‌هم «وصله» می‌زنید. متابیس با قابلیت تونل SSH می‌تواند این فرایند را به‌صورت خودکار انجام دهد.

در حال حاضر Metabase Cloud از اتصال VPN به پایگاه‌داده‌ها پشتیبانی نمی‌کند. برای اتصال به پایگاه‌داده‌های موجود در شبکه‌های خصوصی می‌توانید از تونل SSH استفاده کنید.

نحوهٔ استفاده از تونل SSH

اتصال از طریق Bastion Host

وقتی از یک Bastion Host برای اتصال استفاده می‌کنید:

  • در تنظیمات اتصال پایگاه‌داده به گزینهٔ «Use an SSH-tunnel for database connections» پاسخ Yes بدهید.
  • نام میزبان (Hostname) انبار داده را آن‌طور که از داخل شبکه دیده می‌شود، در فیلد Host وارد کنید.
  • پورت انبار داده را همان‌طور که از داخل شبکه قابل‌دسترسی است، در فیلد Port وارد کنید.
  • نام بیرونی Bastion Host را (همان‌طور که از بیرون شبکه یا موقعیت فعلی شما دیده می‌شود) در فیلد SSH tunnel host بنویسید.
  • پورت SSH را آن‌طور که از بیرون شبکه دیده می‌شود، در فیلد SSH tunnel port وارد کنید. این مقدار معمولاً ۲۲ است، بدون توجه به نوع انبار داده‌ای که به آن متصل می‌شوید.

برای احراز هویت دو گزینه دارید:

  • استفاده از نام کاربری و رمز عبور:

    • در فیلدهای SSH tunnel username و SSH tunnel password نام کاربری و رمزی را که برای ورود به Bastion Host استفاده می‌کنید وارد کنید.
  • استفاده از کلید SSH (احراز هویت PKI):

    • گزینهٔ SSH Key را برای فیلد SSH authentication انتخاب کنید.
    • محتوای کلید خصوصی SSH خود را در فیلد SSH private key قرار دهید.
    • اگر برای کلید شما Passphrase تعریف شده، آن را در فیلد Passphrase for the SSH private key وارد کنید.

اگر نمی‌توانید متصل شوید، ابتدا اعتبار (Credentials) خود را با اتصال مستقیم به سرور SSH / Bastion Host تست کنید:

ssh <SSH tunnel username>@<SSH tunnel host> -p <SSH tunnel port>

اتصال به پایگاه‌داده‌ای که فقط به‌صورت محلی در دسترس است

سناریوی متداول دیگر، پایگاه‌داده‌ای است که فقط به‌صورت Local در دسترس است و اتصال Remote را مجاز نمی‌داند. در این حالت، شما یک اتصال SSH به همان سرور حاوی پایگاه‌داده برقرار می‌کنید و از همان‌جا دوباره به همان ماشین وصل می‌شوید.

  • در تنظیمات اتصال پایگاه‌داده به گزینهٔ «Use an SSH-tunnel for database connections» پاسخ Yes بدهید.
  • در فیلد Host مقدار localhost را بنویسید (نام خود سرور).
  • در فیلد Port همان پورتی را وارد کنید که اگر مستقیماً روی همان ماشین انبار داده می‌نشستید، از آن استفاده می‌کردید.
  • نام بیرونی سرور پایگاه‌داده (همان‌طور که از بیرون شبکه دیده می‌شود) را در فیلد SSH tunnel host وارد کنید.
  • پورت SSH را همان‌طور که از بیرون شبکه دیده می‌شود، در فیلد SSH tunnel port بنویسید (معمولاً ۲۲).
  • روش احراز هویت (نام کاربری/رمز یا کلید SSH) را مطابق توضیحات بالا انتخاب کنید.

اگر با مشکل اتصال مواجه شدید، پورت SSH و رمز را با اتصال دستی از طریق ssh یا روی ویندوزهای قدیمی‌تر با PuTTY بررسی کنید.

توجه: روی سرور SSH باید تنظیم AllowTcpForwarding روی مقدار yes قرار داشته باشد تا تونل‌زدن کار کند.

توجه دیگر: بهترین رویه برای SSH Tunnel Hostها این است که همهٔ ترافیک را به‌جز از کلاینت‌های مجاز مسدود کنید. متابیس فهرست IPهای Metabase Cloud را که باید در لیست مجاز قرار گیرند در این صفحه منتشر کرده است.

معایب اتصال غیرمستقیم

هرچند تونل SSH اتصال به انبار داده‌هایی را که در حالت عادی قابل‌دسترسی نیستند ممکن می‌کند، در صورت امکان، همیشه اتصال مستقیم ترجیح داده می‌شود.

اتصال از طریق تونل محدودیت‌های ذاتی زیر را دارد:

  • اگر اتصال SSH اصلی به‌دلیل Sleep شدن سیستم یا تغییر شبکه قطع شود، تمام اتصال‌های برقرارشده روی آن تونل نیز قطع می‌شوند؛ این مسئله می‌تواند پس از Resume شدن لپ‌تاپ باعث تأخیر در ادامهٔ کار شود.
  • تقریباً همیشه کندتر است؛ چون ترافیک باید از یک سرور واسط عبور کند.
  • بازکردن اتصال‌های SSH جدید طولانی‌تر می‌شود.
  • چند عملیات هم‌زمان روی یک تونل SSH می‌توانند همدیگر را Block کنند و Latency را افزایش دهند.
  • تعداد اتصال‌هایی که می‌توان از طریق یک Bastion Host برقرار کرد، غالباً توسط سیاست‌های سازمان محدود می‌شود.
  • برخی سازمان‌ها طبق سیاست‌های امنیتی، استفاده از تونل SSH برای دورزدن مرزهای امنیتی را ممنوع می‌کنند.

اجرای مستقیم SSH

قابلیت تونل SSH در متابیس در واقع یک Wrapper راحت روی SSH است که حالت‌های متداول اتصال از طریق تونل را خودکار می‌کند و امکان اتصال به سیستم‌هایی را می‌دهد که دسترسی Shell ارائه نمی‌دهند. متابیس از یک کلاینت SSH داخلی استفاده می‌کند که به کلاینت SSH نصب‌شده روی سیستم وابسته نیست؛ این موضوع اجازه می‌دهد از سیستم‌هایی که امکان اجرای مستقیم SSH روی آن‌ها ندارید هم به پایگاه‌داده وصل شوید، اما در عوض متابیس نمی‌تواند از سرویس‌های احراز هویت سطح سیستم مانند Windows Domain Authentication یا Kerberos استفاده کند.

اگر نیاز به اتصال با روشی دارید که مستقیماً در UI متابیس پشتیبانی نشده، معمولاً می‌توانید با اجرای مستقیم SSH به آن برسید:

ssh -Nf -L input-port:internal-server-name:port-on-server username@bastion-host.domain.com

با این روش می‌توانید از تمام امکانات SSH استفاده کنید. اگر خودتان را در وضعیتی می‌بینید که مرتباً باید این کار را انجام دهید، خوشحال می‌شویم به ما اطلاع دهید تا بتوانیم این سناریو را در خود متابیس ساده‌تر کنیم.

مطالعهٔ بیشتر