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

Cómo servir las aplicaciones Django con Apache y mod_wsgi en Ubuntu 16.04

marzo 4, 2020

 

Introducción

Redis es un código abierto, en memoria de almacenamiento de estructura de datos que sobresale en el almacenamiento en caché. Una base de datos no relacionales, Redis es conocido por su flexibilidad, rendimiento, escalabilidad y soporte de idiomas de ancho.

Redis fue diseñado para su uso por los clientes de confianza en un entorno de confianza, y no tiene características robustas de seguridad de su propio. Redis, sin embargo, tiene una serie de características de seguridad que incluyen una contraseña sin cifrar básica y el cambio de nombre de comando e incapacitante. Este tutorial proporciona instrucciones sobre cómo configurar estas funciones de seguridad, y también cubre algunos otros ajustes que pueden aumentar la seguridad de una instalación independiente Redis en CentOS 7.

Tenga en cuenta que esta guía no se abordan situaciones donde el servidor y el cliente Redis son aplicaciones en diferentes hosts o en diferentes centros de datos. Instalaciones en las que el tráfico Redis tiene que atravesar una red insegura inseguro o se requiere un conjunto diferente de configuraciones, tales como la creación de un proxy SSL o una VPN entre las máquinas Redis.

Requisitos previos

Para continuar con este tutorial, necesitará:

  • Una CentOS 7 de gotas configura utilizando nuestra configuración inicial del servidor para CentOS 7.
  • Firewalld instalado y configurado el uso de esta guía, hasta e incluyendo el “Turning en el escalón Firewall”.

Con esos requisitos previos en su lugar, estamos listos para instalar Redis y realizar algunas tareas de configuración inicial.

Paso 1 – Instalación de Redis

Antes de poder instalar Redis, hay que añadir paquetes adicionales para la primera Enterprise Linux (EPEL) repositorio para las listas de paquetes del servidor. EPEL es un repositorio de paquetes que contiene un número de código abierto paquetes adicionales de software, la mayoría de los cuales son mantenidos por el Proyecto Fedora.

posibilidad de instalar EPEL usando yum:

sudo yum install epel-release

  • sudo yum install-liberación EPEL

vez que la instalación ha finalizado EPEL puede instalar Redis, utilizando de nuevo rico:

sudo yum install redis -y

  • sudo yum install -y Redis

esto puede tardar unos minutos en completarse. Una vez finalizada la instalación, inicie el servicio Redis:

sudo systemctl start redis.service

  • sudo redis.service inicio systemctl

Si desea Redis para iniciar en el arranque, se puede activar con el comando enable:

sudo systemctl enable redis

  • sudo systemctl permiten Redis

puede comprobar el estado de Redis ejecutando el siguiente:

sudo systemctl status redis.service

  • sudo systemctl estado redis.service

Output● redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since Thu 2018-03-01 15:50:38 UTC; 7s ago
Main PID: 3962 (redis-server)
CGroup: /system.slice/redis.service
└─3962 /usr/bin/redis-server 127.0.0.1:6379

Una vez que haya confirmado que Redis está realmente funcionando, prueba de la configuración con el siguiente comando:

redis-cli ping

  • Redis-cli de ping

Esto debería imprimir PONG como la respuesta. Si este es el caso, significa que ahora tienen Redis que se ejecuta en el servidor y podemos empezar configurándolo para mejorar su seguridad.

Paso 2 – Encuadernación Redis y asegurándola con un servidor de seguridad

Una manera eficaz para salvaguardar Redis es asegurar el servidor que se está ejecutando. Usted puede hacer esto al asegurar que Redis sólo se une con localhost oa una dirección IP privada y que el servidor tiene un servidor de seguridad en funcionamiento.

Sin embargo, si opta por configurar un clúster Redis usando este tutorial, entonces se habrá actualizado el archivo de configuración para permitir conexiones desde cualquier lugar, lo que no es tan segura como la unión a localhost o una IP privada.

Para remediar esto, abra el archivo de configuración para la edición de Redis:

sudo vi /etc/redis.conf

  • sudo vi /etc/redis.conf

Busque la línea que comienza con bind y asegúrese de que es sin comentar:

bind 127.0.0.1

Si necesita unen Redis a otra dirección IP (como en los casos en que va a acceder a Redis desde un host independiente) que fuertemente le animamos a unirse a una dirección IP privada. La unión a una dirección IP pública aumenta la exposición de su interfaz Redis a terceros.

bind your_private_ip

