Site is under maintenance mode. Please wait few min!
Saltar al contenido

Cómo asegurar Apache con Let’s Encrypt en Ubuntu 18.04

marzo 4, 2020

 

Introducción

Redis es una en memoria, NoSQL, caché de claves-valor y la tienda que también se pueden conservar en el disco. Fue diseñado para ser utilizado por los clientes de confianza en un entorno confiaba , sin una seguridad robusta cuenta propia. Para subrayar este punto, he aquí un fragmento de la página web oficial Redis:

Redis está diseñado para ser visitada por los clientes de confianza dentro de entornos de confianza. Esto significa que por lo general no es una buena idea para exponer la instancia Redis directamente a Internet o, en general, a un entorno donde los clientes no son de confianza pueden acceder directamente al puerto Redis socket TCP o UNIX.

En general, Redis no está optimizado para una máxima seguridad, pero para obtener el máximo rendimiento y simplicidad.

A pesar de esto, Redis tiene algunas características básicas de seguridad construido en él. Estos incluyen la capacidad de crear una contraseña sin cifrar y la libertad de cambiar el nombre y comandos con movilidad reducida. En particular, se carece de un sistema de control de acceso verdadera.

Estas características no pueden, por sí solos, garantizar la seguridad de su instalación Redis. Sin embargo, la configuración de ellos sigue siendo un gran paso de salir de su base de datos completamente sin garantía.

En este tutorial, usted leerá cómo configurar los pocos elementos de seguridad Redis tiene, y hacer algunos cambios en la configuración del sistema que aumentará la postura de seguridad de una instalación independiente Redis en un servidor de Ubuntu.

Tenga en cuenta que esta guía no hace dar respuesta a situaciones donde el servidor Redis y las aplicaciones cliente se encuentran en diferentes hosts o en diferentes centros de datos. Instalaciones en las que el tráfico Redis tiene que atravesar un inseguro o red que no lo requieren un conjunto totalmente diferente de configuraciones, tales como la creación de un proxy SSL o una VPN entre las máquinas Redis, además de los que se dan aquí.

Requisitos previos

Para este tutorial, necesitará:

  • Un servidor de Ubuntu 18.04. Este servidor también debe tener un usuario no root con privilegios sudo, así como un cortafuegos configurado con UFW, que se puede configurar siguiendo nuestra configuración inicial del servidor Guía para Ubuntu 18.04.
  • Redis instalado y configurado en el servidor. Puede configurar esta siguiendo esta guía para Ubuntu 18.04 servidores.

Una Ubuntu 18.04 servidor. Este servidor también debe tener un usuario no root con privilegios sudo, así como un cortafuegos configurado con UFW, que se puede configurar siguiendo nuestra configuración inicial del servidor Guía para Ubuntu 18.04.

Redis instalado y configurado en el servidor. Puede configurar esta siguiendo esta guía para Ubuntu 18.04 servidores.

Paso 1 – Verificación de que se está ejecutando Redis

En primer lugar, SSH a su servidor con su usuario no root. cheque

Para que Redis está trabajando, abrir una línea de comandos Redis con el comando Redis-CLI:

redis-cli

  • Redis-cli

Nota : Si ya ha configurado una contraseña para Redis, tiene que autentificarse con el comando de autenticación después de la conexión:

auth your_redis_password

  • auth your_redis_password

OutputOK

Si no ha establecido una contraseña para Redis, se puede leer cómo hacerlo en el paso 4 de este tutorial. Prueba

la conexión con el comando ping:

ping

  • de ping

Si Redis está funcionando correctamente, verá lo siguiente:

OutputPONG

Después de esto, salga de la línea de comandos Redis:

quit

  • dejar

ahora que ya ha confirmado que Redis está en marcha y funcionando correctamente, puede pasar a la etapa más importante para mejorar la seguridad de su servidor: configurar un servidor de seguridad.

Paso 2 – Asegurando el servidor con UFW

Redis es simplemente una aplicación que se ejecuta en el servidor. Debido a que hay pocos elementos de seguridad fundamentales de su propia, el primer paso para asegurar que realmente es para asegurar que el servidor se está ejecutando. En el caso de un servidor de cara al público como su servidor Ubuntu 18.04, la configuración de un servidor de seguridad como se describe en la configuración inicial del servidor Guía para Ubuntu 18.04 es el primer paso. seguir ese enlace y configurar el servidor de seguridad ahora si no lo ha hecho.

Si no está seguro de si se configura un servidor de seguridad o si es activa, puede comprobarlo ejecutando el siguiente:

sudo ufw status

  • sudo UFW estado

Si ha seguido el inicial Guía de configuración del servidor para Ubuntu 18.04 , verá el siguiente resultado:

OutputStatus: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)

Si ha implementado las reglas del cortafuegos usando esa guía, entonces no es necesario añadir una regla adicional para Redis, ya que, por defecto, UFW todo el tráfico entrante a menos que esté explícitamente permitido . Desde una instalación independiente predeterminado del servidor Redis está escuchando sólo en la interfaz de bucle invertido (127.0.0.1 o localhost ), no debería haber ninguna preocupación por el tráfico entrante en el puerto por defecto.

