Поиск по сайту:

Как включить SSL и удаленные подключения для MySQL в CentOS 7


На этой странице

  1. Шаг 1. Установите MySQL
  2. Шаг 2. Настройка корневого пароля MySQL
  3. Шаг 3. Создание новых файлов самозаверяющих сертификатов
  4. Шаг 4. Включите SSL для MySQL
  5. Шаг 5. Включите удаленные подключения
  6. Шаг 6. Тестирование
  7. Справочник

MySQL — это система реляционных баз данных с открытым исходным кодом, которая работает во многих операционных системах, включая Windows, Linux, MacOS и FreeBSD. Вероятно, это самая популярная СУБД с открытым исходным кодом и центральный компонент стеков LAMP и LEMP. Существует множество приложений, зависящих от MySQL, таких как Wordpress, Joomla, TYPO3, phpBB и многие другие.

В этом руководстве я пошагово покажу вам, как безопасно настроить MySQL для удаленных подключений. Когда вам нужно получить удаленный доступ к MySQL, необходимо либо использовать VPN, поскольку MySQL не шифрует передаваемые данные, либо вы можете настроить MySQL для использования SSL, как я покажу вам в этом руководстве. В этой конфигурации только пользователям с правильными файлами сертификатов SSL разрешено подключаться к серверу MySQL, а трафик шифруется. Мы установим последнюю версию MySQL, а затем настроим SSL для удаленного подключения. В качестве базовой системы я буду использовать сервер CentOS 7.

Что мы будем делать:

  1. Установите MySQL.
  2. Настройте корневой пароль MySQL.
  3. Создайте новые файлы самозаверяющих сертификатов SSL.
  4. Включите SSL для MySQL.
  5. Включить удаленное подключение.
  6. Тестирование.

Предпосылка

  • Сервер CentOS 7
  • Привилегии root

Шаг 1 — Установите MySQL

В этом руководстве мы будем использовать MySQL 5.7, последнюю версию на данный момент. Он установлен из репозитория MySQL, поэтому сначала нам нужно добавить в систему новый репозиторий CentOS.

Добавьте новый репозиторий для MySQL с помощью команды yum ниже.

yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

Вам будет предложено установить новый пакет, введите y и нажмите Enter для подтверждения.

Теперь вы можете установить последнюю версию MySQL 5.7 на сервер следующим образом:

yum -y install mysql-community-server

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

systemctl start mysqld
systemctl enable mysqld

Убедитесь, что MySQL работает, проверив порт, используемый MySQL (3306). Проверьте это с помощью команды netstat ниже.

netstat -plntu

MySQL был установлен на CentOS 7 из репозитория MySQL.

Шаг 2. Настройте корневой пароль MySQL.

По умолчанию MySQL 5.7 генерирует для вас пароль root по умолчанию при первом запуске службы. Пароль хранится в файле журнала MySQL /var/log/mysqld.log.

Чтобы увидеть корневой пароль MySQL по умолчанию, вы можете использовать команду grep ниже.

grep 'temporary' /var/log/mysqld.log

Вы увидите результат, аналогичный приведенному ниже. Мой пароль по умолчанию — wxtX8Te&Uh1K.

A temporary password is generated for : wxtX8Te&Uh1K

Подключитесь к оболочке MySQL с паролем по умолчанию и замените пароль своим собственным паролем.

mysql -u root -p
TYPE IN DEFAULT PASSWORD

