Connessione sicura a MySQL: SSL vs Stunnel vs SSH Tunneling di MySQL


15

Abbiamo un'applicazione PHP che si collega a un server MySQL e desideriamo proteggere le connessioni tra i server Web e delle applicazioni e il database.

Nelle ore di punta, i server Web effettuano molte centinaia di connessioni simultanee al database ed eseguono molte piccole letture e scritture. Sono consapevole che questo non è ottimale e sto lavorando per ridurre il numero di connessioni al database parallelamente a questo.

Al momento non abbiamo connessioni permanenti al database attivate e, sebbene in futuro intendiamo implementarlo indipendentemente da quello.

Per quanto riguarda l'hardware - il server MySQL è piuttosto grosso (16 core) come lo sono i server web. Sono server dedicati.

La mia domanda circonda quindi il modo più efficace di proteggere e crittografare le connessioni al server di database.

La mia ricerca finora ha suggerito che il principale sovraccarico delle prestazioni è con l'impostazione della connessione SSL - una volta che SSL è connesso, ci sono poche penali sulle prestazioni. Ed ecco quello che ho su ogni metodo di protezione della connessione:

  1. Certificati SSL MySQL: funziona esattamente come il normale SSL. Può utilizzare i certificati client per impedire connessioni non autorizzate. Nessuna connessione persistente con la nostra configurazione esistente. Devo ancora avere MySQL in ascolto su una porta aperta sul firewall.
  2. Stunnel. Configurare una porta per port tunnel ssl. Non è necessario riconfigurare MySQL. Può chiudere la normale porta di ascolto MySQL per impedire tentativi di connessione MySQL dannosi. Non supporta connessioni permanenti. Hit di performance sconosciuto.
  3. Tunnel SSH. Creare un tunnel SSH tra il client e il server. Non è necessario riconfigurare MySQL. Può chiudere la normale porta di ascolto MySQL per impedire tentativi di connessione MySQL dannosi. Supporta connessioni persistenti, ma a volte queste si interrompono. Hit di performance sconosciuto.

Questo è quanto ho potuto ottenere. Sono consapevole dei limiti dei parametri di riferimento: nella mia esperienza nella loro esecuzione è molto difficile simulare il traffico reale. Speravo che qualcuno avesse qualche consiglio basato sulle proprie esperienze di protezione di MySQL?

Grazie


Che tipo di architettura server / rete hai? Che tipo di scenario stai cercando di prevenire? Se tutte le comunicazioni da server a server avvengono su uno switch / VLAN separato, potrebbe non essere necessaria la protezione anti-sniffing. Per quanto riguarda le prestazioni, esegui openssl speede scegli le cifre che soddisfano le tue esigenze di protezione rispetto alle prestazioni.
Marcin,

@Marcin - grazie per il suggerimento sulla velocità di openssl. Gli scenari che sto cercando di prevenire sono connessioni non autorizzate a mysql e per crittografare le comunicazioni tra i server. Ogni ulteriore aiuto che puoi dare per confrontare i tre approcci sarebbe ricevuto con gratitudine.
dastra,

1
a 3) utilizzare l' autossh per ridurre l'effetto di abbandono. Si riconnetterà automaticamente in caso di disconnessione. Funziona bene qui in molte situazioni.
ansi_lumen,

Risposte:


5

Vorrei andare con il tunnel SSH e farlo con autosshinvece di ssh. A proposito delle prestazioni, direi che il protocollo SSH è altamente personalizzabile e, se necessario, è possibile ottimizzare la connessione.

Ma non mi aspetterei un notevole sovraccarico dopo aver impostato la connessione.


3

Osservando i parametri di riferimento di questo articolo (MySQL Performance Blog), dovresti davvero evitare la funzionalità SSL nativa di MySQL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.