безкоштовно з міських телефонів України
Київ | 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;
Див. також:
Налаштування віддаленої бази даних