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

Como alojar un sitio web usando Cloudflare y Nginx en Ubuntu 16.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.

Este tutorial muestra cómo implementar la seguridad básica para un servidor Redis.

Sin embargo, tenga en cuenta que Redis fue diseñado para su uso 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.

rendimiento y simplicidad sin seguridad es una receta para el desastre. Incluso los pocos elementos de seguridad Redis tiene son realmente nada para morirse. Entre ellos se incluyen: una contraseña sin cifrar básica, y el cambio de nombre de comando e incapacitante. Se carece de un sistema de control de acceso verdadera.

Sin embargo, la configuración de los elementos de seguridad existentes sigue siendo un gran paso de salir de su base de datos desprotegida.

En este tutorial, usted leerá cómo configurar los pocos elementos de seguridad Redis ha, y algunas otras características de seguridad del sistema que impulsará la postura de seguridad de una instalación independiente Redis en Ubuntu 14.04.

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 Ubuntu 14.04 con un usuario sudo añadió, desde la configuración inicial del servidor
  • iptables configura mediante esta guía iptables, a través del paso (opcional) Actualización de servidores de nombres (si no lo hace la parte de configuración del servidor de nombres, voluntad APT no trabajo). Después de configurar los servidores de nombres, ya está hecho
  • Redis instalado y funcionando con las instrucciones de la instalación maestra de sólo de esta guía Redis, a través del Paso 2 – Configurar paso Redis Maestro

Un servidor Ubuntu 14.04 con un usuario sudo añadido , desde la configuración inicial del servidor

iptables configura mediante esta guía iptables, a través del paso (Opcional) actualización de servidores de nombres (si no lo hace la parte de configuración del servidor de nombres, APT no funcionará). Después de configurar los servidores de nombres, ya está hecho

Redis instalado y funciona utilizando las instrucciones de la instalación maestra de sólo de esta guía Redis, a través de la Paso 2 – Configurar Redis Maestro paso

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

primer inicio de sesión al servidor mediante SSH:

ssh username@server-ip-address

  • ssh usuario @ servidor de dirección-ip-

para comprobar que Redis está funcionando, utilice la línea de comandos Redis. El comando Redis-CLI se utiliza para acceder a la línea de comandos Redis.

redis-cli

  • Redis-cli

Si ya ha configurado una contraseña para Redis, usted tiene que auth después de conectar.

auth your_redis_password

  • auth your_redis_password

OK

prueba

el servidor de base de datos:

ping

  • de ping

Respuesta:

PONG

Salir:

quit

  • dejar

Paso 2 – Asegurando el servidor con iptables

Si ha seguido los requisitos previos para iptables, puede saltarse este paso. O bien, puede hacerlo ahora.

Redis es simplemente una aplicación que se ejecuta en el servidor, y porque no tiene una seguridad real cuenta propia, el primer paso para realmente asegurándola es asegurar primero el servidor que se está ejecutando.

En el caso de un servidor de cara al público como su servidor Ubuntu 14.04, la configuración de un servidor de seguridad que figuran en esta guía iptables es el primer paso. seguir ese enlace y configurar el servidor de seguridad ahora.

Si ha implementado las reglas del cortafuegos usando esa guía, entonces no es necesario añadir una regla adicional para Redis, porque por defecto, todo el tráfico entrante se redujo a menos que explícitamente permitido. Desde una instalación independiente por defecto 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.

Si usted necesita para permitir específicamente una dirección IP para Redis, se puede comprobar la dirección IP que está escuchando en Redis, y qué puerto se ve obligada a grep-ción por la salida del comando netstat. La cuarta columna – 127.0.0.1:6379 aquí – indica la dirección IP y el puerto asociado con la combinación Redis:

sudo netstat -plunt | grep -i redis

  • sudo netstat -plunt | grep -i Redis

tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 8562/redis-server 1

Asegúrese de que se permite esta dirección IP en su política de firewall. Para obtener más información sobre cómo añadir reglas, consulte el artículo de este iptables básico.

Paso 3 – Encuadernación a localhost

Por defecto, el servidor Redis sólo es accesible desde localhost. Sin embargo, si has seguido el tutorial para configurar un servidor maestro Redis, ha 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

Nos’ ll seguir utilizando este archivo, por lo que mantenerlo abierto por ahora.

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

Si ha instalado Redis utilizando el modo de configurar un clúster de Redis en Ubuntu 14.04 artículo, usted debe haber configurado una contraseña para ella. A su discreción, puede hacer una contraseña más segura ahora siguiendo esta sección. Si no es así, las instrucciones de esta sección muestran cómo configurar la contraseña del servidor de base de datos.

