Tutorial

[Guía de inicio rápido] sobre cómo instalar y proteger Redis en Ubuntu 20.04

UbuntuNoSQLRedisQuickstartDatabasesUbuntu 20.04

Introducción

Redis es un sistema de almacenamiento claves-valores en memoria conocido por su flexibilidad, su rendimiento y su amplia compatibilidad con varios idiomas. En este tutorial de inicio rápido, se muestra cómo instalar, configurar y proteger Redis en un servidor de Ubuntu 20.04.

Requisitos previos

Para completar esta guía, necesitará acceso a un servidor de Ubuntu 20.04 que tenga un non-root user con privilegios sudo y un firewall configurado con ufw. Puede establecerlos siguiendo nuestra Guía de configuración inicial del servidor para Ubuntu 20.04.

Paso 1: Instalar y configurar Redis

Comience actualizando el caché de paquetes apt local:

  • sudo apt update

A continuación, escriba lo siguiente para instalar Redis:

  • sudo apt install redis-server

Luego, abra el archivo de configuración de Redis con el editor de texto que prefiera:

  • sudo nano /etc/redis/redis.conf

Dentro del archivo, encuentre la directiva supervised que le permite declarar un sistema init para administrar Redis como un servicio. Debido a que se está ejecutando Ubuntu, el cual utiliza el sistema init systemd, cambie el valor no a systemd:

/etc/redis/redis.conf
. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd

. . .

Guarde y cierre el archivo cuando termine. Si utilizó nano para editar el archivo, hágalo pulsando CTRL + X, Y y, luego, ENTER.

A continuación, reinicie el servicio de Redis para reflejar los cambios realizados en el archivo de configuración:

  • sudo systemctl restart redis.service

Para comprobar que Redis funcione de forma correcta, establezca conexión con el servidor utilizando redis-cli, el cliente de línea de comandos de Redis:

  • redis-cli

En la siguiente línea de comandos, realice una prueba de conectividad con el comando ping:

  • ping
Output
PONG

Este resultado confirma que la conexión del servidor está activa. A continuación, asegúrese de poder configurar las claves ejecutando lo siguiente:

  • set test "It's working!"
Output
OK

Recupere el valor ingresando lo siguiente:

  • get test

Suponiendo que todo funciona, podrá recuperar el valor almacenado:

Output
"It's working!"

Una vez que confirme que puede obtener el valor, cierre la línea de comandos de Redis para volver al shell:

  • exit

Paso 2: Configurar una contraseña de Redis

Puede configurar una contraseña de Redis directamente en el archivo de configuración de /etc/redis/redis.conf. Abra ese archivo de nuevo con su editor preferido:

  • sudo nano /etc/redis/redis.conf

Desplácese a la sección SECURITY y busque una directiva comentada que diga:

/etc/redis/redis.conf
. . .
# requirepass foobared
. . .

Elimine el # para quitar los comentarios y cambie foobared por una contraseña segura.

/etc/redis/redis.conf
. . .
requirepass your_redis_password
. . .

Guarde y cierre el archivo después de configurar la contraseña, luego reinicie Redis:

  • sudo systemctl restart redis.service

Para probar que la contraseña funciona, abra el cliente de Redis:

  • redis-cli

A continuación se muestra una secuencia de comandos utilizados para comprobar que la contraseña de Redis funciona. El propósito del primer comando es configurar una clave para un valor antes de la autenticación:

  • set key1 10

No funcionará ya que no se autenticó, de forma que Redis muestra un error:

Output
(error) NOAUTH Authentication required.

El siguiente comando se autentica con la contraseña especificada en el archivo de configuración de Redis:

  • auth your_redis_password

Redis lo reconoce:

Output
OK

Después de eso, tendrá éxito al ejecutar de nuevo el comando anterior:

  • set key1 10
Output
OK

get key1 consulta a Redis por el valor de la nueva clave.

  • get key1
Output
"10"

Después de confirmar que es capaz de ejecutar comandos en el cliente de Redis tras la autenticación, puede salir de redis-cli:

  • quit

Paso 3: Renombrar comandos peligrosos

La característica adicional de seguridad incorporada en Redis implica renombrar o desactivar algunos comandos considerados peligrosos. Algunos de los comandos considerados peligrosos: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME, y DEBUG. Desactivar o renombrar estos y otros comandos hace que sea más difícil para los usuarios no autorizados volver a configurar, destruir o eliminar de otra manera sus datos.

Para renombrar o desactivar comandos de Redis, vuelva a abrir el archivo de configuración:

  • sudo nano /etc/redis/redis.conf

Advertencia: Los siguientes pasos para desactivar y renombrar comandos son ejemplos. Sólo debe optar por desactivar o renombrar los comandos que le resulten pertinentes. Puede revisar la lista completa de comandos y determinar cómo pueden ser utilizados indebidamente en redis.io/commands.

Para desactivar un comando, simplemente renómbrelo de modo que pase a ser una cadena vacía (simbolizado por un par de comillas sin caracteres entre ellos), como se muestra a continuación:

/etc/redis/redis.conf
. . .
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
. . .

Para renombrar un comando, asígnele otro nombre como se muestra en los ejemplos siguientes. Los comandos renombrados deben ser difíciles de adivinar para otros, pero fáciles de recordar para usted.

/etc/redis/redis.conf
. . .
# rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
. . .

Guarde los cambios y cierre el archivo.

Después de renombrar un comando, aplique el cambio reiniciando Redis:

  • sudo systemctl restart redis.service

Para probar el nuevo comando, ingrese la línea de comandos de Redis:

  • redis-cli

A continuación, autentique:

  • auth your_redis_password
Output
OK

Suponiendo que cambió el nombre del comando CONFIG a ASC12_CONFIG como se muestra en el ejemplo anterior, intente usar el comando CONFIG original. Debido a que lo renombró, no debe funcionar:

  • config get requirepass
Output
(error) ERR unknown command `config`, with args beginning with:

Sin embargo, se podrá llamar al comando renombrado con éxito. No distingue entre mayúsculas y minúscula:

  • asc12_config get requirepass
Output
1) "requirepass" 2) "your_redis_password"

Conclusión

En este tutorial de inicio rápido, instaló y configuró Redis, validó el funcionamiento correcto de la instalación de Redis y utilizó sus funciones de seguridad integradas para que sea menos vulnerable a los ataques de agentes malintencionados.

Creative Commons License