Cómo Instalar y Proteger Memcached en Ubuntu 20.04

Una versión anterior de este tutorial fue escrita por Kathleen Juell.

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 memoria, conservando registros solicitados con frecuencia o recientemente. De esta manera, reducen el número 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 a Memcached seguro mediante la Capa de Autenticación y Seguridad Simple (SASL). Por último, aprenderá a vincular Memcached a una interfaz de red local o privada para asegurarse de que solo los usuarios autenticados puedan acceder a ella en redes de confianza.

Requisitos previos

Para seguir este tutorial, necesitará:

  • Un servidor Ubuntu 20.04 con un usuario sudo no root y un firewall habilitado. Para configurar esto, puede seguir nuestro tutorial de Configuración inicial del servidor con Ubuntu 20.04.

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

Alternativamente, si desea experimentar con la instalación y configuración de Memcached en su navegador utilizando un terminal interactivo, haga clic en Iniciar un terminal interactivo! botón de abajo para comenzar.

¡Lanza un Terminal Interactivo!

Paso 1-Instalación de Memcached

Si aún no tiene Memcached instalado en su servidor, puede instalarlo desde los repositorios oficiales de Ubuntu. En primer lugar, asegúrese de que el índice de paquetes local se actualiza con el siguiente comando:

  • sudo apt update

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

  • sudo apt install memcached

También puede instalar libmemcached-tools, que es un paquete que contiene varias herramientas que puede usar para examinar, probar y administrar su servidor Memcached. Agregue el paquete a su servidor con el siguiente comando:

  • sudo apt install libmemcached-tools

Memcached ahora debe instalarse como un servicio en su servidor, junto con herramientas que le permitirán probar su conectividad.

Para iniciar Memcached, ejecute el siguiente comando systemctl :

  • sudo systemctl start memcached

Ahora puede pasar a asegurar sus ajustes de configuración.

Paso 2-Configuración de la configuración de red de Memcached (Opcional)

Si su servidor de 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 usar sockets UDP, Sockets de dominio Unix o agregar soporte para conexiones IPv6, continúe con los pasos relevantes en esta sección del tutorial.

En primer lugar, asegúrese de que su instancia de Memcached esté escuchando en la interfaz de bucle invertido IPv4 local 127.0.0.1. La versión actual de Memcached que viene con Ubuntu y Debian tiene su parámetro de configuración -l establecido en la interfaz local, lo que significa que está configurado para aceptar solo conexiones desde el servidor donde se ejecuta Memcached.

Compruebe que Memcached está vinculado actualmente a la interfaz local IPv4 127.0.0.1 y escuche solo conexiones TCP mediante el comando ss :

  • sudo ss -plunt

Los distintos indicadores alterarán la salida ss de las siguientes maneras:

  • -p agrega el nombre del proceso que usa un socket
  • -l limita la salida a sockets de escucha únicamente, en lugar de incluir también sockets 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 por humanos
  • -t incluye sockets basados en TCP en la salida

Debería recibir una salida como la siguiente:

Output
Netid 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á enlazado 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 solo conexiones IPv4 con TCP, puede editar /etc/memcached.conf para agregar compatibilidad con conexiones UDP, Sockets de dominio Unix o IPv6.

Configurar IPv6

Para habilitar conexiones IPv6 a Memcached, abra el archivo /etc/memcached.conf con nano o su editor preferido:

  • sudo nano /etc/memcached.conf

En primer lugar, 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 invertido local IPv6 (:: 1) como esta:

/etc/memcached.conf
. . .-l 127.0.0.1-l ::1

Guarde y cierre el archivo presionando CTRL+O y luego ENTER para guardar, y luego CTRL+X para salir de nano. A continuación, reinicie Memcached con el comando systemctl :

  • sudo systemctl restart memcached

Ahora puede verificar que Memcached también está escuchando conexiones IPv6 repitiendo el comando ss de la sección anterior:

  • sudo ss -plunt

Debería recibir una salida como la siguiente:

