Cómo instalar y proteger Memcached en CentOS 7

hace 2 semanas

Introducción

Los sistemas de almacenamiento en caché de objetos de memoria como Memcached pueden optimizar el rendimiento de las bases de datos de backend almacenando temporalmente la información en la memoria y conservando los registros solicitados con frecuencia o recientemente. De esta manera, reducen la cantidad de solicitudes directas a sus bases de datos.

Dado que los sistemas como Memcached pueden contribuir a ataques de denegación de servicio si no se configuran correctamente, es importante proteger sus servidores Memcached. En esta guía, explicaremos cómo proteger su servidor Memcached vinculando su instalación a una interfaz de red local o privada y creando un usuario autorizado para su instancia Memcached.

Prerrequisitos

En este tutorial se supone que tienes un servidor configurado con un usuario sudo que no es root y un firewall básico. Si no es así, configura e instala lo siguiente:

  • Un servidor CentOS 7, configurado siguiendo nuestro tutorial Configuración inicial del servidor con CentOS 7.
  • FirewallD, configurado siguiendo la sección “Instalar y habilitar su Firewall para que se inicie en el arranque” de nuestra guía sobre el uso de FirewallD con CentOS 7.

Con estos requisitos previos establecidos, estará listo para instalar y proteger su servidor Memcached.

Instalación de Memcached desde repositorios oficiales

Si aún no tiene Memcached instalado en su servidor, puede instalarlo desde los repositorios oficiales de CentOS. Primero, asegúrese de que el índice de paquetes local esté actualizado:

  1. sudo yum update

A continuación, instale el paquete oficial de la siguiente manera:

  1. sudo yum install memcached

También podemos instalar libmemcached, una librería que proporciona varias herramientas para trabajar con tu servidor Memcached:

  1. sudo yum install libmemcached

Ahora Memcached debería estar instalado como un servicio en su servidor, junto con herramientas que le permitirán probar su conectividad. Ahora podemos pasar a proteger sus parámetros de configuración.

Protección de la configuración de Memcached

Para garantizar que nuestra instancia de Memcached esté escuchando en la interfaz local 127.0.0.1, modificaremos la OPTIONSvariable en el archivo de configuración ubicado en /etc/sysconfig/memcached. También deshabilitaremos el receptor UDP. Ambas acciones protegerán nuestro servidor de ataques de denegación de servicio.

Puedes abrir /etc/sysconfig/memcachedcon vi:

  1. sudo vi /etc/sysconfig/memcached

Localiza la OPTIONSvariable, que inicialmente se verá así:

/etc/sysconfig/memcached

. . .OPTIONS=""

La vinculación a nuestra interfaz de red local restringirá el tráfico a los clientes en la misma máquina. Lo haremos agregando -l 127.0.0.1a nuestra OPTIONSvariable. Esto puede ser demasiado restrictivo para ciertos entornos, pero puede ser un buen punto de partida como medida de seguridad.

Dado que el protocolo UDP es mucho más eficaz para los ataques de denegación de servicio que el TCP, también podemos desactivar el receptor UDP. Para ello, añadiremos el -U 0parámetro a nuestra OPTIONSvariable. El archivo completo debería verse así:

/etc/sysconfig/memcached

PORT="11211"USER="memcached"MAXCONN="1024"CACHESIZE="64"OPTIONS="-l 127.0.0.1 -U 0" 

Guarde y cierre el archivo cuando haya terminado.

Reinicie su servicio Memcached para aplicar los cambios:

  1. sudo systemctl restart memcached

Verifique que Memcached esté actualmente vinculado a la interfaz local y escuchando solo conexiones TCP escribiendo:

  1. sudo netstat -plunt

Deberías ver el siguiente resultado:

OutputActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name. . .tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      2383/memcached. . .

Esto confirma que memcachedestá vinculado a la 127.0.0.1dirección utilizando únicamente TCP.

Agregar usuarios autorizados

Para agregar usuarios autenticados a su servicio Memcached, es posible utilizar Simple Authentication and Security Layer (SASL), un marco que desvincula los procedimientos de autenticación de los protocolos de aplicación. Habilitaremos SASL dentro de nuestro archivo de configuración de Memcached y luego agregaremos un usuario con credenciales de autenticación.

Configuración de la compatibilidad con SASL

Primero podemos probar la conectividad de nuestra instancia de Memcached con el memstatcomando. Esto nos ayudará a establecer que SASL y la autenticación de usuario estén habilitadas después de realizar cambios en nuestros archivos de configuración.

Para comprobar que Memcached está en funcionamiento, escriba lo siguiente:

  1. memstat --servers="127.0.0.1"

