2012-08-18 22 views
7

Sé que Redis Cluster aún es inestable, pero ha estado pasando todas las pruebas unitarias desde hace bastante tiempo, así que comencé a usarlo.¿Cómo asegurar Redis Cluster?

Me gustaría saber si un Redis Cluster funcionaría bien si los nodos requieren autenticación. Me inclino a pensar que sí, porque se conectan a través de un puerto diferente y usan un protocolo diferente, pero no estoy seguro y no pude encontrar ninguna documentación ni nada en el spec para confirmar esto.

Además, si el protocolo del cluster redis sobrepasa la barrera de autenticación, ¿no es un agujero en la seguridad? ¿Podría acceder a mi base de datos el mundo exterior? (el puerto al menos debe estar accesible para que pueda comunicarse con los otros nodos)

+0

El puerto probablemente debería ser accesible solo para los otros nodos que probablemente estén en la misma red local. No deberías estar abierto al mundo exterior. – seppo0010

+0

@ seppo0010 debe hacerlo si desea tener la replicación de los nodos en los centros de datos. –

+1

@ JoãoPintoJerónimo, si no puede hacerlo con, por ejemplo, Herramientas AWS, puede abrir el puerto solo desde ciertas direcciones IP. –

Respuesta

3

Si un protocolo vuela a través de Internet, necesitaría cifrado ("ssl"), por ejemplo, en centros de datos. Esto en general afectará el rendimiento. En la especificación de seguridad actual de Redis -

http://redis.io/topics/security

se aconseja que SSL no es compatible y que requeriría un proxy SSL. En general, esto debería causar un golpe de rendimiento del sistema, p. latencia que tendrías que tener en cuenta.

Por lo tanto, idealmente los nodos del clúster se deben ubicar conjuntamente. Si no pueden ser, entonces el clúster debe diseñarse de modo que limite el transporte de datos entre sitios o lo desconecte sin restricciones de tiempo real.

También he elegido deshabilitar/habilitar comandos solo para cada nodo (ver detalles en la especificación de seguridad anterior). No estoy seguro si esto es compatible con el modo de clúster o no.

+0

¿Tiene una idea del éxito de rendimiento? ¿Es realmente realmente malo? En el modo de clúster, solo tiene un subconjunto de los comandos disponibles para un servidor redis tradicional, solo los comandos que funcionan con una sola clave. Creo que la mayor comunicación entre los clusters sería para pub/sub, y que viajaría a través de un proxy SSL ... –

+0

El golpe de percusión suele ser muy subjetivo a la cantidad de datos que fluyen en el proxy ssl, qué tan fuerte es el proxy ssl etc. la mejor manera de avanzar es configurar un clúster y realizar algunas pruebas de rendimiento y capacidad. – NiladriBose

6

túnel SSH puede ser una solución fácil:

  1. No es necesario para exponer el puerto Redis con el mundo exterior. solo el ssh.
  2. Compresión de datos de soporte SSH, que puede reducir la transferencia entre centros de datos.

Ejemplo rápida: ssh -f -L 1234:localhost:6379 server.com -NC

Esta ruta voluntad cualquier conexión entrante a localhost: 1234 para la server.com:6379 remoto. Por lo tanto, puede reemplazar server.com:6379 con localhost: 1234 en su archivo de configuración redis.

Puede consultar man ssh para obtener más información.

+0

Eso solo funcionaría para Redis de nodo único, no para Clúster.De los documentos de Redis a partir de 2016: "Actualmente, Redis Cluster no es compatible con entornos NATted y en entornos generales donde las direcciones IP o los puertos TCP se reasignan". El túnel rompería el protocolo entre nodos que usa en el puerto 10000. – Ivan