Conexión segura a MySQL: SSL de MySQL vs Stunnel vs SSH Tunneling

15

Tenemos una aplicación PHP que se conecta a un servidor MySQL, y deseamos asegurar las conexiones entre los servidores web y de aplicaciones y la base de datos.

En las horas pico, los servidores web realizan cientos de conexiones simultáneas a la base de datos y realizan muchas lecturas y escrituras pequeñas. Sé que esto no es óptimo, y estoy trabajando para reducir el número de conexiones de bases de datos en paralelo a esto.

Actualmente no tenemos conexiones persistentes a la base de datos activadas, y aunque tenemos la intención de hacerlo en el futuro, me gustaría implementar esto independientemente de eso.

En cuanto al hardware: el servidor MySQL es bastante grueso (16 núcleos) al igual que los servidores web. Son servidores dedicados.

Mi pregunta luego rodea la forma más eficaz de asegurar y cifrar las conexiones al servidor de la base de datos.

Mi investigación hasta ahora ha sugerido que la sobrecarga de rendimiento principal es con la configuración de la conexión SSL: una vez que se conecta SSL, hay poca penalización de rendimiento. Y esto es lo que tengo sobre cada método para asegurar la conexión:

  1. Certificados SSL de MySQL: funciona igual que SSL normal. Puede usar certificados de cliente para evitar conexiones no autorizadas. No hay conexiones persistentes con nuestra configuración existente. Todavía tengo que tener MySQL escuchando en un puerto abierto en el firewall.
  2. aturdimiento Configure un puerto a puerto del túnel SSL. No tiene que reconfigurar MySQL. Puede cerrar el puerto de escucha normal de MySQL para evitar intentos de conexión de MySQL maliciosos. No admite conexiones persistentes. Golpe de rendimiento desconocido.
  3. Túneles SSH. Cree un túnel SSH entre el cliente y el servidor. No tiene que reconfigurar MySQL. Puede cerrar el puerto de escucha normal de MySQL para evitar intentos de conexión malintencionados de MySQL. Admite conexiones persistentes, pero a veces se desconectan Golpe de rendimiento desconocido.

Esto es lo más lejos que he podido llegar. Soy consciente de las limitaciones de los puntos de referencia: en mi experiencia al ejecutarlos, es muy difícil simular el tráfico del mundo real. ¿Esperaba que alguien tuviera algún consejo basado en sus propias experiencias de asegurar MySQL?

Gracias

dastra
fuente
¿Qué tipo de arquitectura de servidor / red tienes? ¿Qué tipo de escenario estás tratando de prevenir? Si toda su comunicación de servidor a servidor está en un conmutador / VLAN por separado, entonces es posible que no necesite protección anti-sniffing. En cuanto al rendimiento, ejecute openssl speedy elija cifras que se ajusten a sus necesidades de protección frente a compromiso de rendimiento.
Marcin
@ Marcin: gracias por el consejo de velocidad openssl. Los escenarios que intento evitar son conexiones no autorizadas a mysql y cifrar la comunicación entre los servidores. Cualquier otra ayuda que pueda brindar en comparación con los tres enfoques sería gratamente recibida.
dastra
1
a 3) use autossh para reducir el efecto de deserción. Se volverá a conectar automáticamente en caso de desconexión. Funciona bien aquí en muchas situaciones.
ansi_lumen

Respuestas:

5

Iría con el túnel ssh y lo haría en autosshlugar de hacerlo ssh. Sobre el rendimiento, diría que el protocolo SSH es altamente personalizable y puede ajustar su conexión, si es necesario.

Pero no esperaría una sobrecarga notable después de configurar la conexión.

ansi_lumen
fuente
3

Al mirar los puntos de referencia de este artículo (MySQL Performance Blog), realmente debe evitar la capacidad SSL nativa de MySQL.

Nicolas BADIA
fuente