“Redis es una base de datos de alto rendimiento ampliamente utilizada que es capaz de almacenar una variedad de estructuras de datos. Dado que es utilizado por las grandes aplicaciones de nivel empresarial para aprovisionar el almacenamiento en caché, los sistemas de mensajería y las capacidades de la base de datos, los aspectos de cifrado de seguridad y de datos son igualmente importantes ya que el rendimiento es el rendimiento. Durante la última década, ha habido una tendencia creciente en ataques maliciosos que se han activado contra bases de datos para revelar información confidencial o alterar los datos. Entonces, el riesgo es el mismo con las aplicaciones que usan Backends redis.
Redis está diseñado fundamentalmente para conexiones autorizadas dentro de entornos confiables. Por lo tanto, se recomienda no exponer el puerto de la base de datos Redis al público en general o en Internet y las redes no confiables. En la mayoría de los casos en que las aplicaciones web generan contenido al consultar la tienda Redis y presionar los datos en función de las solicitudes del cliente, es obligatorio implementar una capa intermedia para restringir o filtrar las solicitudes de los clientes que se encuentran a través de las aplicaciones web. Redis proporciona una variedad de medidas de cifrado y seguridad, como listas de control de acceso (ACL), soporte de TLS y cifrado en reposo para proteger los datos."
Permitir el tráfico confiable con Redis Authentication & ACL (listas de control de acceso)
Como se mencionó, por diseño, Redis no es seguro exponer a redes no confiables, Internet y conexiones de clientes. Si es el caso, Redis proporciona un mecanismo de autenticación de la base de datos donde los clientes deben autenticarse utilizando un nombre de usuario y contraseña. Cada usuario está asociado con un conjunto limitado de funcionalidades, claves redis y comandos. Restringiría a ciertos clientes al tener solo los permisos para ejecutar comandos de lectura, pero no los comandos de escritura. Además, el ACL se usa para restringir comandos de alto riesgo como Flushall y FlushDB de fuentes no confiables. Además, Redis tiene una variedad de comandos de configuración introducidos para administrar la instancia de Redis tanto en las configuraciones locales como en la nube. Estos comandos de configuración no son muy útiles para los consumidores. Entonces, ACL logra ocultar esos comandos del público también.
Autenticación
Por lo general, el archivo de configuración de Redis contiene una línea llamada requería que se puede utilizar para habilitar la autenticación de contraseña para una instancia de base de datos Redis dada. Con esta opción habilitada, los clientes no autenticados no obtendrán acceso a la base de datos en absoluto. El comando de autenticación se utiliza para autenticar a los usuarios en las bases de datos Redis. Se extiende desde Redis versión 6, que se puede usar con dos parámetros de la siguiente manera.
Auténtico
Inspeccionar el ACL para una instancia de Redis
Redis ACLS se puede inspeccionar utilizando el comando de la lista ACL, como se muestra en el siguiente. En general, muestra información detallada relacionada con un usuario, como un nombre de usuario, estado de contraseña (requerido o no), claves de acceso, comandos y canales pub/subs.
Lista de ACL
La salida anterior se puede interpretar de la siguiente manera.
Hay diferentes reglas de ACL disponibles para crear usuarios correctos con niveles de acceso mínimos a la instancia de la base de datos de Redis. El comando ACL setUser se puede usar para configurar diferentes usuarios con diferentes niveles de acceso.
Encrypt Datos transferidos utilizando Redis TLS
De Redis versión 6, SSL/TLS ha sido compatible. Cifra los datos enviados a través de todos los canales de comunicación Redis, como conexiones de cliente, conexiones de clúster, centinelas y enlaces de replicación. Además, el Redis SSL/TLS debe habilitarse en el momento de la compilación.
Por defecto, los servidores Redis se ejecutan en modo normal, que no admite el cifrado SSL/TLS. Por lo tanto, debe iniciar explícitamente la instancia de Redis en modo TLS, como se muestra en lo siguiente.
Redis-server--TLS-Port 6379 --port 0--TLS-Cert-File ./reditls/tls/redis.CRT--TLS-Key-File ./reditls/tls/redis.clave--TLS-CA-CERT-File ./Reditls/TLS/CA.CRT
Asumimos que todos los certificados y claves SSL están disponibles. Del mismo modo, para iniciar una conexión de cliente, debemos usar el indicador -TLS junto con las teclas y certificados SSL necesarios de la siguiente manera.
redis-cli--tls --cert ./reditls/tls/redis.CRT -Key ./reditls/tls/redis.Clave -Cacert ./Reditls/TLS/CA.CRT
Además, la instancia de Redis debe configurarse con una x.Certificado 509 y clave privada también.
Cifrado SSL/TLS en la comunicación de replicación, centinela y clúster
Replicación
En Redis, cuando la replicación está habilitada, la instancia maestra usa el TLS-Port y TLS-Auth-Clientes Opciones para que los clientes conozcan el puerto que acepta conexiones TLS y si la autenticación del cliente es necesaria o no. Del mismo modo, en instancias de réplica, se recomienda utilizar el cifrado SSL/TLS para conexiones salientes hacia instancias maestras. En ese caso, el TLS-REPLICACIÓN la opción debe establecerse en Sí.
Centinela
Cada vez que el Redis Sentinel ha sido habilitado para las necesidades de alta disponibilidad, el TLS-REPLICACIÓN La opción decide si la conexión TLS o no TLS debe usarse al conectarse a los servidores maestros. Del mismo modo, la misma directiva gobierna las conexiones entrantes de otros centinelas están habilitados o no SSL/TLS. Si el TLS-REPLICACIÓN Directive Sets to sí, el TLS-Port La opción también debe asignarse con el puerto apropiado.
Grupo
Cuando los grupos se usan en Redis, se recomienda proporcionar canales de comunicación seguros para buses de clúster y enlaces de clúster clúster. Redis proporciona el TLS-Cluster Directiva para determinar el soporte para el cifrado SSL/TLS entre los nodos de clúster. Esta directiva debe establecerse en Sí Cuando necesita una conexión TLS para enviar datos de un nodo a otro.
Cifrado en reposo
Redis se implementa tanto en los entornos locales como en la nube. En las implementaciones de la nube, la comunicación REST siempre está encriptada. Los principales proveedores de la nube, como las implementaciones de redis de provisión AWS, Azure y GCP, a través de canales cifrados. Además, Amazon Cloud proporciona funciones de cifrado en tránsito que se enumeran a continuación.
Conclusión
En resumen, Redis no está diseñado para exponer su puerto TCP a conexiones de clientes no confiables en entornos poco confiables. Por diseño, se ha desarrollado solo para fuentes de confianza. Como se mencionó, en el caso de Redis expuesto al público a través de una aplicación web, se debe implementar una capa de seguridad adicional entre las conexiones del cliente y la instancia de Redis. Según este artículo, Redis admite listas de control de acceso (ACLS), soporte de TLS y cifrado en reposo para mitigar los ataques maliciosos. Además, hemos discutido el soporte SSL/TLS para el clúster Redis, la réplica y la comunicación centinela también. En general, se recomienda practicar las técnicas anteriores siempre que la instancia de Redis esté expuesta al público.