бесплатно с городских телефонов Украины
Киев | 044 392-73-56 |
Харьков | 057 728-49-18 |
Днепр | 056 790-86-00 |
Одесса | 048 734-56-54 |
Львов | 032 229-58-50 |
Николаев | 051 270-12-63 |
Полтава | 053 262-53-74 |
Запорожье | 061 228-69-91 |
По мере роста сайта или приложения трафик будет увеличиваться и ресурсов сервера может стать недостаточно. Если веб-сервер и сервер баз данных обслуживаются одним сервером, увеличить производительность возможно переместив сервер баз данных на отдельный сервер.
Рекомендуется создать не root пользователя с доступом к sudo.
В инструкции используется текстовый редактор nano, для установки которого требуется выполнить команду:
yum install nano
В инструкции используются два сервера:
Первый сервер будет использоваться для проверки удаленного подключения к базе данных, а на втором сервере будет установлен и настроен сервер баз данных.
Подключаемся ко второму серверу.
Обновляем пакеты:
sudo yum -y update
Устанавливаем MySQL (MariaDB) и вспомогательные пакеты:
sudo yum install mariadb-server mariadb
Запускаем MariaDB:
sudo systemctl start mariadb
Запускаем сценарий безопасности, позволяющий удалить некоторые опасные значения по умолчанию, а так же ограничить доступ к системе баз данных:
sudo mysql_secure_installation
После выполнения запроса появится уведомление с запросом пароля root.
Т.к MySQL был только что установлен и пароля root нет, необходимо просто нажать enter.
После этого необходимо нажать клавишу 'y', чтобы задать пароль для пользователя root.
После назначения пароля и подтверждения пароля появится уведомление:
Для остальных вопросов необходимо просто нажать клавишу enter в каждом вопросе, чтобы принять значения по умолчанию:
Включаем MariaDB для запуска при загрузке:
sudo systemctl enable mariadb
Создаем новые самоподписанные файлы сертификатов.
Создаем новый каталог для файлов сертификатов:
sudo mkdir -p /etc/certs
Изменяем владельца каталога сертификатов на пользователя denis:
sudo chown -R denis:denis /etc/certs/
Заходим в папку /etc/certs
cd /etc/certs
Создаем новый файл сертификата CA.pem выполнив указанные ниже команды указав при заполнении собственную информацию:
sudo openssl genrsa 2048 > ca-key.pem
sudo openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem
Информация сертификата CA должна отличаться от информации о серверном сертификате и клиентском сертификате.
Создаем новый серверный сертификат server-cert.pem и файл server-key.pem выполнив указанные ниже команды указав при заполнении собственную информацию:
sudo openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
sudo openssl rsa -in server-key.pem -out server-key.pem
sudo openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Для того, чтобы к серверу баз данных мог подключиться только клиент с соответствующими файлами сертификатов, создаем новый клиентский сертификат client-req.pem и файл client-key.pem выполнив указанные ниже команды указав при заполнении собственную информацию:
sudo openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
sudo openssl rsa -in client-key.pem -out client-key.pem
sudo openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
Убеждаемся что в созданных файлах сертификатов нет ошибок:
sudo openssl verify -CAfile ca.pem server-cert.pem client-cert.pem
Изменяем владельца каталога сертификатов на пользователя mysql, а так же изменяем разрешения всех файлов ключей выполнив следующие команды:
sudo chown -R mysql:mysql /etc/certs/
sudo chmod 600 client-key.pem server-key.pem ca-key.pem
Открываем конфигурационный файл MySQL:
sudo nano /etc/my.cnf
и в разделе mysqld добавляем строку:
bind-address=93.190.42.60
где 93.190.42.60 ip адрес сервера баз данных.
А так же строки:
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/server-cert.pem
ssl-key=/etc/certs/server-key.pem
Так же в нижней части файла добавляем строки:
[client]
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/client-cert.pem
ssl-key=/etc/certs/client-key.pem
Сохраняем изменение в файле, нажав сочетание клавиш Ctrl+x , затем клавишу y и затем клавишу Enter.
Перезагружаем MySQL сервер для обновления конфигурации.
sudo systemctl restart mariadb
Подключаемся к оболочке MySQL, указав пароль пользователя root:
sudo mysql -u root -p
Проверяем подключение и SSL выполнив команды:
SHOW VARIABLES LIKE '%ssl%';
STATUS;
Выходим из оболочки MySQL:
exit;
Для открытия 3306 порта открываем файл /etc/sysconfig/iptables:
sudo nano /etc/sysconfig/iptables
и после строки:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
указываем строку:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
Сохраняем изменение в файле, нажав сочетание клавиш Ctrl+x , затем клавишу y и затем клавишу Enter
Перезагружаем iptables для вступления изменений в силу:
sudo service iptables reload
Создаем базу данных для последующего подключения к ней с удаленного сервера.
Подключаемся к MySQL как root:
sudo mysql -u root -p
Для примера создаем базу данных с именем sitedb:
CREATE DATABASE sitedb;
И пользователя базы данных с именем userdb и паролем passworddb, который сможет удаленно подключаться к базе данных с первого сервера, имеющего IP адрес 93.190.42.52:
CREATE USER 'userdb'@'93.190.42.52' IDENTIFIED BY 'passworddb';
Передаем пользователю все права на базу данных sitedb:
GRANT ALL PRIVILEGES ON sitedb.* TO 'userdb'@'93.190.42.52';
Обновляем настройки:
FLUSH PRIVILEGES;
Закрываем командную строку MySQL:
exit;
Переходим на первый сервер и устанавливаем клиентские инструменты MySQL, чтобы получить доступ к удаленной базе данных:
sudo yum install mariadb
Создаем папку, в которую будут скопированы файлы сертификатов с сервера баз данных:
mkdir mysql-hakase
Переходим в папку mysql-hakase:
cd mysql-hakase
Копируем файлы сертификатов выполнив следующие команды и указав при выполнении каждой команды пароль пользователя root, созданного на сервере 93.190.42.60:
sudo scp root@93.190.42.60:/etc/certs/ca.pem /home/denis/mysql-hakase
sudo scp root@93.190.42.60:/etc/certs/client-cert.pem /home/denis/mysql-hakase
sudo scp root@93.190.42.60:/etc/certs/client-key.pem /home/denis/mysql-hakase
И проверяем наличие скачанных файлов:
ls
Подключаемся к серверу баз данных с IP адресом 93.190.42.60, используя скачанные файлы сертификатов и имя пользователя userdb , созданного ранее на сервере баз данных (после запроса пароля, необходимо указать пароль пользователя userdb):
sudo mysql -h 93.190.42.60 -u userdb --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -p
После подключения выполняем команду, чтобы убедиться, что подключение является защищенным:
status;
Отключаемся от сервера баз данных:
exit;
См.также:
Настройка удаленной базы данных