Output
Netid 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 :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ínea -l 127.0.0.1 de /etc/memcached.conf y reiniciar el servicio con el comando systemctl.

Configurar UDP

Si desea utilizar Memcached con sockets UDP, puede habilitar la compatibilidad con UDP editando el archivo de configuración /etc/memcached.conf.

Abra /etc/memcached.conf usando nano o su editor preferido, luego agregue la siguiente línea al final del archivo:

/etc/memcached.conf
. . .-U 11211

Si no necesita compatibilidad con TCP, busque la línea -p 11211 y cámbiela a -p 0 para deshabilitar las conexiones TCP.

Cuando haya terminado de editar el archivo, guárdelo y ciérrelo introduciendo CTRL+O para guardar y, a continuación, CTRL+X para salir.

A continuación, reinicie el servicio Memcached con el comando systemctl para aplicar los cambios:

  • sudo systemctl restart memcached

Compruebe que Memcached está escuchando conexiones UDP con el comando ss -plunt de nuevo:

  • sudo ss -plunt

Si deshabilitó el soporte TCP y tiene habilitadas las conexiones IPv6, debería recibir resultados como los siguientes:

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 :11211 :* users:(("memcached",pid=8889,fd=29)). . .

Tenga en cuenta que su salida puede ser diferente si solo tiene habilitadas las conexiones IPv4 y si ha dejado habilitadas las conexiones TCP.

Configurar Sockets de dominio Unix

Si desea utilizar Memcached con Sockets de dominio Unix, puede habilitar este soporte editando el archivo de configuración /etc/memcached.conf. Tenga en cuenta que si configura Memcached para usar un Socket de dominio Unix, Memcached deshabilitará la compatibilidad con TCP y UDP, por lo que asegúrese de que sus aplicaciones no necesitan conectarse mediante esos protocolos antes de habilitar la compatibilidad con socket.

Abra /etc/memcached.conf usando nano o su editor preferido, luego agregue las siguientes líneas al final del archivo:

/etc/memcached.conf
. . .-s /var/run/memcached/memcached.sock-a 660

El indicador -a determina los permisos en el archivo del socket. Asegúrese de que el usuario que necesita conectarse a Memcached es parte del grupo memcache en su servidor, de lo contrario recibirá un mensaje de denegación de permiso cuando intente acceder al socket.

A continuación, reinicie el servicio Memcached con el comando systemctl para aplicar los cambios:

  • sudo systemctl restart memcached

Compruebe que Memcached está escuchando conexiones de sockets de dominio Unix mediante el comando ss -lnx :

  • sudo ss -lnx | grep memcached

El indicador -x limita la salida de ss para mostrar archivos de sockets. Debería recibir una salida como la siguiente:

Output
u_str LISTEN 0 1024 /var/run/memcached/memcached.sock 20234658 * 0

Ahora que ha configurado la configuración de red de Memcached, puede continuar con el siguiente paso de este tutorial, que es agregar SASL para autenticación a Memcached.

Paso 3-Adición de usuarios autorizados

Para agregar usuarios autenticados a su servicio Memcached, puede usar la Capa de seguridad y Autenticación Simple (SASL), que es un marco que desacopla los procedimientos de autenticación de los protocolos de aplicación. En primer lugar, agregará soporte para SASL a su servidor y, a continuación, configurará un usuario con credenciales de autenticación. Con todo en su lugar, puede habilitar SASL dentro del archivo de configuración de Memcached y confirmar que todo funciona correctamente.

Agregar un Usuario autenticado

Para comenzar a agregar soporte SASL, deberá instalar el paquete sasl2-bin, que contiene programas administrativos para la base de datos de usuarios SASL. Esta herramienta le permitirá crear un usuario o usuarios autenticados. Ejecute el siguiente comando para instalarlo:

  • sudo apt install sasl2-bin

A continuación, cree el directorio y el archivo que Memcached comprobará para su configuración de SASL utilizando el comando mkdir :

  • sudo mkdir -p /etc/sasl2

