- چطور میتوان دسترسی از راه دور به MySQL/MariaDB را بهطور امن فعال کرد؟
- مراحل کلی و اصول امنیتی
- چرا نباید MySQL را مستقیم روی اینترنت باز کرد؟
- گامبهگام: پیکربندی MySQL برای دسترسی راه دور (دستورات عملی)
- محافظت بیشتر — راهکارهای پیشرفته و توصیهشده (۲۰۲۵)
- نکات عملی برای انتخاب لوکیشن دیتاسنتر و پیکربندی بر اساس کاربرد
- مثالهای پیکربندی my.cnf پیشنهادی برای کاربردهای مختلف
- چکلیست نهایی امنیتی قبل از فعالسازی دسترسی راه دور
- نتیجهگیری و توصیه نهایی
- Часто задаваемые вопросы
چطور میتوان دسترسی از راه دور به MySQL/MariaDB را بهطور امن فعال کرد؟
در این راهنمای بهروز (۲۰۲۵) روشهای عملی و امن برای فعالسازی دسترسی از راه دور به سرور MySQL و MariaDB را بررسی میکنیم. هدف ارائهٔ یک چکلیست عملی برای مدیران سایت، DevOps، تیمهای دیتابیس و توسعهدهندگان است تا اجازهٔ دسترسی فقط به کاربران و اپلیکیشنهای مجاز داده شود، بدون اینکه امنیت بهخطر بیفتد.
مراحل کلی و اصول امنیتی
خلاصهٔ قدمها:
- طراحی معماری: Никогда دیتابیس را مستقیماً روی اینترنت عمومی قرار ندهید مگر ضرورت باشد.
- استفاده از شبکهٔ خصوصی (VPC/VLAN)، VPN یا SSH tunneling.
- محدود کردن دسترسی بر اساس آدرسهای IP و ایجاد کاربرهای با حداقل امتیاز.
- رمزنگاری TLS/SSL برای ترافیک دیتابیس و استفاده از احراز هویت قوی (*caching_sha2_password* / *X.509*).
- فعالسازی لاگینگ و ریت لیمیت، استفاده از فایروال و سیستمهای تشخیص نفوذ (IDS/IPS).
- بررسی عملکرد و تأخیر (latency) و انتخاب لوکیشن دیتاسنتر مناسب بر اساس کاربرد.
چرا نباید MySQL را مستقیم روی اینترنت باز کرد؟
دیتابیسها هدف جذابی برای نفوذگران هستند؛ شامل دادههای حساس و اعتبارنامهها. باز کردن پورت 3306 روی اینترنت بدون محدودسازی و رمزنگاری، ریسکهای نشت داده، brute-force و حملات DDoS را افزایش میدهد.
گامبهگام: پیکربندی MySQL برای دسترسی راه دور (دستورات عملی)
۱) ویرایش فایل تنظیمات
فایلهای پیکربندی معمول:
- MySQL (Debian/Ubuntu):
/etc/mysql/mysql.conf.d/mysqld.cnf - MariaDB:
/etc/mysql/mariadb.conf.d/50-server.cnf
بهصورت پیشفرض ممکن است خط адрес привязки К 127.0.0.1 تنظیم شده باشد. برای پذیرش اتصال از یک IP خاص یا همهٔ آدرسها:
توصیهشده: اجازه به IP مشخص:
bind-address = 192.0.2.10غیرتوصیهشده مگر در شبکهٔ خصوصی:
bind-address = 0.0.0.0پس از تغییر:
systemctl restart mysql
۲) ساخت کاربر امن با محدودیتها
هرگز از کاربر корень برای اتصال راه دور استفاده نکنید. نمونهٔ دستورات:
mysql -u root -p
CREATE USER 'appuser'@'203.0.113.45' IDENTIFIED WITH caching_sha2_password BY 'StrongP@ssw0rd!';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'203.0.113.45';
FLUSH PRIVILEGES;Важные моменты:
- استفاده از آدرس IP مشخص (‘203.0.113.45’) بجای ‘%’ بسیار امنتر است.
- تعیین حداقل مجوزها (least privilege).
- برای اتصالهای از داخل شبکهٔ خصوصی از آدرسهای خصوصی استفاده کنید (مثلاً 10.x.x.x).
۳) فعالسازی SSL/TLS برای MySQL
نمونهٔ سریع ساخت CA و گواهیها با OpenSSL:
openssl genrsa 4096 -out ca-key.pem
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem -subj "/CN=MyDB-CA"
openssl genrsa 4096 -out server-key.pem
openssl req -new -key server-key.pem -out server-req.csr -subj "/CN=db.example.com"
openssl x509 -req -in server-req.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -days 3650
openssl genrsa 4096 -out client-key.pem
openssl req -new -key client-key.pem -out client-req.csr -subj "/CN=dbclient"
openssl x509 -req -in client-req.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -days 3650قرار دادن گواهیها در my.cnf:
[mysqld]
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pemپس از restart، امکان الزام کاربران به استفاده از گواهیها:
ALTER USER 'appuser'@'203.0.113.45' REQUIRE X509;
-- یا فقط TLS بدون client cert:
ALTER USER 'appuser'@'203.0.113.45' REQUIRE SSL;اتصال امن از کلاینت:
mysql -u appuser -p -h db.example.com --ssl-mode=REQUIRED --ssl-ca=ca.pem
۴) استفاده از SSH Tunnel
مناسب برای ادمینها و دسترسی محدود زمانی که TLS در دسترس نیست. روی ماشین کلاینت:
ssh -fN -L 3306:127.0.0.1:3306 [email protected]با این روش شما به پورت 3306 محلی متصل میشوید که به سرور دوردست تونل شده است.
۵) تنظیم فایروال
مثال با ufw (اجازه فقط به IP مشخص):
ufw allow from 203.0.113.45 to any port 3306 proto tcpبا firewalld:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.45" port protocol="tcp" port="3306" accept'
firewall-cmd --reloadبررسی پورت:
ss -tlnp | grep 3306
telnet db.example.com 3306
محافظت بیشتر — راهکارهای پیشرفته و توصیهشده (۲۰۲۵)
استفاده از شبکهٔ خصوصی، VPC و VPN
بهجای باز کردن پورت دیتابیس روی اینترنت، از Private Network بین اپلیکیشن و دیتابیس استفاده کنید. اگر از سرویس ما استفاده میکنید، میتوانید از شبکهٔ خصوصی و BGP/VRF برای اتصال ایمن بهره ببرید.
برای کاربران توزیعشده، VPN یا IPsec پیشنهاد میشود تا ترافیک دیتابیس فقط در کانالهای رمزنگاریشده حرکت کند.
Bastion Host و Zero Trust
قرار دادن Bastion Host با احراز هویت دو مرحلهای (MFA) و لاگ کامل جلسات رویکرد امنتری نسبت به باز کردن مستقیم پورتهاست. الگوی Zero Trust بدین معنی است که هر اتصال باید احراز هویت شده و تنها به منابع مشخص اجازه داده شود.
احراز هویت و الگوریتمها
- MySQL 8: Использование
caching_sha2_passwordبجایmysql_native_passwordامنتر است. - در موارد حساس، استفاده از X.509 client certificates Рекомендовано.
- مدیریت پسوردها با Secret Manager یا Vault (مثل HashiCorp Vault, AWS Secrets Manager) بهتر از قرار دادن پسورد در فایلها یا کد است.
محافظت در برابر حملات و محدودیتها
- max_connect_errors را پایین نگه دارید و
skip-name-resolveرا فعال کنید تا از DNS-based delays جلوگیری شود. - استفاده از fail2ban با filter مخصوص mysql-auth برای بلاک کردن IPهای مخرب.
- Rate limit کلی اتصالها و تنظیم connection_timeout مناسب.
مانیتورینگ و لاگینگ
فعالسازی audit log، general log و slow query log و استفاده از ابزارهایی مثل Prometheus + Grafana یا Percona Monitoring برای شناسایی الگوهای مخرب و مسائل عملکردی ضروری است.
نکات عملی برای انتخاب لوکیشن دیتاسنتر و پیکربندی بر اساس کاربرد
هدایت بر اساس نوع کاربرد:
- Торговля (Форекс/Криптовалюты): کمترین RTT به صرافی/سرور معاملهگر اهمیت دارد؛ انتخاب لوکیشن نزدیک به صرافی توصیه میشود. سرویس ما با ۸۵+ لوکیشن این امکان را فراهم میکند.
- گیمینگ: دیتابیسهای بازی نیاز به پینگ پایین دارند؛ مسیر BGP بهینه و شبکهٔ کمتاخیر اهمیت دارد. سرورهای VPS مخصوص گیم و سرور ضد DDoS مفید هستند.
- Искусственный интеллект/Рендеринг: برای بارهای I/O و محاسباتی بالا، ترکیب سرورهای GPU و دیتابیس در همان منطقهٔ شبکهٔ خصوصی باعث کاهش تأخیر میشود.
- وبسایتها و اپلیکیشنها: استفاده از CDN و کش لایهٔ اپلیکیشن (Redis/Memcached) همراه با دیتابیس در Private Network بهترین تعادل سرعت و هزینه را فراهم میآورد.
مثالهای پیکربندی my.cnf پیشنهادی برای کاربردهای مختلف
پیکربندی برای سرور با بار متوسط (وب/اپلیکیشن):
[mysqld]
bind-address = 10.0.1.5
max_connections = 200
innodb_buffer_pool_size = 2G
skip-name-resolve = 1
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pemبرای سرورهای با بار بالا و مخصوص AI/rending:
innodb_buffer_pool_size = 16G
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000همیشه تنظیمات را بر اساس RAM، I/O و نیاز اپلیکیشن تنظیم کنید.
چکلیست نهایی امنیتی قبل از فعالسازی دسترسی راه دور
- استفاده از شبکهٔ خصوصی یا VPN برای ترافیک دیتابیس
- محدود کردن آدرسهای IP مجاز در فایروال
- ایجاد کاربران با حداقل امتیاز و استفاده از hashing الگوریتم امن
- فعالسازی TLS/SSL و در صورت نیاز client certificates
- عدم استفاده از root برای اتصال از راه دور
- فعالسازی logging؛ ارسال لاگها به سیستم External
- تنظیم محدودیتهای اتصال و استفاده از fail2ban
- مانیتورینگ و هشدار در صورت افزایش غیرمعمول ترافیک یا خطاها
- پشتیبانگیری (backup) منظم و تست بازیابی
نتیجهگیری و توصیه نهایی
فعالسازی دسترسی راه دور به MySQL در ۲۰۲۵ باید همزمان سریع و امن باشد. بهترین رویکرد: ابتدا شبکهٔ خصوصی یا VPN را در نظر بگیرید، سپس TLS و محدودسازی IP را اضافه کنید و دسترسیها را به حداقل نیاز محدود کنید.
استفاده از Bastion Host، MFA و لاگینگ پیشرفته امنیت شما را افزایش میدهد. اگر به سروری با پایداری بالا، شبکهٔ کمتاخیر و امکانات امنیتی نیاز دارید، سرویسهای ما شامل ۸۵+ لوکیشن جهانی، سرور GPU، سرور محاسباتی، سرور ضد DDoS، VPS مخصوص ترید و گیم، CDN و شبکهٔ BGP گزینههای آماده و قابل تنظیم ارائه میدهند.









