Un ambiente database sicuro è difficile da ottenere, ma estremamente importante per evitare violazioni dei dati, ransomware e altre attività dannose. La sicurezza dei dati è una priorità assoluta dal punto di vista aziendale. Quando si esegue in un data center privato, la rete è solitamente il primo livello di difesa. Ma in un ambiente cloud di database ibrido distribuito, in cui le parti interne della topologia del database e le applicazioni sono distribuite tra i data center, la rete rappresenta una superficie di collegamento più ampia. La crittografia del traffico dati in transito è una delle misure comuni per la protezione contro le intercettazioni di rete. In questo blog vedremo come crittografare il traffico del database mysql del cloud ibrido.
Perché è necessario crittografare il traffico del database?
Il motivo principale è che le connessioni tra le istanze del database e qualsiasi applicazione client devono essere crittografate e garantire solo comunicazioni autorizzate. Questo livello di sicurezza può prevenire perdite di dati sensibili indesiderate o escludere la possibilità di qualsiasi attacco SQL injection, ecc. I dati in transito possono anche significare il traffico di replica tra i nodi del database o il traffico tra i bilanciatori di carico/proxy e le istanze del database.
Attivazione di SSL sui nodi MySQL
Le versioni più recenti di MySQL sono dotate di certificati autofirmati e SSL abilitato. D'altra parte, se desideri aggiungere un altro livello di sicurezza, potresti utilizzare i tuoi certificati, ClusterControl ti consente di modificare il certificato SSL. In questo blog, abbiamo spiegato come farlo utilizzando ClusterControl.
Attivazione di SSL sui client
MySQL esegue la crittografia in base alla connessione e l'uso della crittografia per un determinato utente può essere facoltativo o obbligatorio. Per connetterti ai nodi mysql tramite SSL, assicurati di aver impostato la concessione dell'utente con la sintassi "RICHIEDI SSL", simile alla seguente:
mysql> create user 'app_user'@'192.168.%.%' identified by '[email protected]' REQUIRE SSL;
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on *.* to 'app_user'@'192.168.%.%';
Query OK, 0 rows affected (0.00 sec)
Ciò consente di scegliere una connessione crittografata o non crittografata in base ai requisiti delle singole applicazioni.
Per garantire che i client debbano utilizzare connessioni crittografate, dobbiamo abilitare il parametro "require_secure_transport" nel file my.cnf. Di default questo parametro è OFF.
Verifica connessioni DB
Per impostazione predefinita, il client mysql tenta di stabilire una connessione crittografata se il server supporta connessioni crittografate, con ulteriore controllo disponibile ad esempio tramite l'opzione --ssl-mode
[[email protected] vagrant]# mysql -u app_user -p -h 192.168.xx.xx -P3306 --ssl=1 -e "status;" | grep -i SSL
SSL: Cipher in use is ECDHE-RSA-AES256-GCM-SHA384
Il protocollo SSL utilizza diversi algoritmi di crittografia per garantire i dati ricevuti sulle reti pubbliche e private. Dispone di meccanismi per rilevare eventuali modifiche o perdite di dati.
[[email protected] vagrant]# mysql -u app_user -p -h 192.168.xx.xx -P3306 --ssl=1
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 12656
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> SHOW SESSION STATUS LIKE 'Ssl_cipher';
+---------------+-----------------------------+
| Variable_name | Value |
+---------------+-----------------------------+
| Ssl_cipher | ECDHE-RSA-AES256-GCM-SHA384 |
+---------------+-----------------------------+
1 row in set (0.00 sec)
MySQL [(none)]> show status like 'Ssl_version';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Ssl_version | TLSv1.2 |
+---------------+---------+
1 row in set (0.00 sec)
Conclusione
La crittografia delle connessioni di un database non è e non dovrebbe essere un grosso problema, viene eseguita per impostazione predefinita in alcune delle versioni più recenti di MySQL. Poiché la sicurezza del database diventa sempre più un problema aziendale e normativo, c'è molto di più a cui pensare oltre alla semplice crittografia dei dati in transito per proteggere il tuo ambiente cloud ibrido. È importante tenere presente che quando si ospita un database si applicano altri livelli di sicurezza, come la sicurezza della rete e del sistema operativo.