Ahora cree el archivo de configuración SASL usando nano o su editor preferido:

  • sudo nano /etc/sasl2/memcached.conf

Agregue 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ña y verificar una contraseña de texto plano. 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. Usará el comando saslpasswd2 con el indicador -c para crear una nueva entrada de usuario en la base de datos SASL. El usuario será sammy aquí, pero puedes reemplazar este nombre con tu propio usuario. El indicador -f especifica la ruta de acceso a la base de datos, que será la ruta que establezca /etc/sasl2/memcached.conf:

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

Por último, asigne al usuario y al grupo de memcache la propiedad de la base de datos SASL con el siguiente comando chown :

  • 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, a continuación, la reconfigurará y verificará que funciona con la autenticación SASL.

Configurar el soporte de SASL

Primero podemos probar la conectividad de nuestra instancia de Memcached con el comando memcstat. Esta comprobación nos ayudará a establecer que Memcached se está ejecutando y configurando correctamente antes de que SASL y la autenticación de usuario estén habilitadas. Después de hacer cambios en nuestros archivos de configuración, ejecutaremos el comando de nuevo para verificar si hay diferentes salidas.

Para comprobar que Memcached está funcionando con el comando memcstat, escriba lo siguiente:

  • memcstat --servers="127.0.0.1"

Si está utilizando IPv6, sustituya ::1 en lugar de la dirección IPv4 127.0.0.1. Si está utilizando 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 ejecuta el comando memcstat y se conecta a Memcached correctamente, debería recibir resultados como los siguientes:

Output
Server: 127.0.0.1 (11211) pid: 2299875 uptime: 2020 time: 1632404590 version: 1.5.22 . . .

Nota: Si utiliza Memcached con soporte UDP, el comando memcstat no podrá conectarse al puerto UDP. Puede usar el siguiente comando netcat para verificar la conectividad:

  • nc -u 127.0.0.1 11211 -vz

Si Memcached está respondiendo, debería recibir resultados como los siguientes:

Output
Connection to 127.0.0.1 11211 port succeeded!

Si está utilizando Memcached con IPv6 y UDP, el comando debe ser el siguiente:

  • nc -6 -u ::1 11211 -vz

Ahora puede pasar a habilitar SASL. Para ello, añada el parámetro -S a /etc/memcached.conf. Abra el archivo con nano o su editor preferido de nuevo:

  • sudo nano /etc/memcached.conf

En la parte inferior del archivo, agregue lo siguiente:

/etc / memcached.conf
. . .-S

A continuación, busque y descomente la opción -vv, que proporcionará una salida detallada a /var/log/memcached. La línea sin comentarios debería tener este aspecto:

/ etc / memcached.conf
. . .-vv

Guarde y cierre el archivo.

Ahora reinicie el servicio Memcached con el siguiente comando systemctl :

  • sudo systemctl restart memcached

A continuación, compruebe los registros journalctl 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 el soporte SASL se ha inicializado:

Output
Sep 23 17:00:55 memcached systemd-memcached-wrapper: Initialized SASL.

Ahora puede volver a comprobar la conectividad con Memcached. Con la compatibilidad con SASL implementada e inicializada, el siguiente comando memcstat debería fallar sin credenciales de autenticación válidas:

  • memcstat --servers="127.0.0.1"

El comando no debe producir salida. Escriba el siguiente comando de shell para comprobar su estado:

  • echo $?

$? devolverá siempre el código de salida del último comando que salió. Por lo general, cualquier cosa que no sea 0 indica un fallo del proceso. En este caso, debería recibir un estado de salida 1, que indica que el comando memcstat falló.

Ejecutar memcstat de nuevo, esta vez con un nombre de usuario y una contraseña confirmará si el proceso de autenticación funcionó o no. Ejecute el siguiente comando con sus credenciales sustituidas en lugar de los valores sammy y su_password si utilizó credenciales diferentes:

  • memcstat --servers="127.0.0.1" --username=sammy --password=your_password

