Si të aktivizoni SSL dhe lidhjet në distancë për MySQL në CentOS 7


MySQL është një sistem bazë të dhënash relacionale me burim të hapur që funksionon në shumë Sisteme Operative duke përfshirë Windows, Linux, MacOS dhe FreeBSD. Është ndoshta RDBMS më i popullarizuar i OpenSource dhe një komponent qendror i LAMP dhe LEMP Stacks. Ka shumë aplikacione që varen nga MySQL si Wordpress, Joomla, TYPO3, phpBB dhe shumë të tjera.

Në këtë tutorial, unë do t'ju tregoj hap pas hapi për të konfiguruar MySQL në mënyrë të sigurt për lidhjet në distancë. Kur ju duhet të hyni në MySQL nga distanca, ose kërkohet të përdorni një VPN pasi MySQL nuk i kodon të dhënat e transferuara ose mund ta konfiguroni MySQL për të përdorur SSL, siç do t'ju tregoj në këtë tutorial. Në këtë konfigurim, vetëm përdoruesit me skedarët e duhur të certifikatës SSL lejohen të lidhen me serverin MySQL dhe trafiku është i koduar. Ne do të instalojmë versionin më të fundit të MySQL dhe më pas do të konfigurojmë SSL-në për lidhjen në distancë. Për sistemin bazë, unë do të përdor një server CentOS 7.

Çfarë do të bëjmë:

  1. Instaloni MySQL.
  2. Konfiguro fjalëkalimin rrënjësor MySQL.
  3. Krijoni skedarë të rinj të certifikatës SSL të vetë-nënshkruar.
  4. Aktivizo SSL për MySQL.
  5. Aktivizo lidhjen në distancë.
  6. Testimi.

Kusht paraprak

  • Serveri CentOS 7
  • Privilegjet e rrënjës

Hapi 1 - Instaloni MySQL

Në këtë tutorial, ne do të përdorim MySQL 5.7, versioni më i fundit në këtë moment. Është instaluar nga depoja e MySQL, kështu që së pari duhet të shtojmë një depo të re CentOS në sistem.

Shtoni depon e re për MySQL me komandën yum më poshtë.

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

Do t'ju kërkohet të instaloni një paketë të re, shkruani y dhe shtypni Enter për të konfirmuar.

Tani mund të instaloni versionin më të fundit të MySQL 5.7 në server si kjo:

yum -y install mysql-community-server

Kur instalimi të ketë përfunduar, nisni shërbimin MySQL dhe aktivizoni atë të ekzekutohet automatikisht në kohën e nisjes me komandën systemctl.

systemctl start mysqld
systemctl enable mysqld

Sigurohuni që MySQL të funksionojë duke kontrolluar portën e përdorur nga MySQL (3306). Kontrollojeni me komandën netstat më poshtë.

netstat -plntu

MySQL është instaluar në CentOS 7 nga depoja e MySQL.

Hapi 2 - Konfiguro fjalëkalimin rrënjësor MySQL

Si parazgjedhje, MySQL 5.7 gjeneron një fjalëkalim rrënjësor të paracaktuar për ju kur filloni shërbimin herën e parë. Fjalëkalimi ruhet në skedarin e regjistrit MySQL /var/log/mysqld.log.

Për të parë fjalëkalimin e parazgjedhur të rrënjës MySQL, mund të përdorni komandën grep më poshtë.

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

Do të shihni një rezultat të ngjashëm me atë më poshtë, fjalëkalimi im i paracaktuar është wxtX8Te&Uh1K.

A temporary password is generated for : wxtX8Te&Uh1K

Lidhuni me guaskën MySQL me fjalëkalimin e paracaktuar dhe zëvendësoni fjalëkalimin me fjalëkalimin tuaj.

mysql -u root -p
TYPE IN DEFAULT PASSWORD

Tani zëvendësoni fjalëkalimin e paracaktuar me fjalëkalimin tuaj. Në këtë tutorial, unë do të përdor [email e mbrojtur] si fjalëkalimin e ri rrënjësor të MySQL. Drejtoni pyetjet e MySQL më poshtë.

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

Tani mund të lidheni përsëri me fjalëkalimin e ri [email e mbrojtur].

