Практический разбор · MySQL
MySQL: требуйте шифрование удалённых подключений
Для MySQL проверьте, требует ли сервер защищённый транспорт, и может ли клиент проверить сертификат. Глобальный `require_secure_transport` запрещает незащищённый TCP, а режим клиента `VERIFY_IDENTITY` дополнительно предназначен для проверки цепочки и имени сервера.
Кому нужно проверить
Администраторам MySQL, разработчикам приложений и специалистам, отвечающим за шифрование соединений между сервисами и базой данных. Важна не только марка продукта, но и конкретная версия, способ установки, операционная система и конфигурация.
В чём риск
Если клиентское соединение использует незашифрованный транспорт, данные и учётные сведения могут быть доступны наблюдателю сетевого пути. TLS без проверки сертификата не гарантирует, что клиент подключился к ожидаемому серверу. Серверная настройка обязательного защищённого транспорта может прервать старых клиентов, поэтому сначала проверьте их совместимость и план перехода.
Затронутые версии
Руководство ориентировано на MySQL 8.4 и самостоятельно размещённый сервер. Наличие и поведение опций зависят от версии сервера, клиента и TLS-библиотеки. Управляемый MySQL может задавать TLS-политику через настройки поставщика. Перед применением проверьте поддерживаемые опции на сервере и у используемых драйверов.
Исправленные версии
Универсальной исправленной версии нет. Если политика требует защищённый транспорт, в MySQL 8.4 можно включить `require_secure_transport`; клиентские подключения должны поддерживать TLS. Для проверки сертификата используйте подходящий клиентский режим `VERIFY_CA` или `VERIFY_IDENTITY` и доверенную цепочку сертификатов. Простого факта успешного TLS-соединения недостаточно, чтобы подтвердить корректную проверку имени сервера.
Что сделать
- 1Составьте список приложений, драйверов, административных клиентов и сетевых путей к MySQL. Проверьте текущую TLS-конфигурацию и версии клиентов; сохраните копию конфигурации и заранее подготовьте доверенные сертификаты.
- 2Настройте на сервере сертификат и ключ по официальной документации своей версии. Защитите закрытый ключ правами файловой системы и не помещайте его в репозиторий, образ контейнера общего доступа или журнал.
- 3Настройте клиенты на TLS и проверку сертификата. По возможности используйте `VERIFY_IDENTITY`, когда клиентская библиотека поддерживает этот режим и имя подключения соответствует сертификату; не отключайте проверку имени как постоянный обход ошибки сертификата.
- 4Проверьте, что все используемые приложения и административные клиенты подключаются с проверяемым TLS. Не включайте обязательный режим на production-сервере, пока не проверены все легитимные клиенты и путь отката.
- 5После проверки задайте `require_secure_transport=ON` в соответствии с процедурой управления конфигурацией вашей среды. В MySQL 8.4 документация также описывает `SET PERSIST`; перед использованием убедитесь, что команда разрешена политикой, а права и способ отката понятны.
- 6Проверьте защищённое соединение приложений и отказ тестового незашифрованного TCP-клиента в изолированной среде. Убедитесь, что локальные сокеты продолжают работать согласно политике и проверьте журналы после изменения.
Проверка TLS для MySQL
TLS требует проверки обеих сторон: серверной политики и поведения клиентского драйвера.
- 1Подготовьте сертификат сервера и доверенную цепочку
- 2Переведите клиенты на TLS с проверкой сертификата
- 3Убедитесь, что все приложения и драйверы совместимы
- 4Только после тестирования потребуйте secure transport на сервере
- 5Проверьте успешное защищённое и отказ незащищённого соединения
Примеры конфигурации и проверки
mysql --user=admin_user --password --execute="SHOW GLOBAL VARIABLES LIKE 'require_secure_transport';"Для клиента и сервера MySQL 8.4. Запускайте на своём сервере с доступом к нужному экземпляру; замените имя роли на разрешённую административную учётную запись. Пароль вводится по приглашению. Команда только читает настройку: ON означает требование защищённого транспорта, включая допустимые локальные сокеты, но не доказывает проверку сертификата каждым клиентом. Откат не требуется.
mysql --host=db.example.invalid --user=app_user --password --ssl-mode=VERIFY_IDENTITYИллюстрация для клиента MySQL 8.4; используйте только адрес собственной базы и настройте доверенный CA согласно документации клиента. Значение домена зарезервировано для примеров и не является реальным сервисом. Команда запросит пароль интерактивно, а не помещает его в аргументы. Подключайтесь только после того, как сертификат сервера соответствует имени; смена режима клиента не изменяет сервер.
Как не подпустить ботов к сайту
BotProtection принимает запросы перед вашим сайтом и фильтрует автоматизированные обращения. Поэтому ботам сложнее добраться до уязвимого компонента и начать его проверять или атаковать, а вероятность успешной автоматизированной атаки становится значительно ниже. Это дополнительный слой защиты: обновление уязвимых компонентов, проверка журналов и реагирование на инциденты остаются обязательными.
Первоисточники
Снизьте шанс атаки до того, как бот дойдёт до сайта
Подключите BotProtection как фильтр перед сайтом: подозрительные автоматизированные запросы отсекаются до обращения к вашему серверу. Это значительно снижает вероятность автоматизированной атаки, но не исправляет саму уязвимость, поэтому обновление и настройка компонентов остаются обязательными.