Debería recibir una salida como la siguiente:

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

Su servicio Memcached ahora está configurado y en ejecución con soporte SASL y autenticación de usuario.

Paso 4: Permitir el acceso a través de la Red Privada (Opcional)

De forma predeterminada, Memcached solo está configurado para escuchar en la interfaz de bucle local (127.0.0.1), 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 la configuración para vincular Memcached a una interfaz de red privada.

Nota: En esta sección cubriremos cómo configurar los ajustes del firewall usando UFW, pero también es posible usar los Firewalls de DigitalOcean Cloud 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 máquinas concretas, consulte la sección de este tutorial sobre la aplicación de reglas de firewall mediante etiquetas y nombres de servidor y nuestra discusión sobre etiquetas de firewall.

Limitar el acceso a IP Con cortafuegos

Antes de ajustar la configuración, es una buena idea configurar reglas de cortafuegos para limitar las máquinas que se pueden conectar a su servidor Memcached. En primer lugar, 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 las direcciones), agregará una regla de firewall explícita para permitir que la máquina acceda a Memcached.

Si está utilizando el firewall de UFW, puede limitar el acceso a su instancia de Memcached escribiendo lo siguiente en su servidor de 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 reglas ufw adicionales para cada máquina utilizando la regla anterior como plantilla.

Puede obtener más información sobre los cortafuegos de la UFW leyendo nuestra guía de elementos esenciales de la UFW.

Con estos cambios, puede ajustar el servicio Memcached para que se vincule a la interfaz de red privada de su servidor.

Enlazar Memcached a la Interfaz de red privada

Ahora que el firewall está instalado, puede ajustar la configuración de Memcached para enlazar a la interfaz de red privada de su servidor en lugar de 127.0.0.1.

En primer lugar, busque la interfaz de red privada para su servidor Memcached utilizando el siguiente comando ip

  • ip -brief address show

Dependiendo de la configuración de red de su servidor, la salida puede ser diferente del siguiente ejemplo:

Output
lo 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 línea eth0 son las direcciones IP públicas del servidor.

La dirección 10.136.32.212 resaltada en la línea eth1 es la dirección IPv4 privada para el servidor, y la dirección fe80::2cee:92ff:fe21:8bc4 es la dirección privada IPv6. 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 a 10.255.255.255 (prefijo 10/8)
  • 172.16.0.0 a 172.31.255.255 (prefijo 172.16 / 12)
  • 192.168.0.0 a 192.168.255.255 (192.prefijo 168/16)

Una vez que haya encontrado la dirección o direcciones IP privadas de su servidor, abra el archivo /etc/memcached.conf nuevamente usando nano o su editor preferido:

  • sudo nano /etc/memcached.conf

Busque la línea -l 127.0.0.1 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 varias direcciones, agregue otra línea similar para cada dirección, ya sea IPv4 o IPv6 utilizando 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

Compruebe la nueva configuración con ss para confirmar el cambio:

  • sudo ss -plunt
Output
Netid 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 de su cliente externo para asegurarse de que aún puede acceder al servicio. Es una buena idea comprobar también el acceso desde un cliente no autorizado (intente conectarse sin usuario y contraseña) para asegurarse de que su autenticación SASL funciona como se espera. También es una buena idea intentar conectarse a Memcached desde un servidor diferente al que no se le permita conectarse para verificar que las reglas de firewall que creó sean efectivas.

Conclusión

En este tutorial, exploró cómo configurar Memcached con Sockets de dominio IPv4, IPv6, TCP, UDP y Unix. También aprendió a proteger su servidor Memcached habilitando la autenticación SASL. Finalmente, aprendió a vincular Memcached a su interfaz de red local o privada y a configurar reglas de firewall para limitar el acceso a Memcached.

Para obtener más información sobre Memcached, consulte la documentación del proyecto.

Write a Comment

Tu dirección de correo electrónico no será publicada.