Para obtener más información sobre cómo añadir reglas, por favor ver esta guía en reglas y comandos comunes de la UFW.

Paso 3 – Encuadernación a localhost

Por defecto, Redis sólo es accesible desde localhost . Sin embargo, si ha seguido un tutorial para configurar diferentes Redis que la dada en la sección de requisitos previos, que podrían haber actualizado el archivo de configuración para permitir conexiones desde cualquier lugar. Esto no es tan segura como la unión a localhost . archivo de configuración

Abiertas las Redis para la edición:

sudo nano /etc/redis/redis.conf

  • sudo nano /etc/redis/redis.conf

localice esta línea y asegúrese de que no se encuentre comentada (quitar el # si existe):

bind 127.0.0.1

Guardar y cerrar el archivo cuando haya terminado (presione CTRL + X, Y, luego ENTER).

A continuación, reinicie el servicio para asegurar que los cambios systemd lee:

sudo systemctl restart redis

  • sudo systemctl reinicio Redis cheque

Para que este cambio ha entrado en vigor, ejecute el siguiente comando netstat:

sudo netstat -lnp | grep redis

  • sudo netstat -lnp | grep ReDiS salida muestra

Outputtcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 2855/redis-server 1

esto que el programa Redis-servidor está obligado a localhost (127.0.0.1), lo que refleja el cambio que acaba de hacer el fichero de configuración. Si ves a otra dirección IP de esa columna (0.0.0.0, por ejemplo), entonces usted debe comprobar que no comentada la línea correcta y reiniciar el servicio Redis nuevo.

Ahora que su instalación Redis solamente está escuchando en el localhost , será más difícil para los actores maliciosos para realizar solicitudes de acceso o la ganancia a su servidor. Sin embargo, Redis no está configurado para requerir que los usuarios se autentiquen antes de realizar cambios en su configuración o los datos que contiene. Para remediar esto, Redis le permite a los usuarios deben autenticarse con una contraseña antes de hacer cambios a través del cliente Redis (Redis-CLI).

Paso 4 – Configuración de una contraseña Redis

Configuración de una contraseña Redis permite a uno de sus dos características incorporadas de seguridad – el comando de autenticación, que requiere autenticación de los clientes para acceder a la base de datos. La contraseña se configura directamente en el archivo de configuración de Redis, /etc/redis/redis.conf, por lo que abrir el archivo de nuevo con su editor preferido:

sudo nano /etc/redis/redis.conf

  • sudo nano /etc/redis/redis.conf

de desplazamiento a la seguridad sección y mirada de Directiva comentado que lee:

# requirepass foobared

descomentarla quitando el #, y el cambio foobared a una contraseña segura.

Nota: Por encima de la Directiva requirepass en el archivo redis.conf, hay una advertencia comentado:

# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#

Por lo tanto, es importante que especifique un valor muy fuerte y muy larga como su contraseña. En lugar de hacer una contraseña usted mismo, puede utilizar el comando openssl para generar al azar, como en el siguiente ejemplo. La tubería para el segundo comando openssl se eliminarán todos los saltos de línea que se emiten por el primer comando:

openssl rand 60 | openssl base64 -A

  • openssl rand 60 | openssl base 64 -A

El resultado debe ser algo como:

OutputRBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

Después de copiar y pegar la salida de ese comando como el nuevo valor para requirepass, debe decir:

/etc/redis/redis.confrequirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

Después de establecer la contraseña, guardar el archivo y reinicio Redis:

sudo systemctl restart redis.service

  • sudo systemctl reinicio redis.service prueba

para que las obras de contraseñas, acceder a la línea de comandos Redis:

redis-cli

  • Redis-cli

a continuación se muestra una secuencia de comandos utilizados para comprobar si la contraseña Redis funciona. Los primeros intentos de comandos para establecer una clave a un valor antes de la autenticación:

set key1 10

  • establece key1 10

eso no funcionará debido a que no autenticar, por lo Redis devuelve un error:

Output(error) NOAUTH Authentication required.

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

auth your_redis_password

  • auth your_redis_password

Redis reconoce:

OutputOK

Después de eso, se ejecuta el comando anterior de nuevo tendrá éxito:

set key1 10
establece

  • key1 10

OutputOK

get key1 consultas Redis para el valor de la nueva clave.

get key1

  • get key1

Output"10"

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

quit

  • dejar

A continuación, vamos a ver cambiar el nombre de los comandos Redis, que, si se ha introducido por error o por un actor malicioso, podría causar graves daños a la máquina.

Paso 5 – Cambiar el nombre de comandos peligroso

La otra característica de seguridad incorporada en Redis implica el cambio de nombre o deshabilitar por completo ciertos comandos que se consideran peligrosos.

Cuando se ejecuta por error o por usuarios no autorizados, tales comandos se puede utilizar para volver a configurar, destruir, o de otra manera borrar sus datos. Al igual que la contraseña de autenticación, el cambio de nombre o desactivar los comandos está configurado en la misma sección de seguridad del archivo /etc/redis/redis.conf.

Algunos de los comandos que se consideran peligrosos incluyen: FLUSHDB , flushall , CLAVES , PEXPIRE , DEL , CONFIG , PARADA , BGREWRITEAOF , BG GUARDAR , GUARDAR , SPOP , SREM , RENAME y DEBUG . Esta no es una lista exhaustiva, pero el cambio de nombre o desactivación de todos los comandos en esa lista es un buen punto de partida para mejorar la seguridad de su servidor Redis.

si debe desactivar o cambiar el nombre de un comando depende de sus necesidades específicas o las de su sitio. Si sabe que nunca va a usar un comando que se podría abusar, entonces es posible desactivarlo. De lo contrario, podría estar en su mejor interés para cambiarle el nombre.

Para activar o desactivar los comandos Redis, abra el archivo de configuración una vez más:

sudo nano /etc/redis/redis.conf

  • sudo nano /etc/redis/redis.conf

Advertencia: Los siguientes pasos mostrando cómo desactivar los comandos de cambio de nombre y son ejemplos. Sólo debe elegir para desactivar o cambiar el nombre de los comandos que tienen sentido para usted. Puede revisar la lista completa de los comandos para sí mismo y determinar cómo podrían ser manipuladas a redis.io/commands.

Para desactivar un comando, sólo tiene que cambiar el nombre a una cadena vacía (representado por un par de comillas sin otros caracteres entre ellos), como se muestra a continuación:

. . .
# 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 cambiar el nombre de un comando, darle otro nombre como se muestra en la ejemplos a continuación. comandos cambiado el nombre debería ser difícil de adivinar, pero fácil de recordar:

. . .
rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
. . .

Guardar los cambios y cierre el archivo.

Después de cambiar el nombre de un comando, aplicar el cambio mediante el reinicio de Redis:

sudo systemctl restart redis.service

  • sudo systemctl reinicio redis.service

para probar los nuevos comandos, escriba la línea de comandos Redis:

redis-cli

  • Redis-cli

Siguiente , autenticar:

auth your_redis_password

  • auth your_redis_password de

OutputOK

Let asumen que cambió el nombre del comando CONFIG para ASC12_CONFIG, como en el ejemplo anterior. En primer lugar, intente utilizar el comando original de CONFIG. Se debe fallar, porque se ha cambiado el nombre:

config get requirepass

  • config llegar requirepass

Output(error) ERR unknown command 'config'

Llamando el comando ha cambiado el nombre, sin embargo, tendrá éxito. No es sensible a mayúsculas:

asc12_config get requirepass

  • asc12_config get requirepass

Output1) "requirepass"
2) "your_redis_password"

