GNU/Linux >> Linux Esercitazione >  >> Cent OS

Come abilitare SSL e connessioni remote per MySQL su CentOS 7

MySQL è un sistema di database relazionale open source che funziona su molti sistemi operativi tra cui Windows, Linux, MacOS e FreeBSD. È probabilmente l'RDBMS OpenSource più popolare e un componente centrale degli stack LAMP e LEMP. Esistono molte applicazioni che dipendono da MySQL come Wordpress, Joomla, TYPO3, phpBB e molte altre.

In questo tutorial, ti mostrerò passo dopo passo come configurare MySQL in modo sicuro per le connessioni remote. Quando devi accedere a MySQL in remoto, è necessario utilizzare una VPN poiché MySQL non crittografa i dati trasferiti oppure puoi configurare MySQL per utilizzare SSL, come ti mostrerò in questo tutorial. In questa configurazione, solo gli utenti con i file di certificato SSL corretti possono connettersi al server MySQL e il traffico è crittografato. Installeremo l'ultima versione di MySQL, quindi configureremo SSL per la connessione remota. Per il sistema di base, utilizzerò un server CentOS 7.

Cosa faremo:

  1. Installa MySQL.
  2. Configura la password radice MySQL.
  3. Genera nuovi file di certificati SSL autofirmati.
  4. Abilita SSL per MySQL.
  5. Abilita connessione remota.
  6. Test.

Prerequisito

  • Server CentOS 7
  • Privilegi di root

Passaggio 1:installa MySQL

In questo tutorial useremo MySQL 5.7, l'ultima versione in questo momento. Viene installato dal repository MySQL, quindi dobbiamo prima aggiungere un nuovo repository CentOS al sistema.

Aggiungi il nuovo repository per MySQL con il comando yum di seguito.

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

Ti verrà chiesto di installare un nuovo pacchetto, digita 'y ' e premi 'Invio ' per confermare.

Ora puoi installare l'ultima versione 5.7 di MySQL sul server in questo modo:

yum -y install mysql-community-server

Al termine dell'installazione, avvia il servizio MySQL e abilitalo all'esecuzione automatica all'avvio con il comando systemctl.

systemctl start mysqld
systemctl enable mysqld

Assicurati che MySQL sia in esecuzione controllando la porta utilizzata da MySQL (3306). Verificalo con il comando netstat di seguito.

netstat -plntu

MySQL è stato installato su CentOS 7 dal repository MySQL.

Passaggio 2:configurazione della password di root MySQL

Per impostazione predefinita, MySQL 5.7 genera una password di root predefinita per te al primo avvio del servizio. La password è memorizzata nel file di registro MySQL '/var/log/mysqld.log'.

Per vedere la password di root MySQL predefinita, puoi usare il comando grep di seguito.

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

Vedrai un risultato simile a quello di seguito, la mia password predefinita è "wxtX8Te&Uh1K '.

A temporary password is generated for [email protected]: wxtX8Te&Uh1K

Collegati alla shell MySQL con la password predefinita e sostituisci la password con la tua password.

mysql -u root -p
TYPE IN DEFAULT PASSWORD

Ora sostituisci la password predefinita con la tua password. In questo tutorial utilizzerò '[email protected] ' come nuova password di root MySQL. Esegui query MySQL di seguito.

ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]';
flush privileges;
exit;

Ora puoi riconnetterti con la nuova password "[email protected]".

mysql -u root -p
TYPE NEW PASSWORD '[email protected]'

Fase 3:genera nuovi file di certificato autofirmati

Per impostazione predefinita, MySQL 5.7 ha i propri file di certificato SSL nella directory '/var/lib/mysql'. Ma in questo tutorial, ti mostrerò come generare i tuoi file di certificati SSL con OpenSSL e quindi configurarli con MySQL.

In questo passaggio, genereremo nuovi file di certificato autofirmati. Abbiamo bisogno di 3 certificati, certificato CA, certificato e chiave server, certificato e chiave client . Li creeremo con OpenSSL.

Crea una nuova directory per i file del certificato SSL '/etc/certs/' e vai in quella directory.

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

Genera un nuovo file ca.pem del certificato CA.

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

Successivamente, dobbiamo creare i certificati lato server. Creare un nuovo certificato server file server-cert.pem e server-key.pem. Genera nuovi file di certificato, rimuovi la passphrase e firmali con il certificato 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

Ora genera i file di certificato per il client. Il server MySQL accetterà solo la connessione remota dal client che ha questi file di certificato. Genera nuovi file di certificato client, rimuovi la passphrase e firmali utilizzando il certificato 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

Nota:

Le informazioni sul certificato CA devono essere diverse dalle informazioni sul client e sul server.

Tutti i certificati necessari per questa configurazione sono stati generati. Ora possiamo verificare i file del certificato con il comando seguente.

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

Assicurati che non ci siano errori, i risultati come di seguito.

Tutti i file del certificato sono stati verificati. Cambia il proprietario della directory certs nell'utente 'mysql' e cambia i permessi di tutti i file chiave.

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

Passaggio 4 - Abilita SSL per MySQL

In questo passaggio, abiliteremo SSL per MySQL. Prima di iniziare a configurare e abilitare SSL su MySQL, è necessario eseguire il backup dei file del certificato predefinito nella nuova directory di backup.

Crea una nuova directory di backup 'mysql-certs ' per tutti i certificati.

mkdir -p ~/mysql-certs/

Vai alla directory '/var/lib/mysql' e sposta tutti i certificati predefiniti nella directory di backup.

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/

Ora riavvia il servizio MySQL.

systemctl restart mysqld

Quindi, controlla SSL dalla shell MySQL. Accedi a mysql con la nuova password:

mysql -u root -p
TYPE NEW PASSWORD '[email protected]'

Esegui la query di seguito in modo da poter vedere lo stato SSL per MySQL.

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

Vedrai che lo stato SSL è 'DISABILITATO ' e l'utente root è stato connesso senza SSL .

Successivamente, abiliteremo la connessione SSL per MySQL. Dobbiamo modificare il file di configurazione MySQL 'my.cnf ' file con vim.

vim /etc/my.cnf

In '[mysqld] ', incolla la configurazione qui sotto.

# 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

Salva il file ed esci da vim, riavvia il servizio MySQL.

systemctl restart mysqld

Ora accedi di nuovo a MySQL e controlla SSL.

mysql -u root -p
TYPE NEW PASSWORD '[email protected]'

Esegui la query di seguito per assicurarti che il valore della sezione SSL sia " '.

SHOW VARIABLES LIKE '%ssl%';
STATUS;

Vedrai che SSL per MySQL è abilitato, ma l'utente root non è ancora connesso utilizzando la connessione SSL.

Per forzare tutte le connessioni degli utenti locali con SSL, modifica il file di configurazione mysql 'my.cnf ' di nuovo.

vim /etc/my.cnf

Incolla la configurazione di seguito fino alla fine della riga.

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

Salva ed esci, quindi riavvia MySQL.

systemctl restart mysqld

Connettiti di nuovo a MySQL e controlla la connessione e SSL abilitato.

mysql -u root -p
TYPE NEW PASSWORD '[email protected]'


SHOW VARIABLES LIKE '%ssl%';
STATUS;

SSL è stato abilitato e anche la connessione locale utilizza SSL.

Passaggio 5 - Abilita connessioni remote

Nei passaggi precedenti, abbiamo già abilitato SSL per il server MySQL e le connessioni locali sono obbligate a utilizzare SSL. In questo passaggio, abiliteremo le connessioni remote per MySQL, ma consentiamo solo ai client che dispongono di file di certificato firmati dalla nostra CA di connettersi al server MySQL.

Modifica il file di configurazione di MySQL con vim.

vim /etc/my.cnf

Incolla questa configurazione di seguito alla fine di '[mysqld] sezione '.

bind-address = *
require_secure_transport = ON

Salva il file ed esci dall'editor, riavvia MySQL.

systemctl restart mysqld

Quindi, crea un nuovo utente per la connessione remota. Creerò un nuovo utente chiamato 'hakase ' con password '[email protetta] ' e concedi tutti i privilegi a 'hakase ' utente. 'hakase ' l'utente potrà connettersi solo con la chiave del certificato.

mysql -u root -p
TYPE NEW PASSWORD '[email protected]'

create user 'hakase'@'%' identified by '[email protected]' REQUIRE X509;
grant all privileges on *.* to 'hakase'@'%' identified by '[email protected]' REQUIRE X509;
flush privileges;

È stato creato un nuovo utente per la connessione remota.

Nota:

Potresti visualizzare "1 avviso ' nel risultato della query MySQL. È solo un avviso sull'utilizzo della query ALTER USER invece di GRANT perché la query "GRANT" sarà ritirata nella prossima versione.

Fase 6 - Test

Nella sezione finale di questo tutorial, verificheremo se il nuovo utente chiamato 'hakase' è in grado di connettersi al server MySQL in remoto con i file di certificato. È necessario scaricare tre certificati per il client.

  1. Certificato CA - ca.pem
  2. Certificato cliente - client-cert.pem
  3. Chiave client - client-key.pem

Ho effettuato l'accesso a un altro sistema Linux e lì ho installato i pacchetti mysql-client. Quindi ho scaricato tutti i file dei certificati client con SCP. Ora mi collegherò al server MySQL con i file del certificato.

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 =Indirizzo IP del server MySQL.

Puoi vedere lo stato della connessione con questa query di seguito.

STATUS;

Utente hakase con indirizzo IP 10.0.15.10 Connesso al server MySQL con indirizzo IP 10.0.15.11 , la connessione tramite TCP/IP sulla porta 3306 e utilizzando SSL .

Quando provi a connetterti senza i file del certificato, vedrai l'errore come di seguito.

Successivamente, proverò con la GUI MySQLWorkbench dal mio host.

Di seguito è riportata la mia configurazione - Impostazione del parametro.

Configurazione SSL - Impostazione SSL.

E sotto i risultati della connessione con i file SSL Client Certificate.

Un nuovo utente si è connesso correttamente in remoto al server del database MySQL con una connessione SSL. Quando un utente tenta di connettersi senza i file del certificato, il risultato sarà "negato '. L'installazione e la configurazione di MySQL con connessione SSL sono state eseguite correttamente.


Cent OS
  1. Come abilitare il registro delle query lente per MySQL

  2. Come configurare connessioni remote e sicure per MySQL su Ubuntu 16.04

  3. Come installare MySQL su CentOS 7.x?

  4. Abilita SSL e connessioni remote per MySQL

  5. Come abilitare FTP in CentOS/RHEL 5 e 6

Come abilitare Kdump su RHEL 7 e CentOS 7

Come abilitare il repository EPEL su CentOS 8 e RHEL 8 Server

Come installare Nginx con PHP e MySQL (stack LEMP) su CentOS 7

Come installare ONLYOFFICE su Red Hat Linux (RHEL) e CentOS

Come installare Nginx con PHP e MySQL (LEMP Stack) su CentOS 7.6

Come installare e abilitare Remi Repository su CentOS 5, CentOS 6 e CentOS 7