ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Воскресенье, 22 декабря, 2024

Как настроить удаленно и защитить соединение для MySQL на Ubuntu 16.04 VPS

Как настроить удаленно и защитить соединение для MySQL на Ubuntu 16.04 VPS

В этой статье мы покажем вам, как настроить удаленно и защитить соединение для MySQL на Ubuntu 16.04 VPS. Если вы используете нешифрованное соединение для подключения к удаленному серверу MariaDB/MySQL, то все с доступом к сети могут контролировать и анализировать данные, отправленные или полученные между клиентом и сервером. Это руководство должно работать на других системах Linux VPS также хорошо, но было проверено и написано для Ubuntu 16.04 VPS.

Войдите на свой VPS через SSH

ssh my_sudo_user@my_server

 

Действия, описанные в этом руководстве предполагают, что вы установили MySQL 5.7 с конфигурацией по умолчанию.

Включение SSL соединений

Создание нового локального центра сертификации

Мы будем использовать местный орган сертификации как самоподписной корневой сертификат, чтобы подписать оба клиента и сервер сертификатов. Для того, чтобы создать новый файл органа местного сертификата, выполните следующие команды:

sudo openssl genrsa -out /etc/mysql/ca-key.pem 2048
sudo chmod 600 /etc/mysql/ca-key.pem
sudo openssl req -new -key /etc/mysql/ca-key.pem -out /etc/mysql/ca-csr.pem -subj /CN=mysql-CA/
sudo openssl x509 -req -in /etc/mysql/ca-csr.pem -out /etc/mysql/cacert.pem -signkey /etc/mysql/ca-key.pem -days 3650
sudo echo 01 > /etc/mysql/cacert.srl

Генерация сертификата сервера и ключа

Для получения сертификата сервера и ключа, выполните следующие команды:

sudo openssl genrsa -out /etc/mysql/server-key.pem 2048
sudo chmod 600 /etc/mysql/server-key.pem
sudo openssl req -new -key /etc/mysql/server-key.pem -out /etc/mysql/server-csr.pem -subj /CN=mysql/
sudo openssl x509 -req -in /etc/mysql/server-csr.pem -out /etc/mysql/server-cert.pem -CA /etc/mysql/cacert.pem -CAkey /etc/mysql/ca-key.pem -days 365

Сформирование сертификата клиента и ключа

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

sudo openssl genrsa -out /etc/mysql/client-key.pem 2048
sudo chmod 600 /etc/mysql/client-key.pem
sudo openssl req -new -key /etc/mysql/client-key.pem -out /etc/mysql/client-csr.pem -subj /CN=mysql/
sudo openssl x509 -req -in /etc/mysql/client-csr.pem -out /etc/mysql/client-cert.pem -CA /etc/mysql/cacert.pem -CAkey /etc/mysql/ca-key.pem -days 365

 

Если вы хотите иметь бесплатный сертификат SSL, вы можете установить доверенный сертификат SSL по гиду указанному здесь.

Включение SSL соединений MySQL сервера

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

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

 

и раскомментируйте следующие строки:

ssl-ca=/etc/mysql/cacert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

 

Сохраните файл и перезапустите службу MySQL:

sudo systemctl restart mysql 

 

Для того, чтобы убедиться, что SSL включен, войдите на сервер MySQL

mysql -uroot -p

 

и выполните следующую команду:

mysql> show variables LIKE '%ssl%';

 

Вывод должен быть похож на следующий:

+---------------+----------------------------+
| Variable_name | Value                      |
+---------------+----------------------------+
| have_openssl  | YES                        |
| have_ssl      | YES                        |
| ssl_ca        | /etc/mysql/cacert.pem      |
| ssl_capath    |                            |
| ssl_cert      | /etc/mysql/server-cert.pem |
| ssl_cipher    |                            |
| ssl_crl       |                            |
| ssl_crlpath   |                            |
| ssl_key       | /etc/mysql/server-key.pem  |
+---------------+----------------------------+
9 rows in set (0.15 sec)

Включение удаленного подключения через SSL

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

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

 

и измените

bind-address = 127.0.0.1

на

bind-address = 0.0.0.0

 

Для того, чтобы изменения вступили в силу, перезапустите сервер MySQL с помощью следующей команды:

sudo systemctl restart mysql 

 

Убедитесь, что ваш сервер MySQL прослушивает все интерфейсы:

sudo netstat -anp | grep 3306

 

вывод должен быть похож на следующий:

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 938/mysqld

 

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

Например, если вы хотите предоставить доступ к пользователю dbuser к базе данных database_name и включить SSL, подключитесь к MySQL оболочке как root и выполните следующую команду:

GRANT ALL ON database_name.* TO dbuser@192.168.1.10 IDENTIFIED BY 'dbuserpassword' REQUIRE SSL;

 

где 192.168.1.10 ваш IP — адрес машины MySQL клиента.

Далее, вам нужно настроить клиент MySQL использовать сгенерированный ранее сертификат SSL. Скопируйте следующие файлы с сервера MySQL на клиентскую машину MySQL:

/etc/mysql/cacert.pem
/etc/mysql/client-cert.pem
/etc/mysql/client-key.pem

 

откройте конфигурацию клиента MySQL и добавьте следующие строки:

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

 

Теперь вы можете проверить соединение с клиентского компьютера на сервер базы данных MySQL:

mysql -udbuser -pdbuserpassword -h 192.168.1.5

 

где 192.168.1.5 IP — адрес нахождения сервера базы данных MySQL.


Вот и все. Вы успешно настроили удаленно и защитили соединение для MySQL на вашей Ubuntu 16,04 VPS. Дополнительные сведения о защищенных соединений MySQL, пожалуйста, обратитесь к официальной документации MySQL (https://dev.mysql.com/doc/refman/5.7/en/secure-connections.html).

Exit mobile version