Configuración de una contraseña Redis permite a uno de sus dos característica integrada 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, que aún debe tener abiertos de la etapa anterior.

Vaya a la sección de seguridad y el aspecto de Directiva comentado que lee:

# requirepass foobared

descomentarla quitando el #, y el cambio foobared a un valor muy fuerte y muy largo.

en lugar de hacer una contraseña usted mismo, usted puede utilizar una herramienta como APG o pwgen para generar una. Si no desea instalar una aplicación sólo para generar una contraseña, puede utilizar la de una sola línea a continuación. Para generar una contraseña diferente de la que esto generaría, cambiar la palabra entre comillas.

echo "digital-ocean" | sha256sum

  • echo «océano digital» | sha256sum

El resultado debe ser algo como:

960c3dac4fa81b4204779fd16ad7c954f95942876b9c4fb1a255667a9dbe389d

Aunque la contraseña generada no será fácil de pronunciar, le da una muy fuerte y muy larga, que es exactamente el tipo de contraseña requerida para Redis. Después de copiar y pegar la salida de ese comando como el nuevo valor para requirepass, debe decir:

requirepass 960c3dac4fa81b4204779fd16ad7c954f95942876b9c4fb1a255667a9dbe389d

Si prefiere una contraseña más corta, utiliza la salida del siguiente comando en su lugar. Una vez más, cambiar la palabra entre comillas para que no se genere la misma contraseña que éste:

echo "digital-ocean" | sha1sum

  • echo «océano digital» | sha1sum

Usted obtendrá una salida algo más corto este tiempo:

10d9a99851a411cdae8c3fa09d7290df192441a9

Después de establecer la contraseña, guarde el archivo y reinicie Redis: servicio

sudo service redis-server restart

  • sudo Redis-servidor reinicio prueba

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

redis-cli

  • Redis-cli

los espectáculos de salida después de una secuencia de comandos que se utilizan para comprobar si la contraseña funciona Redis. El primer comando intenta establecer una clave a un valor antes de la autenticación.

set key1 10

  • establece key1 10

que no funciona, por lo Redis devuelve un error.

(error) NOAUTH Authentication required.

El segundo comando autentica con la contraseña especificada en el fichero de configuración Redis.

auth your_redis_password

  • auth your_redis_password

Redis reconoce.

OK

Después de eso, volver a ejecutar el comando anterior tiene éxito.

set key1 10

  • establece key1 10

OK

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

get key1

  • llegar key1

"10"

El último comando sale Redis-cli. También puede utilizar la salida:

quit

  • dejar

A continuación, vamos a ver el cambio de nombre comandos Redis.

Paso 5 – Cambiar el nombre de comandos peligroso

La otra característica de seguridad incorporada en Redis le permite renombrar o deshabilitar completamente ciertos comandos que se consideran peligrosos.

Cuando se ejecuta 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 sepa que son peligrosos incluyen: FLUSHDB , flushall , CLAVES , PEXPIRE , DEL , CONFIG , PARADA , BGREWRITEAOF , BG GUARDAR , GUARDAR , SPOP , SREM , RENAME y DEBUG . Eso 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.

Si deshabilita o cambia el nombre de un comando es específica de sitio. Si sabe que nunca va a usar un comando que se puede abusar, entonces es posible desactivarlo. De lo contrario, cambiar su nombre.

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

sudo nano /etc/redis/redis.conf

  • sudo nano /etc/redis/redis.conf

Estos son algunos ejemplos. Usted debe elegir para desactivar o cambiar el nombre de los comandos que tienen sentido para usted. Puede comprobar los comandos por sí mismo y determinar cómo podrían ser manipuladas a redis.io/commands.

para desactivar o matar a un comando, sólo tiene que cambiar el nombre a una cadena vacía, 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 ""

Y para cambiar el nombre de un comando, se dará otro nombre, como en los ejemplos a continuación. comandos cambiado el nombre debería ser difícil de adivinar, pero fácil de recordar. No hacer la vida más difícil para usted mismo.

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

guardar los cambios.

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

sudo service redis-server restart

  • sudo servicio Redis-servidor reinicio

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

redis-cli

  • Redis-cli

Entonces , suponiendo que cambió el nombre del comando CONFIG a ASC12_ CONFIG , los siguientes salida muestra cómo la prueba de que se ha aplicado el nuevo comando.

después de la autenticación:

auth your_redis_password

  • auth your_redis_password

OK

