Connexion sécurisée à MySQL - MySQL's SSL vs Stunnel vs SSH Tunneling

15

Nous avons une application PHP qui se connecte à un serveur MySQL, et nous souhaitons sécuriser les connexions entre les serveurs web et d'application et la base de données.

Aux heures de pointe, les serveurs Web établissent plusieurs centaines de connexions simultanées à la base de données et effectuent de nombreuses petites lectures et écritures. Je suis conscient que ce n'est pas optimal et je travaille à réduire le nombre de connexions à la base de données en parallèle.

Nous n'avons pas de connexions persistantes à la base de données actuellement activées, et bien que nous ayons l'intention de le faire à l'avenir, j'aimerais l'implémenter indépendamment de cela.

Côté matériel - le serveur MySQL est assez volumineux (16 cœurs) tout comme les serveurs Web. Ce sont des serveurs dédiés.

Ma question concerne ensuite la manière la plus performante de sécuriser et de crypter les connexions au serveur de base de données.

Jusqu'à présent, mes recherches ont suggéré que la principale surcharge de performances concerne la configuration de la connexion SSL - une fois SSL connecté, il y a peu de pénalité en termes de performances. Et voici ce que j'ai sur chaque méthode de sécurisation de la connexion:

  1. Certificats SSL MySQL - fonctionne exactement comme SSL standard. Peut utiliser des certificats clients pour empêcher les connexions non autorisées. Aucune connexion persistante avec notre configuration existante. Il faut encore que MySQL écoute sur un port ouvert du pare-feu.
  2. stunnel. Configurez un tunnel port à port ssl. Vous n'avez pas à reconfigurer MySQL. Peut fermer le port d'écoute MySQL normal pour empêcher les tentatives de connexion MySQL malveillantes. Ne prend pas en charge les connexions persistantes. Coup de performance inconnu.
  3. Tunneling SSH. Créez un tunnel SSH entre le client et le serveur. Vous n'avez pas à reconfigurer MySQL. Peut fermer le port d'écoute MySQL normal pour empêcher les tentatives de connexion MySQL malveillantes. Prend en charge les connexions persistantes, mais celles-ci tombent parfois en panne. Coup de performance inconnu.

C'est tout ce que j'ai pu obtenir. Je suis conscient des limites des benchmarks - dans mon expérience de leur exécution, il est très difficile de simuler le trafic dans le monde réel. J'espérais que quelqu'un aurait des conseils basés sur ses propres expériences de sécurisation de MySQL?

Merci

dastra
la source
Quel type d'architecture serveur / réseau avez-vous? Quel genre de scénario essayez-vous d'empêcher? Si toutes vos communications de serveur à serveur se font sur un commutateur / VLAN séparé, vous n'avez peut-être pas besoin d'une protection anti-reniflement. En ce qui concerne les performances, exécutez openssl speedet choisissez des chiffres qui correspondent à vos besoins de protection vs compromis de performances.
Marcin
@Marcin - merci pour la pointe de vitesse openssl. Les scénarios que j'essaye d'empêcher sont les connexions non autorisées à mysql et pour crypter la communication entre les serveurs. Toute aide supplémentaire que vous pourriez apporter en comparant les trois approches serait grandement appréciée.
dastra
1
à 3) utilisez l' autossh pour réduire l'effet de décrochage. Il se reconnectera automatiquement en cas de déconnexion. Fonctionne bien ici dans beaucoup de situations.
ansi_lumen

Réponses:

5

J'irais avec le ssh-tunnel et le ferais avec autosshau lieu de ssh. À propos des performances, je dirais que le protocole SSH est hautement personnalisable et que vous pouvez affiner votre connexion si nécessaire.

Mais je ne m'attendrais pas à une surcharge notable une fois la connexion établie.

ansi_lumen
la source
3

En consultant les références de cet article (MySQL Performance Blog), vous devriez vraiment éviter la capacité SSL native de MySQL.

Nicolas BADIA
la source