Redis es un potente almacén de clave-valor en memoria que se puede utilizar como servidor de base de datos, caché y agente de mensajería. Es ampliamente conocido por su rápido rendimiento, flexibilidad y soporte para una amplia variedad de lenguajes. Es un software libre y de código abierto escrito en el lenguaje de programación C. En esta guía, descubre cómo instalar y proteger Redis en Ubuntu 18.04.
Requisitos previos
Para seguir esta guía, necesitarás preparar un par de cosas con antelación. Necesitas tener un servidor Ubuntu 18.04, que puedes instalar fácilmente siguiendo nuestro tutorial. Además, necesitas tener un usuario no root con privilegios sudo y un cortafuegos básico configurado. Puedes configurarlo siguiendo nuestras guías sobre la configuración del archivo sudoers de Linux y la configuración de un UFW en un servidor en la nube Ubuntu y Debian.
¡Ahora, empecemos!
Instalación de Redis
Redis está disponible directamente desde el repositorio oficial de Ubuntu. Esta es la forma más sencilla de instalarlo y configurarlo. Recomendamos seguir este camino a menos que haya razones específicas para no hacerlo. Dado que el código fuente de Redis está disponible de forma gratuita, también es posible compilar Redis desde el código fuente. Sin embargo, no lo recomendamos porque es más problemático de administrar y actualizar.
Instalar Redis desde el repositorio de Ubuntu
Primero, actualiza la caché local de paquetes APT:
|
1 |
sudo apt update |
A continuación, instala Redis con el siguiente comando:
|
1 |
sudo apt install redis-server |
Instalar Redis desde el código fuente
Ubuntu no viene con las herramientas de compilación y las bibliotecas necesarias por defecto. El siguiente comando instalará todas las herramientas necesarias para compilar Redis:
|
1 |
sudo apt install git build-essential |
Hay dos dependencias adicionales para compilar Redis. Estas dependencias son necesarias para compilar Redis con características adicionales, por ejemplo, soporte TLS, integración con systemd, etc. Para compilar Redis con soporte TLS, instala el paquete “libssl-dev”. Para compilar Redis con soporte para systemd, instala el paquete “libsystemd-dev”:
|
1 |
sudo apt install libssl-dev libsystemd-dev |
El código fuente de Redis está disponible en GitHub. Echa un vistazo a la página de GitHub de Redis. A continuación, obtén el código fuente:
|
1 |
git clone https://github.com/redis/redis.git |
Cambia el directorio activo actual al directorio del código fuente de Redis:
|
1 |
cd redis/ |
Después de eso, ejecuta la herramienta make para comenzar a compilar. Compilará Redis sin ningún elemento adicional:
|
1 |
make -j$(nproc) |
Para habilitar el soporte TLS (asumiendo que “libssl-dev” está instalado), usa el siguiente comando en su lugar:
|
1 |
make -j$(nproc) BUILD_TLS=yes |
Para habilitar el soporte para systemd (asumiendo que “libsystemd-dev” está instalado), usa el siguiente comando:
|
1 |
make -j$(nproc) USE_SYSTEMD=yes |
A continuación, comprueba si la compilación se ha realizado correctamente. Ten en cuenta que puede requerir un paquete adicional “tcl-dev” y las dependencias asociadas para ejecutar la prueba:
|
1 |
make test |
Finalmente, instala Redis ejecutando el siguiente comando:
|
1 |
sudo make install |
Si Redis se compiló usando TLS, entonces la ejecución del servidor tendrá que hacerse de la siguiente manera:
|
1 2 |
./utils/gen-test-certs.sh ./runtest --tls |
Configuración de Redis
Una vez completada la instalación, es hora de configurar Redis. Abre el archivo de configuración de Redis en un editor de texto y desplázate hacia abajo hasta la sección “supervised”:
|
1 |
sudo vim /etc/redis/redis.conf |
Cambia el valor de “supervised” a “systemd”. Esto asegurará que el servicio Redis sea administrado por sistemas. Para que los cambios surtan efecto, reinicia el servicio Redis:
|
1 |
sudo systemctl restart redis.service |
Prueba de Redis
Siempre es una buena idea probar si Redis funciona correctamente antes de seguir usándolo. Aquí tienes varias formas de probar el comportamiento de Redis. El primer paso es comprobar si el servicio Redis está activo y funcionando:
|
1 |
sudo systemctl status redis |
Aquí, Redis ya se está ejecutando. De forma predeterminada, el servicio Redis se iniciará al arrancar. Si el servicio Redis se va a ejecutar manualmente, desactívelo:
|
1 |
sudo systemctl disable redis |
La siguiente prueba es verificar usando la consola de Redis. Inicie el cliente de línea de comandos de Redis:
|
1 |
redis-cli |
Ejecute el comando “ping”:
|
1 |
ping |
La salida confirma que la conexión al servidor sigue activa. La siguiente prueba es ver si permite establecer claves. Cree una clave “temp” con el valor “hello world”:
|
1 |
set temp “hello world” |
Recupere el valor usando el comando “get”:
|
1 |
get temp |
Si todo está funcionando bien hasta ahora, Redis debería devolver el valor de la clave sin ningún problema. Cierre el cliente de línea de comandos de Redis:
|
1 |
exit |
La prueba final es verificar si Redis puede persistir los datos incluso si se detiene o se reinicia. Reinicie el servicio Redis:
|
1 |
sudo systemctl restart redis |
Si obtiene un error al ejecutar el comando anterior, use el comando “systemctl enable redis-server”:
|
1 |
sudo systemctl enable redis-server |
Inicie el cliente de línea de comandos de Redis y recupere el valor de la clave “temp” que creamos antes:
|
1 2 |
redis-cli get temp |
Esto concluye las pruebas de Redis. Su servidor Redis ahora está listo para ser utilizado para el propósito deseado.
Asegurar Redis
En este punto, Redis está completamente operativo. Sin embargo, algunas de sus configuraciones predeterminadas no ofrecen la mejor seguridad. Si no se actualizan, cualquier actor malicioso puede aprovechar la oportunidad para obtener acceso al servidor y a sus datos. Esta sección mostrará cómo mitigar estas vulnerabilidades. Aunque estos pasos son opcionales, se recomienda encarecidamente seguirlos para reforzar la seguridad del sistema.
Vincular a localhost
De forma predeterminada, Redis solo es accesible desde localhost. Sin embargo, si Redis se configuró en un servidor remoto, la configuración debe actualizarse para permitir la conexión desde cualquier lugar. No obstante, puede que no sea tan seguro como vincularlo a localhost. Para volver a vincular Redis a localhost, abra el archivo de configuración de Redis en un editor de texto:
|
1 |
sudo vim /etc/redis/redis.conf |
Desplácese hacia abajo y busque la siguiente. Asegúrese de que no esté comentada:
|
1 |
bind 127.0.0.1 ::1 |
Guarde y cierre el archivo. Luego, reinicie el servicio Redis para asegurarse de que el cambio tenga efecto de inmediato:
|
1 |
sudo systemctl restart redis |
Verifique que el cambio se haya realizado correctamente:
|
1 |
sudo netstat -lnp | grep redis |
Si obtiene un error como ‘netstat: command not found’, use el comando para instalar net-tools “sudo apt-get install net-tools”. La salida verifica que “redis-server” se ha vinculado correctamente a localhost (127.0.0.1), lo que refleja el cambio realizado recientemente. Si hay alguna otra dirección IP (por ejemplo, 0.0.0.0), vuelva a verificar el archivo de configuración y reinicie el servidor Redis nuevamente.
Configuración de la contraseña de Redis
Configurar una contraseña permite el uso de una función de seguridad integrada de Redis – el comando “AUTH”. Requiere que los clientes se autentiquen para acceder a la base de datos. De forma predeterminada, Redis no tiene ninguna contraseña configurada. La contraseña debe declararse en el archivo de configuración de Redis. Abra el archivo de configuración en un editor de texto:
|
1 |
sudo vim /etc/redis/redis.conf |
Luego, desplácese hacia abajo hasta la siguiente línea y descoméntela:
|
1 |
requirepass foobared |
Después de descomentar, “foobared” será la contraseña predeterminada. Cámbiela por la contraseña de su elección. Cuando se trata de Redis, la seguridad de la contraseña es un factor de gran preocupación. Dado que Redis es un servidor de alto rendimiento, es potencialmente más fácil de explotar mediante ataques de fuerza bruta. Es por eso que el archivo de configuración contiene directamente la siguiente advertencia. Aquí tiene un ejemplo rápido de cómo generar una contraseña aleatoria muy segura. Usaremos el comando OpenSSL para generar una cadena aleatoria:
|
1 |
echo $(openssl rand 60 | openssl base64 -A) |
Después de configurar una nueva contraseña, reinicie el servicio Redis para que los cambios surtan efecto:
|
1 |
sudo systemctl restart redis.service |
Es hora de probar si la contraseña se ha aplicado correctamente. Inicie la consola de línea de comandos de Redis:
|
1 |
redis-cli |
A continuación, intente establecer una nueva clave:
|
1 |
set user “cloudsigma” |
Redis rechazará la solicitud ya que no hay autenticación para la acción. Para realizar cualquier acción en el servidor, el usuario debe estar autorizado primero. Autorice al usuario utilizando el siguiente comando:
|
1 |
auth <contraseña> |
Si la contraseña era correcta, Redis reconocerá la acción. Ahora, Redis permitirá el acceso a las funcionalidades de su servidor:
|
1 2 |
set user “cloudsigma” get user |
Por ahora, nuestro trabajo con la consola de Redis ha terminado. Puede cerrar la consola:
|
1 |
exit |
Renombrar comandos peligrosos
Redis permite renombrar o desactivar por completo ciertos comandos que se consideran peligrosos. Esta es otra característica de seguridad integrada importante de Redis. ¿Por qué se consideran peligrosos los comandos? Si los ejecuta un usuario no autorizado, estos comandos pueden reconfigurar, destruir o borrar datos en el servidor. Es una práctica común desactivar/renombrar un grupo de comandos peligrosos de Redis. Tenga en cuenta que la amenaza de seguridad de un comando depende de la situación. Por ejemplo, algunos de los siguientes comandos pueden ser necesarios de forma regular. En tales casos, no se recomienda desactivarlos. En esa situación, renombrar el comando puede resultar más beneficioso. Aquí tiene una lista rápida de los comandos que se consideran peligrosos. Este es un buen punto de partida para mejorar la seguridad del servidor Redis:
- FLUSHDB
- FLUSHALL
- KEYS
- PEXPIRE
- DEL
- CONFIG
- SHUTDOWN
- BGREWRITEAOF
- BGSAVE
- SAVE
- SPOP
- SREM
- RENAME
- DEBUG
Para renombrar o desactivar un comando, este debe declararse en el archivo de configuración de Redis. Abra el archivo de configuración de Redis y agregue las siguientes líneas. Aquí, se utiliza “rename-command” para renombrar los comandos a una cadena vacía. Agregue tantas entradas como sea necesario:
|
1 |
sudo vim /etc/redis/redis.conf |
|
1 2 3 4 |
$ rename-command FLUSHDB "" $ rename-command FLUSHALL "" $ rename-command SHUTDOWN "" $ rename-command CONFIG "" |
Del mismo modo, también es posible renombrar los comandos con un nombre diferente. En ciertas situaciones, esto puede ofrecer más flexibilidad:
|
1 2 3 4 |
$ rename-command FLUSHDB "command_1" $ rename-command FLUSHALL "command_2" $ rename-command SHUTDOWN "command_3" $ rename-command CONFIG "command_4" |
Guarde el archivo y salga del editor. Para que los cambios surtan efecto, reinicie el servicio Redis:
|
1 |
sudo systemctl restart redis.service |
Verifique los cambios. A continuación, inicie la consola de Redis y autentique el acceso:
|
1 2 |
redis-cli auth <contraseña> |
Supongamos que el comando “CONFIG” fue desactivado o renombrado. Intente usar el siguiente comando “CONFIG”. Fallará:
|
1 |
config get requirepass |
Si el comando fue desactivado, entonces no se podrá acceder a él hasta que se vuelva a activar. Sin embargo, si fue renombrado, use el nuevo alias:
|
1 |
command_4 get requirepass |
Conclusión
Este tutorial demuestra cómo instalar, asegurar, configurar y validar una instalación de Redis. También demuestra cómo utilizar las características de seguridad integradas de Redis para hacerlo menos vulnerable a los ataques. Sin embargo, si alguien ya ha iniciado sesión en el servidor, es bastante fácil eludir las características de seguridad específicas de Redis. Por eso es crucial contar con un cortafuegos para proteger el acceso al servidor Redis.
¡Feliz informática!






Comentarios
Aún no hay comentarios. Sea el primero.