El primer intento de utilizar el comando config debe fallar, ya que se ha cambiado el nombre.

config get requirepass

  • config get requirepass

(error) ERR unknown command 'config'

Llamando el comando ha cambiado el nombre debe tener éxito (que es sensible a las mayúsculas):

asc12_config get requirepass

  • asc12_config get requirepass

1) "requirepass"
2) "your_redis_password"

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

exit

  • salir

Nota: Si ya está utilizando la línea de comandos Redis y reinicie Redis, tendrá que volver a autenticarse. De lo contrario, obtendrá este error si escribe un comando:

NOAUTH Authentication required.

En cuanto a los comandos de cambio de nombre, hay una advertencia que figura al final de la sección de seguridad en /etc/redis/redis.conf que dice:

Tenga en cuenta que el cambio de el nombre de los comandos que se registra en el archivo AOF o transmitida a los esclavos puede causar problemas.

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 no ha AOF sinnumero transmitida 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.

Paso 6 – Configuración de Directorio de propiedad de datos y archivos Permisos

En este paso, vamos a considerar un par de propiedad y los permisos cambios que puede hacer para mejorar el perfil de seguridad de la instalación Redis. Esto implica asegurarse de que sólo el usuario que necesita acceder a Redis tiene permiso para leer sus datos. Ese usuario es, por defecto, el ReDiS usuario.

Usted puede verificar esto grep-ción para el directorio de datos Redis en una larga lista de su directorio padre. El comando y su salida se dan a continuación. ls

ls -l /var/lib | grep redis

  • -l / var / lib | grep ReDiS

drwxr-xr-x 2 redis redis 4096 Aug 6 09:32 redis

Se puede ver que el directorio de datos Redis es propiedad de la ReDiS usuario , con acceso secundario otorgado al ReDiS grupo . Esa parte es buena.

La parte que no es es permisos de la carpeta, que es 755. Para asegurar que sólo el usuario Redis tiene acceso a la carpeta y su contenido, cambiar el permiso a 700:

sudo chmod 700 /var/lib/redis

  • sudo chmod 700 / var / lib / Redis

el otro permiso que debe cambiar es el del archivo de configuración Redis. Por defecto, tiene un permiso de archivo de 644 y es propiedad de root , con la propiedad secundaria por el grupo raíz : ls

ls -l /etc/redis/redis.conf

  • -l /etc/redis/redis.conf

-rw-r--r-- 1 root root 30176 Jan 14 2014 /etc/redis/redis.conf

ese permiso (644) es de lectura global, lo cual no es una buena idea, ya que contiene la contraseña sin cifrar configurado en el Paso 4.

Tenemos que cambiar la propiedad y los permisos. Idealmente, debe ser propiedad del usuario ReDiS , con la propiedad secundaria por el usuario root . Para ello, ejecute el siguiente comando:

sudo chown redis:root /etc/redis/redis.conf

  • sudo chown Redis: root /etc/redis/redis.conf

A continuación, cambiar la propiedad de manera que sólo el propietario del fichero puede leer y / o escribir en él:

sudo chmod 600 /etc/redis/redis.conf

  • sudo chmod 600 /etc/redis/redis.conf

Usted puede verificar la nueva propiedad y permisos usando: ls

ls -l /etc/redis/redis.conf

  • -l /etc/redis/redis.conf

total 40
-rw------- 1 redis root 29716 Sep 22 18:32 /etc/redis/redis.conf

Finalmente, reiniciar Redis:

sudo service redis-server restart

  • sudo servicio Redis-servidor reinicio

Conclusión

Tenga en cuenta que una vez que alguien ha iniciado sesión en el servidor, es muy fácil de eludir las Redis funciones específicas de seguridad que hemos puesto en su lugar. Por lo tanto, la función de seguridad más importante es la que hace que sea extremadamente difícil para saltar esa valla.

Ese debe ser el servidor de seguridad.

Para tomar su servidor de seguridad al siguiente nivel, podría configurar un sistema de detección de intrusos como OSSEC. Para configurar OSSEC en Ubuntu 14.04, consulte esta guía OSSEC.

Si usted está tratando de asegurar la comunicación Redis través de una red insegura que tendrá que emplear un proxy SSL, como recommeded por los desarrolladores Redis en el Manual oficial de seguridad Redis. Configuración de un proxy SSL para proteger Redis commmunication es un tema aparte.

No se incluye una lista completa de los comandos Redis en la sección de cambio de nombre. Sin embargo, se puede comprobar esto por sí mismo y determinar cómo podrían ser manipuladas a redis.io/commands.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *