Удалённое подключение к MySQL на VPS может понадобиться, если вы хотите управлять базой с другого сервера, запускать внешние приложения или подключать панель администратора на локальном устройстве. Но при открытии доступа важно не только обеспечить работоспособность, но и защитить базу от взлома. Ниже — пошаговая инструкция, как сделать это правильно.
Введение
MySQL — одна из самых популярных систем управления базами данных, которая используется в сайтах, приложениях, CRM и других проектах. Чаще всего MySQL-сервер работает локально на том же сервере, что и сайт. Но бывают ситуации, когда к базе данных нужно подключиться удалённо — например, с другого сервера, из клиентского приложения, с ноутбука разработчика или через аналитический инструмент. В таких случаях требуется открыть удалённый доступ к MySQL.
Однако просто открыть порт и разрешить соединения — недостаточно. Это создаёт потенциальную брешь в безопасности: база данных может стать доступной для сканеров, ботов и злоумышленников. А если не ограничить доступ по IP и не задать строгие права, можно потерять данные или даже весь проект.
В этой статье мы пошагово разберём, как правильно настроить удалённый доступ к MySQL на VPS — с учётом всех требований безопасности. Вы узнаете, какие изменения нужно внести в конфигурацию, как создать пользователя только для удалённых подключений, как настроить фаервол и подключаться к базе через SSH-туннель. Всё это пригодится как новичкам, так и опытным администраторам, которым важно сохранить контроль над своим сервером.
Шаг 1. Разрешаем удалённые подключения в конфигурации MySQL
Откройте основной конфигурационный файл MySQL. Чаще всего это:
/etc/mysql/my.cnf
или
/etc/mysql/mysql.conf.d/mysqld.cnf
Найдите строку
bind-address = 127.0.0.1
Чтобы сервер начал принимать подключения извне, эту строку нужно либо закомментировать, либо заменить на:
bind-address = 0.0.0.0
Так MySQL начнёт слушать все сетевые интерфейсы.
После изменения конфигурации перезапустите службу MySQL с помощью команды:
sudo systemctl restart mysql
Шаг 2. Открываем порт 3306 только для нужных IP
Открытый порт MySQL без фильтрации — серьёзная уязвимость. Разрешать подключение следует строго с конкретных адресов.
Если используется UFW, выполните команду:
sudo ufw allow from IP_КЛИЕНТА to any port 3306
Для iptables добавьте правило:
iptables -A INPUT -p tcp -s IP_КЛИЕНТА --dport 3306 -j ACCEPT
и сразу после этого:
iptables -A INPUT -p tcp --dport 3306 -j DROP
Так вы разрешите подключение только с нужного IP, а всем остальным заблокируете доступ к порту.
Шаг 3. Создаём ограниченного пользователя в MySQL
Войдите в MySQL под root-пользователем и создайте нового пользователя с доступом к конкретной базе и только с определённого IP.
Пример:
CREATE USER 'clientuser'@'IP_КЛИЕНТА' IDENTIFIED BY 'надежный_пароль';
GRANT SELECT, INSERT, UPDATE, DELETE ON database_name. TO 'clientuser'@'IP_КЛИЕНТА';*
FLUSH PRIVILEGES;
Не давайте пользователю прав на все базы и никогда не используйте root-пользователя для удалённого подключения.
Шаг 4. Проверяем подключение к базе
С удалённого компьютера попробуйте подключиться к серверу командой:
mysql -u clientuser -p -h IP_СЕРВЕРА -P 3306
Если всё настроено правильно, вы попадёте в клиент MySQL и сможете управлять базой.
Шаг 5. Повышаем безопасность соединения
Чтобы минимизировать риски, придерживайтесь следующих рекомендаций:
- создавайте пользователей только под конкретные IP-адреса;
- задавайте сложные пароли;
- ограничивайте привилегии пользователей;
- не открывайте порт 3306 без фильтрации;
- используйте VPN или SSH-туннель, если нет нужды держать порт открытым в Интернет;
- включите шифрование SSL в MySQL, если клиент его поддерживает.
Шаг 6. Альтернатива: подключение через SSH-туннель
Если вы не хотите открывать порт 3306 в Интернет, можно использовать SSH-туннель. На локальной машине выполните:
ssh -L 3307:127.0.0.1:3306 user@IP_СЕРВЕРА
После этого можно подключаться к MySQL по адресу localhost, порт 3307, и соединение будет зашифровано.
Заключение
Удалённый доступ к MySQL требует аккуратной настройки. Самый распространённый путь к проблемам — это полный доступ ко всем базам с любого IP. Вместо этого лучше идти от обратного: разрешать только нужное, ограничивать права, использовать защиту на уровне сети. Если вы работаете на VPS от AdminVPS, все изменения можно внести вручную или через панель управления, а при необходимости быстро восстановить систему из бекапа.
Читайте в блоге:
- Хостинг сайта на Ubuntu 24.04 LTS: NGINX, SSL и WordPress
- Как установить Nginx, PHP и MySQL/MariaDB (LEMP-стек) в Ubuntu 22.04
- Ошибка в ядре Linux едва не обрушила производительность Nginx и PostgreSQL