Por último, se puede salir de Redis-cli:

exit

    salida

Tenga en cuenta que si usted ya está usando la línea de comandos y luego Redis reinicio Redis, que tendrá que volver a autenticarse. De lo contrario, obtendrá este error si escribe un comando:

OutputNOAUTH Authentication required.

En cuanto a la práctica de cambiar el nombre de comandos, hay una advertencia que figura al final de la sección de seguridad en /etc/redis/redis.conf que dice: Por favor

Recuerde que para cambiar el nombre de los comandos que se registra en el archivo AOF o transmitida a los esclavos puede causar problemas.

Nota: elige proyectos El Redis para utilizar los términos “maestro” y “esclavo”, mientras que digitalocean generalmente prefiere las alternativas “primaria” y “secundaria”. Con el fin de evitar confusiones hemos optado por utilizar los términos utilizados en la documentación Redis aquí.

Esto significa que si el comando ha cambiado el nombre no está en el archivo de AOF, o si no es más que el archivo AOF no se ha transmitido a los esclavos, entonces no debería haber ningún problema.

Así, tenlo en cuenta cuando se está tratando de cambiar el nombre de los comandos. El mejor momento para cambiar el nombre de un comando es cuando no se está utilizando la persistencia AOF, o inmediatamente después de la instalación, es decir, antes de su aplicación Redis-utilizando ha sido desplegado.

Al utilizar AOF y hacer frente a una instalación de maestro-esclavo, tenga en cuenta esta respuesta de la página GitHub tema del proyecto. La siguiente es una respuesta a la pregunta del autor:

Los comandos se registran en el AOF y replican en el esclavo de la misma manera que se envían, por lo que si se intenta reproducir la AOF en una instancia que no tiene el mismo cambio de nombre , que se puede encontrar inconsistencias que el comando no se puede ejecutar (lo mismo para los esclavos).

Por lo tanto, la mejor manera de manejar el cambio de nombre en casos como el que es para asegurarse de que los comandos renombrados se aplican a todas las instancias en las instalaciones de maestro-esclavo.

Conclusión

tener en cuenta que una vez que alguien ha iniciado sesión en el servidor, es muy fácil de burlar la seguridad Redis-características específicas que hemos puesto en su lugar. Por lo tanto, la función de seguridad más importante es el servidor de seguridad, lo que hace que sea extremadamente difícil para los actores maliciosos para saltar esa valla.

Si usted está tratando de asegurar la comunicación Redis través de una red insegura que tendrá que emplear un proxy SSL, según lo recomendado por los desarrolladores Redis en el Manual oficial de seguridad Redis.