Cómo Asegurar Instalaciones de Redis: Consejos Esenciales de Configuración

Asegura Redis con enlace de red, modo protegido, ACL o contraseñas, acceso seguro a comandos, reglas de firewall, privilegio mínimo y TLS.

Cómo proteger instalaciones de Redis: consejos de configuración esenciales

Redis es rápido, simple y a menudo confiado por el código de la aplicación con datos de sesión, colas, contadores y registros en caché. Esto hace que la seguridad de Redis sea importante: una instancia expuesta puede permitir que un atacante lea datos, elimine claves con FLUSHALL o abuse de comandos administrativos.

Tu objetivo es hacer que Redis sea accesible solo desde los sistemas que lo necesitan, requerir autenticación, reducir el acceso a comandos peligrosos y proteger los archivos que contienen la configuración y los datos persistentes.


1. Configuración de red: limitando la exposición

La medida de seguridad más inmediata es controlar en qué interfaces de red Redis escucha. Muchas instalaciones empaquetadas de Redis se vinculan a localhost por defecto, pero las imágenes de contenedores, archivos de configuración personalizados e implementaciones más antiguas pueden diferir. Siempre verifica tu redis.conf activo en lugar de asumir que el valor predeterminado es seguro.

Vinculación a interfaces específicas (bind)

Debes configurar Redis para que solo escuche en las interfaces necesarias. En la mayoría de los entornos de producción, esto significa vincular solo a la dirección de loopback o a una dirección IP privada específica utilizada por los servidores de aplicaciones.

Solo acceso interno o local

Si tu servidor de aplicaciones reside en el mismo host que Redis, vincúlate exclusivamente a la dirección de loopback.

# Fragmento de configuración de redis.conf
bind 127.0.0.1

Acceso privado en red

Si tus servidores de aplicaciones están en un segmento de red privado y necesitan acceso a la red, vincúlate a esa dirección IP privada específica. No vincules Redis a una IP pública orientada a Internet. Si necesitas acceso remoto, colócalo en una red privada y restringe el tráfico con reglas de firewall o grupos de seguridad.

# Lista las direcciones IP internas específicas que deben acceder a Redis
bind 192.168.1.100 10.0.0.5

Comprendiendo el modo protegido

Desde Redis 3.2, el modo protegido está habilitado por defecto en las compilaciones estándar de Redis. Ayuda a bloquear el acceso externo cuando Redis no está configurado explícitamente para clientes remotos. Trátalo como una red de seguridad, no como tu control principal. Usa restricciones de vinculación, autenticación y reglas de firewall.

Si debes deshabilitarlo para una configuración específica, puedes usar:

protected-mode no

Advertencia: Solo deshabilita protected-mode cuando hayas configurado correctamente bind, autenticación y filtrado de red.

2. Autenticación y control de acceso

Una vez que se restringe el acceso a la red, la siguiente capa de defensa es la autenticación. Los clientes solo deberían poder interactuar con Redis si proporcionan una contraseña válida o, preferiblemente, usan el sistema moderno de Lista de Control de Acceso (ACL).

Implementando protección con contraseña (requirepass)

Usa la directiva requirepass en tu archivo redis.conf para exigir autenticación del cliente. Esto actúa como un secreto compartido global para seguridad básica.

# Establece una contraseña fuerte y única
requirepass T4h!S_Is_V3ry_S3cure_P@ss

Para conectarse usando una contraseña, los clientes deben usar el comando AUTH:

# Ejemplo usando redis-cli
$ redis-cli
127.0.0.1:6379> AUTH T4h!S_Is_V3ry_S3cure_P@ss
OK
127.0.0.1:6379> PING
PONG

Seguridad avanzada: Listas de Control de Acceso (ACL) de Redis

Para entornos de producción que ejecutan Redis 6.0 y posteriores, las ACL son el método de autenticación preferido. Las ACL te permiten definir múltiples usuarios con contraseñas específicas y permisos granulares (por ejemplo, el Usuario A solo puede leer, el Usuario B puede escribir en espacios de claves específicos).

La configuración de ACL generalmente implica definir usuarios y sus reglas en redis.conf o en un archivo ACL separado:

# Definiciones de ejemplo de usuarios ACL en redis.conf o un archivo aclfile
user default off
user app_reader on >app_read_P@ss ~cache:* +get +scan
user app_writer on >app_write_P@ss ~data:* +set +del

