بازگشت به مجله
پایگاه دادهتیم فنی هایوهاست۱۰ دقیقه مطالعه

فعال کردن دسترسی از راه دور به MySQL

پیش از باز کردن پورت ۳۳۰۶ روی اینترنت، گزینه امن تری وجود دارد؛ و اگر واقعا لازم است، این کار را درست انجام دهید.

دسترسی از راه دور

پایگاه داده ای که مستقیم روی اینترنت باز باشد، یکی از رایج ترین دلایل نشت اطلاعات است. اسکنرهای خودکار مدام کل اینترنت را برای پورت ۳۳۰۶ جستجو میکنند و یک رمز ضعیف کافی است تا کل داده های شما بیرون برود. با این حال گاهی واقعا به اتصال از راه دور نیاز دارید. در این راهنما اول گزینه امن تر را میبینیم و بعد، اگر چاره ای نبود، روش درست باز کردن دسترسی را مرور میکنیم.

1

قبل از باز کردن پورت این گزینه را ببینید

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

با اجرای دستور زیر، پورت ۳۳۰۶ روی سیستم خودتان به پورت پایگاه داده روی سرور وصل میشود. بعد کافی است ابزار مدیریت را به 127.0.0.1 وصل کنید. رمزنگاری هم به صورت خودکار توسط SSH انجام میشود.

ساخت تونل از سیستم خودتان
ssh -L 3306:127.0.0.1:3306 user@your-server-ip
مقایسه باز کردن پورت ۳۳۰۶ روی اینترنت با استفاده از تونل SSH
چپ: پورت باز روی اینترنت. راست: همان دسترسی بدون هیچ پورت باز.
2

تغییر رابط شبکه ای که سرویس روی آن گوش میدهد

اگر تصمیم گرفتید دسترسی مستقیم را فعال کنید، اولین قدم تغییر مقدار bind-address است. مسیر فایل پیکربندی بسته به اینکه MySQL دارید یا مریادی بی متفاوت است.

به جای گوش دادن روی همه رابط ها، اگر سرور شما شبکه خصوصی دارد بهتر است فقط روی آدرس خصوصی گوش بدهد. این کار سطح در معرض دید را به شدت کم میکند.

مسیر فایل پیکربندی
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
گزینه امن تر: فقط روی آدرس شبکه خصوصی
bind-address = 10.0.0.5
اگر واقعا باید روی همه رابط ها باشد
bind-address = 0.0.0.0
3

ساخت کاربر مخصوص همان میزبان

در MySQL هر کاربر با ترکیب نام و میزبان تعریف میشود. یعنی میتوانید مشخص کنید که این کاربر فقط از یک آدرس مشخص اجازه اتصال دارد. این یکی از موثرترین کارهایی است که میتوانید انجام دهید.

از ساختن کاربر با میزبان درصد که به معنی هر آدرسی است تا حد امکان پرهیز کنید. اگر آدرس ثابت ندارید، حداقل دسترسی را به یک پایگاه داده مشخص محدود کنید و هرگز دسترسی کامل روی همه چیز ندهید.

کاربر محدود به یک آدرس مشخص
CREATE USER 'appuser'@'203.0.113.10' IDENTIFIED BY 'a-long-strong-password';
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'203.0.113.10';
FLUSH PRIVILEGES;
بررسی کاربران و میزبان های مجاز
SELECT user, host FROM mysql.user;
4

محدود کردن در فایروال

تنظیمات پایگاه داده به تنهایی کافی نیست. در سطح فایروال هم پورت را فقط برای آدرس هایی که واقعا نیاز دارند باز کنید. اگر این قانون را بدون محدودیت آدرس بنویسید، عملا کل کاری که در مرحله قبل انجام دادید را خنثی کرده اید.

باز کردن پورت فقط برای یک آدرس
sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp
sudo ufw status numbered
5

اجبار به اتصال رمزنگاری شده

وقتی داده ها از اینترنت عبور میکنند، رمزنگاری اتصال دیگر اختیاری نیست. با اضافه کردن شرط استفاده از TLS، اتصال های بدون رمزنگاری رد میشوند.

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

بررسی وضعیت TLS
SHOW VARIABLES LIKE '%ssl%';
اجباری کردن رمزنگاری برای یک کاربر
ALTER USER 'appuser'@'203.0.113.10' REQUIRE SSL;
FLUSH PRIVILEGES;
6

اعمال، تست و عیب یابی

بعد از تغییر پیکربندی، سرویس را ری استارت کنید و بررسی کنید که روی آدرس مورد نظر گوش میدهد. سپس از سیستم مقصد اتصال را تست کنید.

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

اعمال و بررسی
sudo systemctl restart mysql
sudo ss -tlnp | grep 3306
تست از سیستم مقصد
mysql -u appuser -h your-server-ip -p
  • اگر خطای دسترسی گرفتید، ترکیب نام کاربر و میزبان را بررسی کنید.
  • اگر اتصال اصلا برقرار نشد، مشکل از فایروال یا bind-address است.
  • پورت ۳۳۰۶۰ مربوط به پروتکل ایکس است؛ اگر از آن استفاده نمیکنید بازش نکنید.
  • بعد از پایان کار، دسترسی هایی که دیگر لازم نیستند را باطل کنید.

پرسش های پرتکرار

آیا باز کردن پورت ۳۳۰۶ روی اینترنت خطرناک است؟

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

چطور دسترسی را فقط به یک آدرس مشخص محدود کنم؟

کاربر را با میزبان مشخص بسازید و در فایروال هم پورت را فقط برای همان آدرس باز کنید. هر دو مرحله لازم است.

چرا با وجود ساختن کاربر، اتصال از راه دور برقرار نمیشود؟

معمولا مقدار bind-address هنوز روی لوکال هاست است یا فایروال اجازه عبور نمیدهد. پیام خطا مشخص میکند کدام مورد است.

به راهنمای بیشتری نیاز دارید؟

تیم پشتیبانی هایوهاست برای انتخاب و مدیریت سرویس کنار شماست.

گفتگو با پشتیبانی

ادامه یادگیری

مشاهده همه