Si has seguido los requisitos previos y firewalld instalado en el servidor y no se va a conectar a Redis de otro host, entonces no es necesario añadir ningún reglas de cortafuegos adicionales para Redis. Después de todo, todo el tráfico entrante será dado de baja de forma predeterminada a menos que explícitamente permitido por las reglas del firewall. 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.

Sin embargo, si usted planea el acceso Redis de otro host, tendrá que hacer algunos cambios en la configuración firewalld utilizando el comando firewall-cmd. Una vez más, sólo se debe permitir el acceso a su servidor Redis de sus anfitriones mediante el uso de sus direcciones IP privadas a fin de limitar el número de los ejércitos su servicio está expuesto.

Para empezar, agregar una zona Redis dedicada a su política firewalld:

sudo firewall-cmd --permanent --new-zone=redis

  • sudo firewall-cmd –permanent –new zona = ReDiS

A continuación, especifique el puerto que le gustaría tener abierta. Redis utiliza el puerto 6397 de forma predeterminada:

sudo firewall-cmd --permanent --zone=redis --add-port=6379cp

  • sudo firewall-cmd –permanent –zona = Redis –add-port = 6379 / tcp

A continuación, especifique las direcciones IP privadas que deben ser autorizados a pasar a través de la servidor de seguridad y el acceso Redis:

sudo firewall-cmd --permanent --zone=redis --add-source=client_server_private_IP

  • sudo firewall-cmd –permanent –zona = Redis –add-fuente = client_server_private_IP

Después de ejecutar esos comandos, vuelva a cargar el servidor de seguridad para implementar las nuevas reglas: sudo

sudo firewall-cmd --reload

  • firewall-cmd –reload

Bajo esta configuración, cuando el cortafuegos ve un paquete desde la dirección IP de su cliente, que aplicará las reglas en la zona Redis dedicada a esa conexión. Todas las demás conexiones serán procesados ​​por la zona pública por defecto. Los servicios en la zona predeterminada se aplican a todas las conexiones, no sólo a aquellos que no coinciden de forma explícita, por lo que no es necesario añadir otros servicios (por ejemplo, SSH) a la zona de Redis porque esas reglas se aplicarán a esa conexión de forma automática.

Si elige configurar un cortafuegos usando iptables, tendrá que conceder el acceso anfitriones secundaria al puerto Redis está utilizando con los siguientes comandos:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 --dport 6397 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -P INPUT DROP

  • sudo iptables -A entrada LO -i -j ACCEPT
  • sudo iptables -A ENTRADA -m conntrack –ctstate establecidos, RELATED -j ACCEPT
  • sudo iptables -A ENTRADA -p tcp -s client_servers_private_IP / 32 –dport 6397 -m conntrack –ctstate NUEVO, eSTABLECIDO -j ACCEPT
  • sudo iptables -P ENTRADA DROP

Asegúrese de guardar sus reglas de firewall iptables utilizando el mecanismo recibida por su distribución. Usted puede aprender más acerca de Iptables por echar un vistazo a la guía nuestros Iptables esenciales.

Tenga en cuenta que el uso de cualquiera de las herramientas de cortafuegos funcionará. Lo que es importante es que el servidor de seguridad está en marcha para que las personas desconocidas no pueden acceder a su servidor. En el siguiente paso, configuraremos Redis sólo para ser accesible con una contraseña segura.

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

Si ha instalado Redis utilizando el modo de configurar un clúster de Redis en CentOS 7 tutorial, 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 ha configurado una contraseña, instrucciones de esta sección se muestra cómo establecer la contraseña del servidor de base de datos.

Configuración de una contraseña Redis permite a una de sus características de seguridad incorporadas – el comando auth – que requiere autenticación de los clientes antes de poder acceder a la base de datos. Al igual que el entorno se unen, la contraseña se configura directamente en el archivo de configuración de Redis, /etc/redis.conf. Vuelva a abrir ese archivo:

sudo vi /etc/redis.conf

  • sudo vi /etc/redis.conf

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 una muy fuerte la contraseña de su elección. En lugar de hacer una contraseña usted mismo, 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, sin embargo, puede utilizar el siguiente comando.

Tenga en cuenta que entrar en este comando como escrita generará la misma contraseña cada vez. Para crear una contraseña diferente de la que esto generaría, cambiar la palabra entre comillas para cualquier otra palabra o frase.

echo "digital-ocean" | sha256sum

  • echo «océano digital» | sha256sum

Aunque la contraseña generada no será fácil de pronunciar, es 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 password_copied_from_output

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

Después de establecer la contraseña, guardar y cerrar el archivo y reinicie 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

  • redescubrir cli

La siguiente es 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

Eso no funcionará, ya que todavía no se han autenticado, por lo Redis devuelve un error.