Renombrar o deshabilitar comandos peligrosos

Ciertos comandos administrativos (como FLUSHALL, CONFIG, KEYS y SHUTDOWN) pueden causar interrupciones operativas o exponer detalles de configuración sensibles si se usan incorrectamente. Es una buena práctica renombrar estos comandos con nombres oscuros o deshabilitarlos por completo.

Para renombrar un comando, usa rename-command:

# Renombrar el comando CONFIG para evitar cambios no autorizados
rename-command CONFIG HIDE_MY_CONFIG

# Deshabilitar FLUSHALL por completo
rename-command FLUSHALL ""

3. Mejores prácticas de seguridad operativa

Más allá de la configuración interna de Redis, aplicar medidas sólidas de seguridad operativa externa es crucial para una postura de seguridad completa.

Aplicar reglas de firewall estrictas

Independientemente de la configuración de la directiva bind, siempre aplica filtrado de red usando grupos de seguridad en la nube, iptables o soluciones de firewall similares. El puerto predeterminado de Redis (6379) solo debe estar abierto a las direcciones IP específicas o rangos de IP de tus servidores de aplicaciones de confianza.

Ejemplo de regla de firewall (Linux/iptables)

Permitir tráfico entrante en el puerto 6379 solo desde una dirección IP de servidor de aplicaciones conocida (192.168.1.50):

# Permitir servidor de aplicaciones específico
iptables -A INPUT -p tcp -s 192.168.1.50 --dport 6379 -j ACCEPT

# Denegar otro tráfico Redis entrante
iptables -A INPUT -p tcp --dport 6379 -j DROP

Ejecutar con privilegio mínimo

Nunca ejecutes el proceso del servidor Redis como usuario root. Si un atacante compromete el proceso de Redis, ejecutarlo como root les otorga control total sobre todo el sistema operativo.

Crea un usuario de sistema dedicado y no privilegiado, como redis, luego configura tu administrador de servicios para ejecutar el proceso de Redis como ese usuario. Con systemd, esto normalmente se maneja en el archivo de unidad con directivas como User=redis y Group=redis, o mediante el servicio empaquetado que proporciona tu distribución.

Proteger archivos de configuración y persistencia

El archivo redis.conf contiene información sensible como la contraseña requirepass y la configuración de red. Asegúrate de que este archivo, junto con los archivos de persistencia (instantáneas RDB y registros AOF), esté protegido con permisos de archivo restrictivos, evitando la lectura o modificación no autorizada por parte de otros usuarios del sistema.

# Ejemplo de permisos recomendados
# Solo el usuario 'redis' y root deben poder leer/escribir
chown redis:redis /etc/redis/redis.conf
chmod 600 /etc/redis/redis.conf

Implementar cifrado SSL/TLS

Para entornos donde el tráfico de Redis atraviesa un segmento de red no confiable (incluso internamente), implementa cifrado SSL/TLS. Aunque Redis históricamente carecía de soporte TLS nativo, las versiones modernas (a partir de Redis 6) lo admiten completamente. Configurar TLS requiere generar certificados y establecer directivas relevantes en redis.conf:

# Habilitar listener TLS
tls-port 6379
port 0
tls-auth-clients yes
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
tls-ca-cert-file /etc/redis/tls/ca.crt

port 0 deshabilita el listener de texto plano. Mantén un puerto de texto plano solo cuando cada cliente que lo use esté en una ruta local confiable y tengas una razón clara.

Resumen de pasos de seguridad esenciales

Asegurar una instalación de Redis es un trabajo en capas. Comienza con la exposición, luego la autenticación, luego los controles operativos:

  1. Restringir el acceso a la red: Usa bind 127.0.0.1 o IPs privadas específicas.
  2. Exigir autenticación: Usa requirepass (básico) o ACL (avanzado).
  3. Endurecer comandos: Deshabilita o renombra comandos administrativos peligrosos (FLUSHALL, CONFIG).
  4. Usar firewalls: Solo permite tráfico en el puerto 6379 desde servidores de aplicaciones de confianza.
  5. Privilegio mínimo: Ejecuta el proceso de Redis como un usuario dedicado no root.
  6. Cifrar tráfico: Habilita SSL/TLS para conexiones en red cuando sea apropiado.