In questo articolo, ti mostreremo come configurare connessioni remote e sicure per MySQL su Ubuntu 16.04 VPS. Se stai utilizzando una connessione non crittografata per connetterti al tuo server MariaDB/MySQL remoto, tutti coloro che hanno accesso alla rete possono monitorare e analizzare i dati inviati o ricevuti tra il client e il server. Questa guida dovrebbe funzionare anche su altri sistemi VPS Linux, ma è stata testata e scritta per un VPS Ubuntu 16.04.
1. Accedi al tuo VPS tramite SSH
ssh my_sudo_user@my_server
I passaggi di questo tutorial presuppongono che tu abbia installato MySQL 5.7 con la configurazione predefinita.
Abilita connessioni SSL:
2. Crea una nuova autorità di certificazione locale
Utilizzeremo l'autorità di certificazione locale come certificato radice autofirmato che utilizzeremo per firmare sia i certificati server che client. Per creare un nuovo file dell'autorità di certificazione locale, eseguire i seguenti comandi:
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
3. Genera certificato e chiave server
Per generare un certificato e una chiave del server, impartisci i seguenti comandi:
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
4. Genera certificato e chiave clienti
Successivamente, dobbiamo generare il certificato client. Esegui i seguenti comandi per generare un certificato client e una chiave:
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
Se desideri avere un certificato SSL firmato da una CA, puoi acquistare un certificato SSL affidabile qui.
5. Abilita le connessioni SSL del server MySQL
Apri il file di configurazione di MySQL con il tuo editor di testo:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
e decommentare le seguenti righe:
ssl-ca=/etc/mysql/cacert.pem ssl-cert=/etc/mysql/server-cert.pem ssl-key=/etc/mysql/server-key.pem
Salva il file e riavvia il servizio MySQL:
sudo systemctl restart mysql
Per verificare che SSL sia abilitato, accedi al server MySQL
mysql -uroot -p
ed esegui il seguente comando:
mysql> show variables LIKE '%ssl%';
L'output dovrebbe essere simile al seguente:
+---------------+----------------------------+ | 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)
6. Abilita connessioni remote tramite SSL
Per impostazione predefinita, MySQL ascolta solo le connessioni su localhost. Per abilitare le connessioni remote devi riconfigurare MySQL sul tuo server per l'ascolto su tutte le interfacce, per farlo apri il file di configurazione di MySQL:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
e cambia
bind-address = 127.0.0.1
a
bind-address = 0.0.0.0
Affinché le modifiche abbiano effetto, riavvia il server MySQL con il seguente comando:
sudo systemctl restart mysql
Verifica che il tuo server MySQL sia in ascolto su tutte le interfacce:
sudo netstat -anp | grep 3306
l'output dovrebbe essere simile al seguente:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 938/mysqld
Per consentire al tuo client MySQL di connettersi al server MySQL, devi concedere all'utente del database l'accesso al database sul server remoto.
Ad esempio se vuoi concedere l'accesso a dbuser
utente al database_name
database e per forzare SSL, accedi alla shell MySQL come root ed esegui il comando seguente:
GRANT ALL ON database_name.* TO [email protected] IDENTIFIED BY 'dbuserpassword' REQUIRE SSL;
dove 192.168.1.10
è l'indirizzo IP della tua macchina client MySQL.
Successivamente, devi configurare il tuo client MySQL per utilizzare il certificato SSL generato in precedenza. Copia i seguenti file dal tuo server MySQL al tuo computer client MySQL:
/etc/mysql/cacert.pem /etc/mysql/client-cert.pem /etc/mysql/client-key.pem
7. Configura client MySQL
apri la configurazione del tuo client MySQL e aggiungi le seguenti righe:
[client] ssl-ca=/etc/mysql/cacert.pem ssl-cert=/etc/mysql/client-cert.pem ssl-key=/etc/mysql/client-key.pem
8. Metti alla prova la tua connessione
Ora puoi testare la tua connessione dalla macchina client al server del database MySQL:
mysql -udbuser -pdbuserpassword -h 192.168.1.5
dove 192.168.1.5
è l'indirizzo IP del tuo server di database MySQL.
Questo è tutto. Hai configurato correttamente connessioni remote e sicure per MySQL sul tuo VPS Ubuntu 16.04. Per ulteriori informazioni sulle connessioni sicure MySQL, fare riferimento alla documentazione ufficiale di MySQL.
Ovviamente, non devi configurare connessioni remote e sicure per MySQL su Ubuntu 16.04 se utilizzi uno dei nostri servizi di hosting VPS Ubuntu, nel qual caso puoi semplicemente chiedere ai nostri esperti amministratori Linux di configurare connessioni remote e sicure per MySQL su Ubuntu 16.04 per te. Sono disponibili 24 ore su 24, 7 giorni su 7 e si prenderanno immediatamente cura della tua richiesta.
PS . Se ti è piaciuto questo post su come configurare connessioni remote e sicure per MySQL su Ubuntu 16.04, condividilo con i tuoi amici sui social network usando i pulsanti a sinistra o lascia semplicemente una risposta qui sotto. Grazie.