Output(error) NOAUTH Authentication required.

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

auth your_redis_password

  • auth your_redis_password

Redis reconocerá que hemos sido autenticado:

OutputOK

Después de eso, se ejecuta el comando anterior debería volver a tener éxito:

set key1 10

  • establece key1 10

OutputOK

El comando de conseguir key1 consulta Redis para el valor de la nueva clave.

get key1

  • llegar key1

Output"10"

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

quit

  • dejar

Ahora debería ser muy difícil para los usuarios no autorizados accedan a la instalación de Redis. Tenga en cuenta, sin embargo, que sin SSL o una VPN sin cifrar la contraseña seguirá siendo visible a terceros si se conecta a Redis forma remota.

A continuación, vamos a ver en el cambio de nombre de los comandos Redis a más Redis protegerlo de agentes maliciosos.

Paso 4 – 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 instrucciones se pueden utilizar para reconfigurar, destruir, o de otra manera limpie sus datos. Algunos de los comandos que se sepa que son peligrosos incluyen:

  • FLUSHDB
  • flushall
  • CLAVES
  • PEXPIRE
  • DEL
  • CONFIG
  • PARADA
  • BGREWRITEAOF
  • BGSAVE
  • GUARDAR
  • SPOP
  • SREMRENAMEDEBUG

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.

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, se debe cambiar el nombre de su lugar.

Al igual que la contraseña de autenticación, el cambio de nombre o desactivar los comandos se configura en la sección de seguridad del archivo /etc/redis.conf. Para activar o desactivar los comandos Redis, abra el archivo de configuración para la edición una vez más:

sudo vi /etc/redis.conf

  • sudo vi /etc/redis.conf

NOTA : Estos son 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 ""

Para cambiar el nombre de un comando, darle otro nombre al igual que en los ejemplos siguientes. 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 y, a continuación, aplicar el cambio mediante el reinicio de Redis: servicio

sudo service redis-server restart

  • sudo Redis-servidor reinicio

para probar el nuevo comando, introduzca la línea de comandos Redis:

redis-cli

  • Redis-cli

autenticarse utilizando la contraseña que ha definido anteriormente:

auth your_redis_password

  • auth your_redis_password

OutputOK

Suponiendo que cambió el nombre del comando CONFIG a ASC12_ cONFIG , intentar utilizar el comando config debe fallar.

config get requirepass

  • config get requirepass

Output(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

Output1) "requirepass"
2) "your_redis_password"

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

exit

  • salir

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

OutputNOAUTH 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 el archivo /etc/redis.conf, que dice:

Tenga en cuenta que cambiar el nombre de los comandos que se registran en el archivo de AOF o transmitido a los esclavos pueden 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 AOF no se ha transmitido a los esclavos, entonces no debería haber ningún problema. Tenga esto en cuenta a medida que el cambio de nombre está 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 que sus Redis-usando la aplicación se ha 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).

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 de instalaciones maestro-esclavo.

Paso 5 – 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

Outputdrwxr-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 . Esta configuración es la propiedad segura, pero permisos de la carpeta (que se exponen a 755) no lo son. Para asegurar que sólo el usuario Redis tiene acceso a la carpeta y su contenido, cambie la configuración de permisos a 770:

sudo chmod 770 /var/lib/redis

  • sudo chmod 770 / var / lib / Redis

El otro permiso que debe cambiar es el de la Redis archivo de configuración. 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.conf

  • -l /etc/redis.conf

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

Eso permiso (644) es de lectura global. Esto presenta un problema de seguridad que el archivo de configuración contiene la contraseña sin cifrar configuró en el paso 4, lo que significa que tenemos que cambiar la propiedad y los permisos del archivo de configuración. Idealmente, debe ser propiedad del usuario Redis , con la propiedad secundaria para el grupo la Redis. Para ello, ejecute el siguiente comando:

sudo chown redis:redis /etc/redis.conf

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

A continuación, cambiar los permisos para que sólo el propietario del fichero puede leer y / o escribir en él:

sudo chmod 660 /etc/redis.conf

  • sudo chmod 660 /etc/redis.conf

Usted puede verificar la nueva propiedad y los permisos usando: ls

ls -l /etc/redis.conf

  • -l /etc/redis.conf

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

Por último, reinicie Redis:

sudo service redis-server restart

  • sudo servicio Redis-servidor reinicio

Felicidades, la instalación de Redis debería ser ahora más seguro!

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. Esta es la razón por la característica de seguridad importante más cubiertos en este tutorial es el servidor de seguridad, que impide que los usuarios desconocidos de registro en el servidor en el primer lugar.

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.

Deja un comentario

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