Debería ver un resultado como el siguiente:

OutputServer: 127.0.0.1 (11211)     pid: 3831     uptime: 9     time: 1520028517     version: 1.4.25     . . .

Ahora podemos continuar con la habilitación de SASL. Primero, podemos agregar el -Sparámetro a nuestra OPTIONSvariable en /etc/sysconfig/memcached, lo que habilitará SASL. Abra el archivo nuevamente:

  1. sudo vi /etc/sysconfig/memcached

Agregaremos los parámetros -Sy -vva nuestra OPTIONSvariable. La -vvopción proporcionará una salida detallada a /var/log/memcached, lo que nos ayudará durante la depuración. Agregue estas opciones a la OPTIONSvariable de la siguiente manera:

/etc/sysconfig/memcached

. . .OPTIONS="-l 127.0.0.1 -U 0 -S -vv" 

Guarde y cierre el archivo.

Reinicie el servicio Memcached:

  1. sudo systemctl restart memcached

A continuación, podemos echar un vistazo a los registros para asegurarnos de que se ha habilitado la compatibilidad con SASL:

  1. sudo journalctl -u memcached

Debería ver la siguiente línea, que indica que se ha inicializado la compatibilidad con SASL:

Output. . .Mar 05 18:16:11 memcached-server memcached[3846]: Initialized SASL.. . .

Podemos verificar la conectividad nuevamente, pero debido a que SASL se ha inicializado, este comando debería fallar sin autenticación:

  1. memstat --servers="127.0.0.1"

Este comando no debería generar ningún resultado. Podemos escribir lo siguiente para comprobar su estado:

  1. echo $?

$?siempre devolverá el código de salida del último comando que salió. Normalmente, cualquier cosa que no sea 0indica un error del proceso. En este caso, deberíamos ver un estado de salida de 1, que nos indica que el memstatcomando falló.

Agregar un usuario autenticado

Ahora podemos descargar dos paquetes que nos permitirán trabajar con la biblioteca Cyrus SASL y sus mecanismos de autenticación, incluyendo complementos que admiten esquemas de autenticación PLAIN. Estos paquetes, cyrus-sasl-devely cyrus-sasl-plain, nos permitirán crear y autenticar a nuestro usuario. Instala los paquetes escribiendo:

  1. sudo yum install cyrus-sasl-devel cyrus-sasl-plain

A continuación, crearemos el directorio y el archivo que Memcached comprobará para comprobar su configuración SASL:

  1. sudo mkdir -p /etc/sasl2
  2. sudo vi /etc/sasl2/memcached.conf

Agregue lo siguiente al archivo de configuración SASL:

/etc/sasl2/memcached.conf

mech_list: plainlog_level: 5sasldb_path: /etc/sasl2/memcached-sasldb2

Además de especificar nuestro nivel de registro, lo configuraremos mech_listen plain, lo que indica a Memcached que debe usar su propio archivo de contraseñas y verificar una contraseña de texto sin formato. También especificaremos la ruta al archivo de base de datos de usuarios que crearemos a continuación. Guarde y cierre el archivo cuando haya terminado.

Ahora crearemos una base de datos SASL con nuestras credenciales de usuario. Usaremos el saslpasswd2comando para crear una nueva entrada para nuestro usuario en nuestra base de datos usando la -copción. Nuestro usuario será sammy aquí, pero puedes reemplazar este nombre con tu propio usuario. Usando la -fopción, especificaremos la ruta a nuestra base de datos, que será la ruta que configuramos en /etc/sasl2/memcached.conf:

  1. sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy

Por último, queremos otorgarle al memcachedusuario la propiedad de la base de datos SASL:

  1. sudo chown memcached:memcached /etc/sasl2/memcached-sasldb2

Reinicie el servicio Memcached:

  1. sudo systemctl restart memcached

Al ejecutarlo memstatnuevamente, se confirmará si nuestro proceso de autenticación funcionó o no. Esta vez, lo ejecutaremos con nuestras credenciales de autenticación:

  1. memstat --servers="127.0.0.1" --username=sammy --password=your_password

Debería ver un resultado como el siguiente:

OutputServer: 127.0.0.1 (11211)     pid: 3831     uptime: 9     time: 1520028517     version: 1.4.25     . . .

Nuestro servicio Memcached ahora se ejecuta correctamente con soporte SASL y autenticación de usuarios.

Permitir el acceso a través de la red privada

Hemos explicado cómo configurar Memcached para que escuche en la interfaz local, lo que puede evitar ataques de denegación de servicio al proteger la interfaz de Memcached de la exposición a terceros. Sin embargo, puede haber casos en los que necesite permitir el acceso desde otros servidores. En este caso, puede ajustar sus ajustes de configuración para vincular Memcached a la interfaz de red privada.