Теперь замените пароль по умолчанию своим собственным паролем. В этом руководстве я буду использовать [email в качестве нового корневого пароля MySQL. Запустите запросы MySQL ниже.

ALTER USER 'root'@'localhost' IDENTIFIED BY '';
flush privileges;
exit;

Теперь вы можете снова подключиться с новым паролем [email .

mysql -u root -p
TYPE NEW PASSWORD ''

Шаг 3. Создайте новые файлы самозаверяющих сертификатов

По умолчанию MySQL 5.7 имеет собственные файлы сертификатов SSL в каталоге /var/lib/mysql. Но в этом уроке я покажу вам, как создавать собственные файлы сертификатов SSL с помощью OpenSSL, а затем настраивать их с помощью MySQL.

На этом шаге мы создадим новые файлы самозаверяющих сертификатов. Нам нужны 3 сертификата, сертификат CA, сертификат и ключ сервера, сертификат и ключ клиента. Мы создадим их с помощью OpenSSL.

Создайте новый каталог для файлов сертификатов SSL /etc/certs/ и перейдите в этот каталог.

mkdir -p /etc/certs
cd /etc/certs

Создайте новый файл сертификата ЦС ca.pem.

openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem

Далее нам нужно создать сертификаты на стороне сервера. Создайте новые файлы сертификата сервера server-cert.pem и server-key.pem. Создайте новые файлы сертификатов, удалите парольную фразу и подпишите их с помощью сертификата ЦС.

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

Теперь сгенерируйте файлы сертификатов для клиента. Сервер MySQL будет принимать удаленное подключение только от клиента, у которого есть эти файлы сертификатов. Создайте новые файлы сертификатов клиентов, удалите парольную фразу и подпишите их с помощью сертификата ЦС.

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

Примечание:

Информация о сертификате ЦС должна отличаться от информации о клиенте и сервере.

Все сертификаты, необходимые для этой установки, сгенерированы. Теперь мы можем проверить файлы сертификатов с помощью приведенной ниже команды.

openssl verify -CAfile ca.pem server-cert.pem client-cert.pem

Убедитесь, что нет ошибки, результаты, как показано ниже.

Все файлы сертификатов проверены. Измените владельца каталога certs на пользователя mysql и измените права доступа ко всем ключевым файлам.

chown -R mysql:mysql /etc/certs/
chmod 600 client-key.pem server-key.pem ca-key.pem

Шаг 4. Включите SSL для MySQL.

На этом шаге мы включим SSL для MySQL. Прежде чем мы начнем настраивать и включать SSL в MySQL, нам нужно сделать резервную копию файлов сертификатов по умолчанию в новый каталог резервных копий.

Создайте новый каталог резервных копий mysql-certs для всех сертификатов.

mkdir -p ~/mysql-certs/

Перейдите в каталог /var/lib/mysql и переместите все сертификаты по умолчанию в резервный каталог.

cd /var/lib/mysql/
mv ca.pem ca-key.pem ~/mysql-certs/
mv server-key.pem server-cert.pem ~/mysql-certs/
mv client-key.pem client-cert.pem ~/mysql-certs/
mv private_key.pem public_key.pem ~/mysql-certs/

Теперь перезапустите службу MySQL.

systemctl restart mysqld

Затем проверьте SSL из оболочки MySQL. Войдите в mysql с новым паролем:

mysql -u root -p
TYPE NEW PASSWORD ''

Запустите приведенный ниже запрос, чтобы мы могли увидеть статус SSL для MySQL.

SHOW GLOBAL VARIABLES LIKE '%ssl%';
STATUS;

Вы увидите, что состояние SSL ОТКЛЮЧЕНО, и пользователь root был подключен без SSL.

Далее мы включим SSL-соединение для MySQL. Мы должны отредактировать файл конфигурации MySQL my.cnf с помощью vim.

vim /etc/my.cnf

В разделе [mysqld] вставьте приведенную ниже конфигурацию.

# Type your own certificates directory
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/server-cert.pem
ssl-key=/etc/certs/server-key.pem

Сохраните файл и выйдите из vim, чтобы перезапустить службу MySQL.

systemctl restart mysqld

Теперь снова войдите в MySQL и проверьте SSL.

mysql -u root -p
TYPE NEW PASSWORD ''

Запустите запрос ниже, чтобы убедиться, что значение раздела SSL равно YES.

SHOW VARIABLES LIKE '%ssl%';
STATUS;

Вы увидите, что SSL для MySQL включен, но пользователь root все еще не подключен с использованием соединения SSL.

Чтобы заставить все локальные пользовательские соединения использовать SSL, снова отредактируйте файл конфигурации mysql my.cnf.

vim /etc/my.cnf

Вставьте конфигурацию ниже в конец строки.

[client]
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/client-cert.pem
ssl-key=/etc/certs/client-key.pem

Сохраните и выйдите, затем перезапустите MySQL.

systemctl restart mysqld

Снова подключитесь к MySQL и проверьте подключение и включенный SSL.

mysql -u root -p
TYPE NEW PASSWORD ''


SHOW VARIABLES LIKE '%ssl%';
STATUS;

SSL включен, и локальное соединение также использует SSL.

Шаг 5. Включите удаленные подключения

В приведенных выше шагах мы уже включили SSL для сервера MySQL, и локальные соединения вынуждены использовать SSL. На этом шаге мы включим удаленные подключения для MySQL, но мы разрешаем только клиентам, имеющим файлы сертификатов, подписанные нашим ЦС, подключаться к серверу MySQL.

Отредактируйте файл конфигурации MySQL с помощью vim.

vim /etc/my.cnf

Вставьте эту конфигурацию ниже в конец раздела [mysqld].

bind-address = *
require_secure_transport = ON

Сохраните файл и выйдите из редактора, перезапустив MySQL.

systemctl restart mysqld

Затем создайте нового пользователя для удаленного подключения. Я создам нового пользователя с именем hakase с паролем [email и предоставлю все привилегии пользователю hakase. Пользователь hakase сможет подключиться только с ключом сертификата.

mysql -u root -p
TYPE NEW PASSWORD '' REQUIRE X509;
flush privileges;

Создан новый пользователь для удаленного подключения.

Примечание:

Вы можете увидеть 1 предупреждение в результате запроса mysql. Это просто предупреждение об использовании запроса ALTER USER вместо GRANT, потому что запрос GRANT будет объявлен устаревшим в следующем выпуске.

Шаг 6 — Тестирование

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

  1. Сертификат CA — ca.pem
  2. Клиентский сертификат — client-cert.pem
  3. Ключ клиента – client-key.pem

Я вошел в другую систему Linux и установил там пакеты mysql-client. Затем я загрузил все файлы сертификатов клиентов с помощью SCP. Теперь я подключусь к серверу MySQL с файлами сертификатов.

mysql -h 10.0.15.11 -u hakase \
--ssl-ca=ca.pem \
--ssl-cert=client-cert.pem \
--ssl-key=client-key.pem -p

10.0.15.11=IP-адрес сервера MySQL.

Вы можете увидеть статус соединения с этим запросом ниже.

STATUS;

Пользователь hakase с IP-адресом 10.0.15.10 Подключен к серверу MySQL с IP-адресом 10.0.15.11, соединение осуществляется по протоколу TCP/IP на порту 3306 и с использованием SSL.

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

Далее я проведу тестирование с графическим интерфейсом MySQLWorkbench с моего хоста.

Ниже моя конфигурация - Параметр настройки.

Конфигурация SSL - Настройка SSL.

А ниже результаты соединения с файлами SSL Client Certificate.

Новый пользователь успешно удаленно подключился к серверу базы данных MySQL с помощью SSL-соединения. Когда пользователь пытается подключиться без файлов сертификата, результат будет отклонен. Установка и настройка MySQL с SSL-соединением успешно завершена.

Ссылка

  • http://mysqlresources.com/grant-connection-restrictions-types