Cómo instalar y proteger Memcached en Ubuntu 18.04

Kathleen Juell escribió una versión anterior de este tutorial .
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.
En esta guía, aprenderá a instalar y configurar un servidor Memcached. También aprenderá a agregar autenticación para proteger Memcached mediante la Capa de seguridad y autenticación simple (SASL). Por último, aprenderá a vincular Memcached a una interfaz de red local o privada para garantizar que solo sea accesible en redes confiables y para usuarios autenticados.
Prerrequisitos
Para seguir este tutorial, necesitarás:
- Un servidor Ubuntu 18.04 con un usuario sudo que no sea root y un firewall habilitado. Para configurarlo, puedes seguir nuestro tutorial Configuración inicial del servidor con Ubuntu 18.04 .
Con estos requisitos previos establecidos, estará listo para instalar y proteger su servidor Memcached.
Paso 1: Instalación de Memcached
Si aún no tienes Memcached instalado en tu servidor, puedes instalarlo desde los repositorios oficiales de Ubuntu. Primero, asegúrate de que el índice de paquetes local esté actualizado usando el siguiente comando:
- sudo apt update
A continuación, instale el paquete oficial de la siguiente manera:
- sudo apt install memcached
También puedes instalar libmemcached-tools
, que es un paquete que contiene varias herramientas que puedes usar para examinar, probar y administrar tu servidor Memcached. Agrega el paquete a tu servidor con el siguiente comando:
- sudo apt install libmemcached-tools
Ahora Memcached debería estar instalado como un servicio en su servidor, junto con herramientas que le permitirán probar su conectividad. Ahora puede continuar con la protección de sus parámetros de configuración.
Paso 2: Configuración de los ajustes de red de Memcached (opcional)
Si su servidor Memcached solo necesita admitir conexiones IPv4 locales mediante TCP, puede omitir esta sección y continuar con el paso 3 de este tutorial. De lo contrario, si desea configurar Memcached para que utilice sockets UDP, sockets de dominio Unix o agregar compatibilidad con conexiones IPv6, continúe con los pasos correspondientes de esta sección del tutorial.
En primer lugar, asegúrese de que su instancia de Memcached esté escuchando en la interfaz de bucle invertido de IPv4 local 127.0.0.1
. La versión actual de Memcached que se entrega con Ubuntu y Debian tiene su -l
parámetro de configuración establecido en la interfaz local, lo que significa que está configurada para aceptar solo conexiones desde el servidor donde se ejecuta Memcached.
Verifique que Memcached esté actualmente vinculado a la 127.0.0.1
interfaz IPv4 local y que escuche solo conexiones TCP mediante el ss
comando:
- sudo ss -plunt
Las distintas banderas alterarán ss
la salida de las siguientes maneras:
-p
Agrega el nombre del proceso que está usando un socket.-l
limita la salida solo a los conectores de escucha, en lugar de incluir también los conectores conectados a otros sistemas-u
Incluye sockets basados en UDP en la salida-n
Muestra valores numéricos en la salida en lugar de nombres y valores legibles para humanos.-t
Incluye sockets basados en TCP en la salida
Debería recibir un resultado como el siguiente:
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process . . .tcp LISTEN 0 1024 127.0.0.1:11211 0.0.0.0:* users:(("memcached",pid=8889,fd=26)). . .
Esta salida confirma que memcached
está vinculado a la dirección de bucle invertido IPv4 127.0.0.1
utilizando únicamente el protocolo TCP.
Ahora que ha confirmado que Memcached está configurado para admitir IPv4 solo con conexiones TCP, puede editar /etc/memcached.conf
para agregar compatibilidad con UDP, Unix Domain Sockets o conexiones IPv6.
Configuración de IPv6
Para habilitar conexiones IPv6 a Memcached, abra el /etc/memcached.conf
archivo con nano
o con su editor preferido:
- sudo nano /etc/memcached.conf
Primero, busque la siguiente línea en el archivo:
/etc/memcached.conf
. . .-l 127.0.0.1
Esta línea es donde Memcached está configurado para escuchar en la interfaz IPv4 local. Para agregar compatibilidad con IPv6, agregue una línea que contenga la dirección de bucle local IPv6 (::1) como esto:
/etc/memcached.conf
. . .-l 127.0.0.1-l ::1
Guarde y cierre el archivo presionando CTRL+O
“entonces” ENTER
para guardar y “a continuación” CTRL+X
para salir nano
. Luego reinicie Memcached usando el systemctl
comando:
- sudo systemctl restart memcached
Ahora puedes verificar que Memcached también esté escuchando conexiones IPv6 repitiendo el ss
comando de la sección anterior:
- sudo ss -plunt
Debería recibir un resultado como el siguiente:
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process . . .tcp LISTEN 0 1024 127.0.0.1:11211 0.0.0.0:* users:(("memcached",pid=8889,fd=26)) . . .tcp LISTEN 0 1024 [::1]:11211 [::]:* users:(("memcached",pid=8889,fd=27))
Las partes resaltadas de la salida indican que Memcached ahora está escuchando conexiones TCP en la interfaz IPv6 local.
Tenga en cuenta que si desea deshabilitar la compatibilidad con IPv4 y solo escuchar conexiones IPv6, puede eliminar la -l 127.0.0.1
línea /etc/memcached.conf
y reiniciar el servicio usando el systemctl
comando.
Configuración de UDP
Si desea utilizar Memcached con sockets UDP, puede habilitar el soporte UDP editando el /etc/memcached.conf
archivo de configuración.
Ábrelo /etc/memcached.conf
usando nano
tu editor preferido y luego agrega la siguiente línea al final del archivo:
/etc/memcached.conf
. . .-U 11211
Si no necesita compatibilidad con TCP, busque la -p 11211
línea y cámbiela para -p 0
deshabilitar las conexiones TCP.
Cuando haya terminado de editar el archivo, guárdelo y ciérrelo presionando Enter CTRL+O
para guardar y luego CTRL+X
para salir.
A continuación, reinicie su servicio Memcached con el systemctl
comando para aplicar los cambios:
- sudo systemctl restart memcached
Verifique que Memcached esté escuchando conexiones UDP usando ss -plunt
nuevamente el comando:
- sudo ss -plunt
Si deshabilitó la compatibilidad con TCP y tiene habilitadas las conexiones IPv6, debería recibir un resultado como el siguiente:
[secondary_label Output] Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process . . .udp UNCONN 0 0 127.0.0.1:11211 0.0.0.0:* users:(("memcached",pid=8889,fd=28))udp UNCONN 0 0 [::1]:11211 [::]:* users:(("memcached",pid=8889,fd=29)). . .
Tenga en cuenta que su resultado puede ser diferente si solo tiene habilitadas las conexiones IPv4 y si ha dejado habilitadas las conexiones TCP.
Configuración de sockets de dominio Unix
Si desea utilizar Memcached con sockets de dominio Unix, puede habilitar esta compatibilidad editando el /etc/memcached.conf
archivo de configuración. Tenga en cuenta que si configura Memcached para utilizar un socket de dominio Unix, Memcached deshabilitará la compatibilidad con TCP y UDP, por lo que debe asegurarse de que sus aplicaciones no necesiten conectarse utilizando esos protocolos antes de habilitar la compatibilidad con sockets.
Ábrelo /etc/memcached.conf
usando nano
tu editor preferido y luego agrega las siguientes líneas al final del archivo:
/etc/memcached.conf
. . .-s /var/run/memcached/memcached.sock-a 660
La -a
bandera determina los permisos en el archivo del socket. Asegúrese de que el usuario que necesita conectarse a Memcached sea parte del memcache
grupo en su servidor; de lo contrario, recibirá un mensaje de permiso denegado cuando intente acceder al socket.
A continuación, reinicie su servicio Memcached con el systemctl
comando para aplicar los cambios:
- sudo systemctl restart memcached
Verifique que Memcached esté escuchando conexiones de socket de dominio Unix mediante el ss -lnx
comando:
- sudo ss -lnx | grep memcached
La -x
bandera limita la salida de ss
los archivos de socket. Debería recibir una salida como la siguiente:
Outputu_str LISTEN 0 1024 /var/run/memcached/memcached.sock 20234658 * 0
Ahora que ha configurado los ajustes de red de Memcached, puede continuar con el siguiente paso de este tutorial, que es agregar SASL para la autenticación a Memcached.
Paso 3: Agregar usuarios autorizados
Para agregar usuarios autenticados a su servicio Memcached, puede utilizar Simple Authentication and Security Layer (SASL), que es un marco que desvincula los procedimientos de autenticación de los protocolos de aplicación. Primero, agregará compatibilidad con SASL a su servidor y luego configurará un usuario con credenciales de autenticación. Una vez que todo esté en su lugar, puede habilitar SASL dentro del archivo de configuración de Memcached y confirmar que todo esté funcionando correctamente.
Agregar un usuario autenticado
Para comenzar a agregar compatibilidad con SASL, deberá instalar el sasl2-bin
paquete, que contiene programas administrativos para la base de datos de usuarios de SASL. Esta herramienta le permitirá crear uno o más usuarios autenticados. Ejecute el siguiente comando para instalarlo:
- sudo apt install sasl2-bin
A continuación, cree el directorio y el archivo que Memcached verificará para verificar su configuración SASL mediante el mkdir
comando:
- sudo mkdir -p /etc/sasl2
Ahora cree el archivo de configuración SASL usando nano
su editor preferido:
- sudo nano /etc/sasl2/memcached.conf
Añade las siguientes líneas:
/etc/sasl2/memcached.conf
log_level: 5mech_list: plainsasldb_path: /etc/sasl2/memcached-sasldb2
Además de especificar el nivel de registro, mech_list
se establece 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. La última línea que agregó especifica la ruta al archivo de base de datos de usuarios que creará a continuación. Guarde y cierre el archivo cuando haya terminado.
Ahora creará una base de datos SASL con credenciales de usuario. Utilizará el saslpasswd2
comando con el -c
indicador para crear una nueva entrada de usuario en la base de datos SASL. El usuario será sammy aquí, pero puede reemplazar este nombre con su propio usuario. El -f
indicador especifica la ruta a la base de datos, que será la ruta que configure en /etc/sasl2/memcached.conf
:
- sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy
Por último, otorgue al usuario y al grupo de memcache la propiedad de la base de datos SASL con el siguiente chown
comando:
- sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2
Ahora tiene una configuración SASL que Memcached puede usar para la autenticación. En la siguiente sección, primero confirmará que Memcached se esté ejecutando con su configuración predeterminada y luego lo volverá a configurar y verificará que esté funcionando con la autenticación SASL.
Configuración de la compatibilidad con SASL
Primero podemos probar la conectividad de nuestra instancia de Memcached con el memcstat
comando. Esta comprobación nos ayudará a establecer que Memcached se está ejecutando y configurando correctamente antes de habilitar la autenticación de usuario y SASL. Después de realizar cambios en nuestros archivos de configuración, ejecutaremos el comando nuevamente para verificar si hay un resultado diferente.
Para comprobar que Memcached está en funcionamiento mediante el memcstat
comando, escriba lo siguiente:
- memcstat --servers="127.0.0.1"
Si utiliza IPv6, sustitúyala ::1
por la 127.0.0.1
dirección IPv4. Si utiliza un socket de dominio Unix, utilice la ruta al socket en lugar de la dirección IP, por ejemplo --servers=/var/run/memcached/memached.sock
.
Cuando ejecute el memcstat
comando y se conecte a Memcached con éxito, debería recibir un resultado como el siguiente:
OutputServer: 127.0.0.1 (11211) pid: 2299875 uptime: 2020 time: 1632404590 version: 1.5.22 . . .
Nota : si utiliza Memcached con compatibilidad con UDP, el memcstat
comando no podrá conectarse al puerto UDP. Puede utilizar el siguiente netcat
comando para verificar la conectividad:
- nc -u 127.0.0.1 11211 -vz
Si Memcached responde, debería recibir un resultado como el siguiente:
OutputConnection to 127.0.0.1 11211 port [udp/*] succeeded!
Si está utilizando Memcached con IPv6 y UDP, el comando debería ser el siguiente:
- nc -6 -u ::1 11211 -vz
Ahora puede continuar con la habilitación de SASL. Para ello, agregue el -S
parámetro a /etc/memcached.conf
. Abra el archivo con nano
o con su editor preferido nuevamente:
- sudo nano /etc/memcached.conf
Al final del archivo, agregue lo siguiente:
/etc/memcached.conf
. . .-S
A continuación, busque y descomente la -vv
opción, que proporcionará una salida detallada a /var/log/memcached
. La línea sin comentarios debería verse así:
/etc/memcached.conf
. . .-vv
Guarde y cierre el archivo.
Ahora reinicie el servicio Memcached usando el siguiente systemctl
comando:
- sudo systemctl restart memcached
A continuación, verifique los journalctl
registros de Memcached para asegurarse de que la compatibilidad con SASL esté habilitada:
- sudo journalctl -u memcached |grep SASL
Debería recibir una línea de salida como la siguiente, indicando que se ha inicializado la compatibilidad con SASL:
OutputSep 23 17:00:55 memcached systemd-memcached-wrapper[2303930]: Initialized SASL.
Ahora puede comprobar la conectividad con Memcached nuevamente. Con la compatibilidad con SASL instalada e inicializada, el siguiente memcstat
comando debería fallar sin credenciales de autenticación válidas:
- memcstat --servers="127.0.0.1"
El comando no debería generar ningún resultado. Escriba el siguiente comando de shell 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ía recibir un estado de salida de 1
, que indica que el memcstat
comando falló.
Al ejecutarlo memcstat
nuevamente, esta vez con un nombre de usuario y una contraseña, se confirmará si el proceso de autenticación funcionó o no. Ejecute el siguiente comando con sus credenciales sustituidas en lugar de sammy
ytu_contraseña` valores si utilizó credenciales diferentes:
- memcstat --servers="127.0.0.1" --username=sammy --password=your_password
Debería recibir un resultado como el siguiente:
OutputServer: 127.0.0.1 (11211) pid: 3831 uptime: 9 time: 1520028517 version: 1.4.25 . . .
Su servicio Memcached ahora está configurado y funcionando con soporte SASL y autenticación de usuarios.
Paso 4: Permitir el acceso a través de la red privada (opcional)
De manera predeterminada, Memcached solo está configurado para escuchar en la 127.0.0.1
interfaz de loopback ( ) local, lo que protege 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 una interfaz de red privada.
Nota: En esta sección explicaremos cómo configurar los ajustes del firewall mediante UFW , 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. Primero, deberá registrar la dirección IP privada de cualquier máquina que desee utilizar para conectarse a Memcached. Una vez que tenga la dirección IP privada (o direcciones), deberá agregar una regla de firewall explícita para permitir que la máquina acceda a Memcached.
Si está utilizando el firewall UFW , puede limitar el acceso a su instancia de Memcached escribiendo lo siguiente en su servidor Memcached:
- sudo ufw allow from client_system_private_IP/32 to any port 11211
Si más de un sistema accede a Memcached a través de la red privada, asegúrese de agregar ufw
reglas adicionales para cada máquina utilizando la regla anterior como plantilla.
Puede obtener más información sobre los firewalls UFW leyendo nuestra guía esencial de UFW .
Con estos cambios implementados, puede ajustar el servicio Memcached para vincularlo a la interfaz de red privada de su servidor.
Vinculación de Memcached a la interfaz de red privada
Ahora que su firewall está en su lugar, puede ajustar la configuración de Memcached para vincularse a la interfaz de red privada de su servidor en lugar de 127.0.0.1
.
Primero, busque la interfaz de red privada para su servidor Memcached usando el siguiente ip
comando
- ip -brief address show
Dependiendo de la configuración de red de su servidor, el resultado puede ser diferente al del siguiente ejemplo:
Outputlo UNKNOWN 127.0.0.1/8 ::1/128eth0 UP 203.0.113.1/20 10.10.0.5/16 2001:DB8::1/64 fe80::7ced:9ff:fe52:4695/64eth1 UP 10.136.32.212/16 fe80::2cee:92ff:fe21:8bc4/64
En este ejemplo, las interfaces de red se identifican por sus nombres eth0
y eth1
. Las direcciones IPv4 resaltadas en la eth0
línea son las direcciones IP públicas del servidor.
10.136.32.212
La dirección resaltada en la eth1
línea es la dirección IPv4 privada del servidor y la fe80::2cee:92ff:fe21:8bc4
dirección es la dirección IPv6 privada. Sus direcciones IP serán diferentes, pero siempre estarán dentro de los siguientes rangos según la especificación RFC 1918 ):
10.0.0.0
a10.255.255.255
(prefijo 10/8)172.16.0.0
a172.31.255.255
(prefijo 172.16/12)192.168.0.0
a192.168.255.255
(prefijo 192.168/16)
Una vez que haya encontrado la dirección IP privada o las direcciones IP de su servidor, abra el /etc/memcached.conf
archivo nuevamente usando nano
su editor preferido:
- sudo nano /etc/memcached.conf
Busque la -l 127.0.0.1
línea que marcó o modificó anteriormente y cambie la dirección para que coincida con la interfaz de red privada de su servidor:
/etc/memcached.conf
. . .-l memcached_servers_private_IP. . .
Si desea que Memcached escuche en múltiples direcciones, agregue otra línea similar para cada dirección, ya sea IPv4 o IPv6 usando el formato.-l memcached_servers_private_IP
Guarde y cierre el archivo cuando haya terminado.
A continuación, reinicie el servicio Memcached:
- sudo systemctl restart memcached
Comprueba tu nueva configuración ss
para confirmar el cambio:
- sudo ss -plunt
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process. . .tcp LISTEN 0 1024 10.137.0.2:11211 0.0.0.0:* users:(("memcached",pid=8991,fd=27)). . .
Pruebe la conectividad desde su cliente externo para asegurarse de que aún puede acceder al servicio. También es una buena idea verificar el acceso desde un cliente no autorizado (intente conectarse sin un usuario ni una contraseña) para asegurarse de que su autenticación SASL esté funcionando como se espera. También es una buena idea intentar conectarse a Memcached desde un servidor diferente que no tenga permiso para conectarse para verificar que las reglas de firewall que creó sean efectivas.
Conclusión
En este tutorial, exploró cómo configurar Memcached con IPv4, IPv6, TCP, UDP y sockets de dominio Unix. También aprendió cómo proteger su servidor Memcached habilitando la autenticación SASL. Por último, aprendió cómo vincular Memcached a su interfaz de red local o privada y cómo configurar reglas de firewall para limitar el acceso a Memcached.
Para obtener más información sobre Memcached, consulte la documentación del proyecto .
Deja una respuesta