Lab / MySQL / DevOPS

Как настроить удалённый доступ к MySQL с удалённых серверов

В этой заметке я делюсь методом: как разрешить внешний доступ к вашему серверу MySQL. Урок достаточно простой, нужно будет сменить конфиг, перезапустить MySQL добавить исключение в фаервол в случае его использования. Поехали!

Настройка MySQL для прослушивания сетевого интерфейса

Прежде всего, нам нужно внести изменения в конфигурацию MySQL, чтобы он прослушивал сетевой интерфейс. Вот что вам нужно сделать:

Найдите файл конфигурации MySQL. Обычно он называется my.cnf или mysql.cnf обычно находится в директории /etc/mysql/ в системах типа Ubuntu / Debian.

Найдите директиву bind-address. Эта строка определяет IP-адрес, на котором MySQL будет прослушивать подключения.

Установите значение bind-address на IP-адрес вашего внешнего сервера или, если вы хотите разрешить доступ со всех IP-адресов, установите его на 0.0.0.0.

Сохраните изменения и перезагрузите сервер MySQL.

sudo systemctl restart mysql

Помните — открывать сервер для всех IP адресов это очень плохая идея. Этот метод подходит для учебного проекта, но небольшой баг в коде может раскрыть данные в базе и скомпрометировать её содержимое. Если думаете, что ваш проект слишком маленький и вас это не касается, то вы ошибаетесь. Недавно я запустил совершенно чистый сервер с новым ip и оставил публичный доступ к базе, даже надёжный пароль меня не спас, через час какой-то бот стёр всю БД и предлагал выкуп, за возвращение данных.

Изменение настроек фаервола

Этот шаг необходимо выполнить, только если вы настроили фаервол который закрыл все порты на вашем сервере для внешнего мира.

Чтобы гарантировать, что входящие подключения достигнут вашего сервера MySQL, нам нужно настроить фаервол. Выполните нужную комманду в зависимости от используемого вами:

Для пользователей ufw:

sudo ufw allow 3306

Для пользователей iptables:

sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

Для пользователей firewalld:

sudo firewall-cmd --add-port=3306/tcp --permanent

Вот и всё! Вы успешно настроили MySQL для внешнего доступа.

Не забывайте о безопасности, сейчас не так опасна попытка целенаправленного взлома, сколько автоматические сканеры уязвимостей которые 24/7 ищут уязвимости в миллионах сайтов в день.