mysql -u root -p
TYPE NEW PASSWORD ''

Hapi 3 - Gjeneroni skedarë të rinj të certifikatës së vetë-nënshkruar

Si parazgjedhje, MySQL 5.7 ka skedarët e vet të certifikatës SSL në drejtorinë /var/lib/mysql. Por në këtë tutorial, unë do t'ju tregoj se si të gjeneroni skedarët tuaj të Certifikatës SSL me OpenSSL dhe më pas t'i konfiguroni ato me MySQL.

Në këtë hap, ne do të gjenerojmë skedarë të rinj certifikatash të vetë-nënshkruara. Na duhen 3 certifikata, Certifikata CA, Certifikata e Serverit dhe Çelësi, Certifikata e Klientit dhe Çelësi. Ne do t'i krijojmë ato me OpenSSL.

Krijoni një direktori të re për skedarët e certifikatës SSL /etc/certs/ dhe shkoni te ajo direktori.

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

Gjeneroni skedarin e ri të certifikatës CA ca.pem.

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

Më pas, duhet të krijojmë certifikatat nga ana e serverit. Krijoni skedarë të ri të certifikatës së serverit server-cert.pem dhe server-key.pem. Gjeneroni skedarë të rinj certifikate, hiqni frazën e kalimit dhe nënshkruani ato me certifikatën CA.

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

Tani krijoni skedarë certifikatash për klientin. Serveri MySQL do të pranojë vetëm lidhje në distancë nga klienti që ka këto skedarë certifikatash. Gjeneroni skedarë të rinj të certifikatës së klientit, hiqni frazën e kalimit dhe nënshkruani ato duke përdorur certifikatën CA.

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

Shënim:

Informacioni i certifikatës CA duhet të jetë i ndryshëm nga informacioni i klientit dhe serverit.

Të gjitha certifikatat që kërkojmë për këtë konfigurim janë krijuar. Tani mund të verifikojmë skedarët e certifikatës me komandën e mëposhtme.

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

Sigurohuni që të mos ketë gabim, rezultatet si më poshtë.

Të gjithë skedarët e certifikatës janë verifikuar. Ndryshoni zotëruesin e drejtorisë së certifikatave në përdoruesin mysql dhe ndryshoni lejet e të gjithë skedarëve kryesorë.

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

Hapi 4 - Aktivizo SSL për MySQL

Në këtë hap, ne do të aktivizojmë SSL për MySQL. Përpara se të fillojmë të konfigurojmë dhe aktivizojmë SSL në MySQL, duhet të kopjojmë skedarët e paracaktuar të certifikatës në drejtorinë e re rezervë.

Krijo drejtori të re rezervë mysql-certs për të gjitha certifikatat.

mkdir -p ~/mysql-certs/

Shkoni te drejtoria /var/lib/mysql dhe zhvendosni të gjitha certifikatat e paracaktuara në drejtorinë rezervë.

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/

Tani rinisni shërbimin MySQL.

systemctl restart mysqld

Tjetra, kontrolloni SSL nga guaska MySQL. Hyni në mysql me fjalëkalimin e ri:

mysql -u root -p
TYPE NEW PASSWORD ''

Drejtoni pyetjen më poshtë që të mund të shohim statusin SSL për MySQL.

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

Do të shihni se statusi i SSL-së është DI AKTIVIZUAR dhe përdoruesi rrënjësor është lidhur pa SSL.

Më pas, do të aktivizojmë lidhjen SSL për MySQL. Duhet të modifikojmë skedarin e konfigurimit MySQL my.cnf me vim.

vim /etc/my.cnf

Në seksionin [mysqld], ngjisni konfigurimin më poshtë.

# 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

Ruani skedarin dhe dilni nga vim, rinisni shërbimin MySQL.

systemctl restart mysqld

Tani identifikohuni përsëri në MySQL dhe kontrolloni SSL.

mysql -u root -p
TYPE NEW PASSWORD ''

Drejtoni pyetjen më poshtë për t'u siguruar që vlera e seksionit SSL është PO.

SHOW VARIABLES LIKE '%ssl%';
STATUS;

