Tabla de contenidos
ToggleIntroducció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:
- sudo yum update
A continuación, instale el paquete oficial de la siguiente manera:
- sudo yum install memcached
También podemos instalar libmemcached
, una librería que proporciona varias herramientas para trabajar con tu servidor Memcached:
- 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 OPTIONS
variable 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/memcached
con vi
:
- sudo vi /etc/sysconfig/memcached
Localiza la OPTIONS
variable, 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.1
a nuestra OPTIONS
variable. 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 0
parámetro a nuestra OPTIONS
variable. 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:
- sudo systemctl restart memcached
Verifique que Memcached esté actualmente vinculado a la interfaz local y escuchando solo conexiones TCP escribiendo:
- 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 memcached
está vinculado a la 127.0.0.1
direcció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 memstat
comando. 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:
- 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 -S
parámetro a nuestra OPTIONS
variable en /etc/sysconfig/memcached
, lo que habilitará SASL. Abra el archivo nuevamente:
- sudo vi /etc/sysconfig/memcached
Agregaremos los parámetros -S
y -vv
a nuestra OPTIONS
variable. La -vv
opción proporcionará una salida detallada a /var/log/memcached
, lo que nos ayudará durante la depuración. Agregue estas opciones a la OPTIONS
variable 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:
- 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:
- 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:
- memstat --servers="127.0.0.1"
Este comando no debería generar ningún resultado. Podemos escribir lo siguiente para comprobar su estado:
- echo $?
$?
siempre devolverá el código de salida del último comando que salió. Normalmente, cualquier cosa que no sea 0
indica un error del proceso. En este caso, deberíamos ver un estado de salida de 1
, que nos indica que el memstat
comando 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-devel
y cyrus-sasl-plain
, nos permitirán crear y autenticar a nuestro usuario. Instala los paquetes escribiendo:
- 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:
- sudo mkdir -p /etc/sasl2
- 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_list
en 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 saslpasswd2
comando para crear una nueva entrada para nuestro usuario en nuestra base de datos usando la -c
opción. Nuestro usuario será sammy aquí, pero puedes reemplazar este nombre con tu propio usuario. Usando la -f
opción, especificaremos la ruta a nuestra base de datos, que será la ruta que configuramos en /etc/sasl2/memcached.conf
:
- sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy
Por último, queremos otorgarle al memcached
usuario la propiedad de la base de datos SASL:
- sudo chown memcached:memcached /etc/sasl2/memcached-sasldb2
Reinicie el servicio Memcached:
- sudo systemctl restart memcached
Al ejecutarlo memstat
nuevamente, se confirmará si nuestro proceso de autenticación funcionó o no. Esta vez, lo ejecutaremos con nuestras credenciales de autenticación:
- 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 OPTIONS
variable 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-cmd
comando.
Comience agregando una zona Memcached dedicada a su firewalld
política:
- sudo firewall-cmd --permanent --new-zone=memcached
A continuación, especifica qué puerto deseas mantener abierto. Memcached utiliza el puerto 11211
predeterminado:
- 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 :
- sudo firewall-cmd --permanent --zone=memcached --add-source=client_server_private_IP
Recargue el firewall para asegurarse de que las nuevas reglas surtan efecto:
- 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 public
zona 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 OPTIONS
variable que configuramos anteriormente.
Podemos abrirlo /etc/sysconfig/memcached
de nuevo escribiendo:
- sudo vi /etc/sysconfig/memcached
Dentro, localiza la OPTIONS
variable. Ahora podemos modificarla -l 127.0.0.1
para 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:
- sudo systemctl restart memcached
Comprueba tu nueva configuración netstat
para confirmar el cambio:
- 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.