- Как обеспечить безопасный удалённый доступ к MySQL/MariaDB?
- Общие шаги и принципы безопасности
- Почему MySQL не должен быть напрямую доступен из интернета?
- Пошаговая настройка MySQL для удаленного доступа (практические инструкции)
- Дополнительная защита — передовые и рекомендуемые решения (2025)
- Практические советы по выбору местоположения и конфигурации центра обработки данных в зависимости от области применения.
- Примеры конфигурации my.cnf для различных целей.
- Окончательный контрольный список мер безопасности перед включением удаленного доступа.
- Заключение и окончательные рекомендации
- Часто задаваемые вопросы
Как обеспечить безопасный удалённый доступ к MySQL/MariaDB?
В этом обновленном (2025 г.) руководстве мы рассматриваем практические и безопасные способы обеспечения удаленного доступа к серверам MySQL и MariaDB. Цель — предоставить практический контрольный список для администраторов сайтов, специалистов DevOps, команд разработчиков баз данных и разработчиков, позволяющий предоставлять доступ только авторизованным пользователям и приложениям без ущерба для безопасности.
Общие шаги и принципы безопасности
Краткое описание шагов:
- Архитектурный дизайн: Никогда Не размещайте базу данных непосредственно в общедоступном интернете, если в этом нет необходимости.
- Используйте частную сеть (VPC/VLAN), VPN или SSH-туннелирование.
- Ограничьте доступ на основе IP-адресов и создавайте пользователей с определенными правами. Минимальный балл.
- Шифрование TLS/SSL для трафика базы данных и использование надежной аутентификации (*caching_sha2_password* / *X.509*).
- Включите ведение журналов и ограничение скорости запросов, используйте межсетевые экраны и системы обнаружения вторжений (IDS/IPS).
- Проанализируйте производительность и задержку и выберите подходящее местоположение центра обработки данных в зависимости от приложения.
Почему MySQL не должен быть напрямую доступен из интернета?
Базы данных являются привлекательной целью для хакеров, поскольку содержат конфиденциальные данные и учетные данные. Открытие порта 3306 для доступа в интернет без ограничений или шифрования увеличивает риски утечки данных, атак методом перебора паролей и DDoS-атак.
Пошаговая настройка MySQL для удаленного доступа (практические инструкции)
1) Отредактируйте конфигурационный файл.
Общие конфигурационные файлы:
- 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
2) Создание защищенного пользователя с ограничениями.
Никогда от пользователя корень Не использовать для удалённых подключений. Примеры команд:
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') вместо '%'.
- Определение Минимальные права доступа (наименьшие привилегии).
- Для подключений из частной сети используйте частные адреса (например, 10.xxx).
3) Включение SSL/TLS для MySQL
Краткий пример создания центра сертификации и сертификатов с помощью 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После перезапуска появляется возможность требовать от пользователей использования сертификатов:
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
4) Использование SSH-туннеля
Подходит для администраторов и пользователей с ограниченным доступом в случаях, когда TLS недоступен. На клиентском компьютере:
ssh -fN -L 3306:127.0.0.1:3306 [email protected]Этот метод подключает вас к локальному порту 3306, который туннелируется к удаленному серверу.
5) Настройки брандмауэра
Пример использования 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
Дополнительная защита — передовые и рекомендуемые решения (2025)
Использование частной сети, VPC и VPN.
Вместо открытия порта базы данных для доступа из интернета используйте частную сеть между приложением и базой данных. При использовании нашего сервиса вы можете использовать частную сеть и BGP/VRF для безопасного соединения.
Для распределенных пользователей рекомендуется использовать VPN или IPsec, чтобы трафик к базе данных передавался только по зашифрованным каналам.
Bastion Host и Zero Trust
Развертывание бастионного хоста с двухфакторной аутентификацией (MFA) и полным логированием сессий — более безопасный подход, чем прямое открытие портов. Модель нулевого доверия означает, что каждое соединение должно быть аутентифицировано, и разрешен доступ только к определенным ресурсам.
Аутентификация и алгоритмы
- MySQL 8: Использование
caching_sha2_passwordВместоmysql_native_passwordЭто безопаснее. - В деликатных случаях использовать Сертификаты клиентов X.509 Рекомендовано.
- Управление паролями с помощью менеджера секретов или хранилища (например, HashiCorp Vault, AWS Secrets Manager) лучше, чем хранение паролей в файлах или коде.
Защита от нападений и ограничений
- Держите значение max_connect_errors на низком уровне.
пропуск разрешения имениВключите эту опцию, чтобы избежать задержек, связанных с DNS. - Использование fail2ban со специальным фильтром mysql-auth для блокировки вредоносных IP-адресов.
- Общий лимит скорости соединений и соответствующая настройка connection_timeout.
Мониторинг и ведение журналов
Включение журналов аудита, общих журналов и журналов медленных запросов, а также использование таких инструментов, как Prometheus + Grafana или Percona Monitoring, имеет важное значение для выявления вредоносных шаблонов и проблем с производительностью.
Практические советы по выбору местоположения и конфигурации центра обработки данных в зависимости от области применения.
Рекомендации в зависимости от типа приложения:
- Торговля (Форекс/Криптовалюты): Минимальное время отклика (RTT) до сервера биржи/трейдера имеет важное значение; рекомендуется выбирать местоположение, близкое к бирже. Наш сервис предоставляет такую возможность благодаря более чем 85 точкам продаж.
- Игры: Для игровых баз данных требуется низкий пинг; оптимизированная маршрутизация BGP и сеть с низкой задержкой имеют важное значение. Полезными являются игровые VPS-серверы и серверы защиты от DDoS-атак.
- Искусственный интеллект/Рендеринг: При высоких нагрузках на ввод-вывод и вычисления объединение серверов GPU и баз данных в одной частной сетевой зоне позволяет снизить задержку.
- Веб-сайты и приложения: Использование CDN и кэша на уровне приложений (Redis/Memcached) вместе с базой данных в частной сети обеспечивает наилучший баланс скорости и стоимости.
Примеры конфигурации 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Для высоконагруженных выделенных серверов для ИИ/рендеринга:
innodb_buffer_pool_size = 16G
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000Всегда регулируйте параметры в зависимости от потребностей оперативной памяти, ввода-вывода и приложений.
Окончательный контрольный список мер безопасности перед включением удаленного доступа.
- Использование частной сети или VPN для передачи данных в базу данных.
- Ограничение разрешенных IP-адресов в межсетевом экране.
- Создавайте пользователей с минимальными привилегиями и используйте безопасные алгоритмы хеширования.
- Включите TLS/SSL и, при необходимости, клиентские сертификаты.
- Для удалённых подключений не используется root-права.
- Включить ведение журналов; отправлять журналы во внешнюю систему.
- Установка лимитов на количество подключений и использование fail2ban
- Мониторинг и оповещение в случае необычного увеличения трафика или ошибок.
- Регулярное резервное копирование и тестирование восстановления.
Заключение и окончательные рекомендации
В 2025 году удаленный доступ к MySQL должен быть быстрым и безопасным. Оптимальный подход: сначала рассмотрите возможность использования частной сети или VPN, затем добавьте TLS и ограничения по IP-адресу, а также ограничьте доступ до минимума.
Использование Bastion Host, многофакторной аутентификации и расширенного логирования повысит вашу безопасность. Если вам нужен высокостабильный сервер, сеть с низкой задержкой и функциями безопасности, наши услуги включают более 85 локаций по всему миру, серверы с графическими процессорами, вычислительные серверы, серверы с защитой от DDoS-атак, VPS для торговли и игр, CDN и сети BGP, предлагая как готовые, так и настраиваемые варианты.