Do të shihni që SSL për MySQL është aktivizuar, por përdoruesi rrënjë nuk është ende i lidhur duke përdorur lidhjen SSL.

Për të detyruar të gjithë lidhjen e përdoruesit lokal me SSL, modifikoni përsëri skedarin e konfigurimit mysql my.cnf.

vim /etc/my.cnf

Ngjitni konfigurimin më poshtë në fund të rreshtit.

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

Ruani dhe dilni, më pas rinisni MySQL.

systemctl restart mysqld

Lidhu përsëri me MySQL dhe kontrollo lidhjen dhe SSL të aktivizuar.

mysql -u root -p
TYPE NEW PASSWORD ''


SHOW VARIABLES LIKE '%ssl%';
STATUS;

SSL është aktivizuar dhe lidhja lokale përdor gjithashtu SSL.

Hapi 5 - Aktivizo lidhjet në distancë

Në hapat e mësipërm, ne kemi aktivizuar tashmë SSL për serverin MySQL dhe lidhjet lokale janë të detyruara të përdorin SSL. Në këtë hap, ne do të aktivizojmë lidhjet në distancë për MySQL, por lejojmë që vetëm klientët të kenë skedarë certifikatash të nënshkruara nga CA-ja jonë për t'u lidhur me serverin MySQL.

Redaktoni skedarin e konfigurimit MySQL me vim.

vim /etc/my.cnf

Ngjitni këtë konfigurim më poshtë në fund të seksionit [mysqld].

bind-address = *
require_secure_transport = ON

Ruani skedarin dhe dilni nga redaktori, rinisni MySQL.

systemctl restart mysqld

Më pas, krijoni një përdorues të ri për lidhjen në distancë. Do të krijoj një përdorues të ri të quajtur hakase me fjalëkalim [email e mbrojtur] dhe do t'i jap të gjitha privilegjet përdoruesit hakase. Përdoruesi i hakase do të mund të lidhet vetëm me çelësin e certifikatës.

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

Është krijuar përdorues i ri për lidhje në distancë.

Shënim:

Mund të shihni 1 paralajmërim në rezultatin e pyetjes mysql. Është vetëm një paralajmërim për përdorimin e kërkesës ALTER USER në vend të një GRANT, sepse kërkesa GRANT do të zhvlerësohet në versionin e ardhshëm.

Hapi 6 - Testimi

Në pjesën e fundit të këtij tutoriali, ne do të testojmë nëse përdoruesi i ri me emrin hakase është në gjendje të lidhet me serverin MySQL nga distanca me skedarë certifikatash. Duhet të shkarkohen tre certifikata për klientin.

  1. Certifikata CA - ca.pem
  2. Certifikata e klientit - client-cert.pem
  3. Çelësi i klientit - client-key.pem

Jam identifikuar në një sistem tjetër Linux dhe kam instaluar atje paketat e klientit mysql. Pastaj kam shkarkuar të gjithë skedarët e certifikatës së klientit me SCP. Tani do të lidhem me serverin MySQL me skedarët e certifikatës.

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=adresa IP e MySQL Server.

Ju mund ta shihni statusin e lidhjes me këtë pyetje më poshtë.

STATUS;

Përdoruesi hakase me adresën IP 10.0.15.10 Lidhur me serverin MySQL me adresën IP 10.0.15.11, lidhja nëpërmjet TCP/IP në portën 3306 dhe duke përdorur SSL.

Kur përpiqeni të lidheni pa skedarë të certifikatës, do të shihni gabimin si më poshtë.

Tjetra, unë do të testoj me GUI MySQLWorkbench nga hosti im.

Më poshtë është konfigurimi im - Vendosja e parametrit.

Konfigurimi SSL - Vendosja e SSL.

Dhe më poshtë rezultatet e lidhjes me skedarët e certifikatës së klientit SSL.

Një përdorues i ri u lidh me sukses nga distanca me serverin e bazës së të dhënave MySQL me një lidhje SSL. Kur një përdorues përpiqet të lidhet pa skedarët e certifikatës, rezultati do të mohohet. Instalimi dhe konfigurimi i MySQL me lidhje SSL është kryer me sukses.

Referenca

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