Nota: En esta sección explicaremos cómo configurar los ajustes del firewall mediante FirewallD , pero también es posible utilizar los firewalls en la nube de DigitalOcean para crear estos ajustes. Para obtener más información sobre cómo configurar los firewalls en la nube de DigitalOcean, consulte nuestra Introducción a los firewalls en la nube de DigitalOcean. Para obtener más información sobre cómo limitar el tráfico entrante a determinadas máquinas, consulte la sección de este tutorial sobre cómo aplicar reglas de firewall mediante etiquetas y nombres de servidor y nuestro análisis de las etiquetas de firewall.

Limitación del acceso IP con firewalls

Antes de ajustar la configuración, es una buena idea configurar reglas de firewall para limitar las máquinas que pueden conectarse a su servidor Memcached. Si siguió los requisitos previos e instaló FirewallD en su servidor y no planea conectarse a Memcached desde otro host, entonces no necesita ajustar sus reglas de firewall. Su instancia independiente de Memcached debería estar escuchando en 127.0.0.1, gracias a la OPTIONSvariable que definimos anteriormente, y por lo tanto no debería haber preocupaciones sobre el tráfico entrante. Sin embargo, si planea permitir el acceso a su servidor Memcached desde otros hosts, entonces deberá realizar cambios en la configuración de su firewall mediante el firewall-cmdcomando.

Comience agregando una zona Memcached dedicada a su firewalldpolítica:

  1. sudo firewall-cmd --permanent --new-zone=memcached

A continuación, especifica qué puerto deseas mantener abierto. Memcached utiliza el puerto 11211predeterminado:

  1. sudo firewall-cmd --permanent --zone=memcached --add-port=11211/tcp

A continuación, especifique las direcciones IP privadas a las que se les debe permitir acceder a Memcached. Para ello, deberá conocer la dirección IP privada de su servidor cliente :

  1. sudo firewall-cmd --permanent --zone=memcached --add-source=client_server_private_IP

Recargue el firewall para asegurarse de que las nuevas reglas surtan efecto:

  1. sudo firewall-cmd --reload

Los paquetes provenientes de la dirección IP de su cliente ahora se deben procesar de acuerdo con las reglas de la zona dedicada de Memcached. Todas las demás conexiones se procesarán en la publiczona predeterminada.

Con estos cambios implementados, podemos pasar a realizar los cambios de configuración necesarios en nuestro servicio Memcached, vinculándolo a la interfaz de red privada de nuestro servidor.

Vinculación de Memcached a la interfaz de red privada

El primer paso para vincularnos a la interfaz de red privada de nuestro servidor será modificar la OPTIONSvariable que configuramos anteriormente.

Podemos abrirlo /etc/sysconfig/memcachedde nuevo escribiendo:

  1. sudo vi /etc/sysconfig/memcached

Dentro, localiza la OPTIONSvariable. Ahora podemos modificarla -l 127.0.0.1para reflejar la IP privada de nuestro servidor Memcached:

/etc/sysconfig/memcached

. . .OPTIONS="-l memcached_servers_private_IP -U 0 -S -vv"

Guarde y cierre el archivo cuando haya terminado.

Reinicie el servicio Memcached nuevamente:

  1. sudo systemctl restart memcached

Comprueba tu nueva configuración netstatpara confirmar el cambio:

  1. sudo netstat -plunt
OutputActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name. . .tcp        0      0 memcached_servers_private_IP:11211         0.0.0.0:*               LISTEN      2383/memcached. . .

Pruebe la conectividad desde su cliente externo para asegurarse de que aún puede acceder al servicio. También es una buena idea comprobar el acceso desde un cliente no autorizado para asegurarse de que las reglas de su firewall sean efectivas.

Conclusión

En este tutorial, explicamos cómo proteger su servidor Memcached configurándolo para vincularlo a su interfaz de red local o privada y habilitando la autenticación SASL.

Para obtener más información sobre Memcached, consulte la documentación del proyecto. Para obtener más información sobre cómo trabajar con Memcached, consulte nuestro tutorial sobre Cómo instalar y usar Memcache en Ubuntu 14.04.

Reúnete conmigo
Te invito a una reunión sin compromiso para explorar juntos las oportunidades de crecimiento de tu negocio. Aprovecha esta oportunidad para conocerme y descubrir cómo mi experiencia y habilidades pueden marcar la diferencia en tu éxito empresarial. ¡No pierdas la ocasión de darle a tu empresa el impulso que merece!
× ¿Cómo puedo ayudarte?