Comment Installer et sécuriser Memcached sur Ubuntu 20.04

Une version précédente de ce tutoriel a été écrite par Kathleen Juell.

Introduction

Les systèmes de mise en cache d’objets mémoire tels que Memcached peuvent optimiser les performances de la base de données backend en stockant temporairement les informations en mémoire, en conservant les enregistrements fréquemment ou récemment demandés. De cette façon, ils réduisent le nombre de requêtes directes vers vos bases de données.

Dans ce guide, vous apprendrez comment installer et configurer un serveur Memcached. Vous apprendrez également à ajouter une authentification à secure Memcached à l’aide de la couche d’authentification et de sécurité Simple (SASL). Enfin, vous apprendrez à lier Memcached à une interface réseau locale ou privée pour vous assurer qu’elle n’est accessible que sur des réseaux de confiance, par des utilisateurs authentifiés.

Prérequis

Pour suivre ce tutoriel, vous aurez besoin de:

  • Un serveur Ubuntu 20.04 avec un utilisateur non root sudo et un pare-feu activé. Pour configurer cela, vous pouvez suivre notre tutoriel de configuration initiale du serveur avec Ubuntu 20.04.

Avec ces prérequis en place, vous serez prêt à installer et sécuriser votre serveur Memcached.

Sinon, si vous souhaitez expérimenter l’installation et la configuration de Memcached dans votre navigateur à l’aide d’un terminal interactif, cliquez sur Lancer un terminal interactif ! bouton ci-dessous pour commencer.

Lancez une borne Interactive !

Étape 1 – Installation de Memcached

Si vous n’avez pas déjà installé Memcached sur votre serveur, vous pouvez l’installer à partir des dépôts Ubuntu officiels. Tout d’abord, assurez-vous que l’index de votre package local est mis à jour à l’aide de la commande suivante:

  • sudo apt update

Ensuite, installez le package officiel comme suit:

  • sudo apt install memcached

Vous pouvez également installer libmemcached-tools, qui est un package contenant divers outils que vous pouvez utiliser pour examiner, tester et gérer votre serveur Memcached. Ajoutez le package à votre serveur avec la commande suivante:

  • sudo apt install libmemcached-tools

Memcached devrait maintenant être installé en tant que service sur votre serveur, ainsi que des outils qui vous permettront de tester sa connectivité.

Pour démarrer Memcached, exécutez la commande systemctl suivante:

  • sudo systemctl start memcached

Maintenant, vous pouvez passer à la sécurisation de ses paramètres de configuration.

Étape 2 – Configuration des paramètres réseau Memcached (Facultatif)

Si votre serveur Memcached doit uniquement prendre en charge les connexions IPv4 locales à l’aide de TCP, vous pouvez ignorer cette section et passer à l’étape 3 de ce tutoriel. Sinon, si vous souhaitez configurer Memcached pour utiliser des sockets UDP, des sockets de domaine Unix ou ajouter la prise en charge des connexions IPv6, procédez comme suit dans cette section du didacticiel.

Tout d’abord, assurez-vous que votre instance Memcached écoute sur l’interface de bouclage IPv4 locale 127.0.0.1. La version actuelle de Memcached livrée avec Ubuntu et Debian a son paramètre de configuration -l défini sur l’interface locale, ce qui signifie qu’elle est configurée pour n’accepter que les connexions du serveur sur lequel Memcached est en cours d’exécution.

Vérifiez que Memcached est actuellement lié à l’interface IPv4 127.0.0.1 locale et n’écoute que les connexions TCP à l’aide de la commande ss:

  • sudo ss -plunt

Les différents indicateurs modifieront la sortie ss de la manière suivante:

  • -p ajoute le nom du processus qui utilise un socket
  • -l limite la sortie aux sockets d’écoute uniquement, par opposition à l’inclusion également de sockets connectés à d’autres systèmes
  • -u inclut des sockets basés sur UDP dans la sortie
  • -n affiche des valeurs numériques dans la sortie au lieu de noms et valeurs lisibles par l’homme
  • -t inclut des sockets basés sur TCP dans la sortie

Vous devriez recevoir une sortie comme suit:

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)). . .

Cette sortie confirme que memcached est lié à l’adresse de bouclage IPv4 127.0.0.1 en utilisant uniquement le protocole TCP.

Maintenant que vous avez confirmé que Memcached est configuré pour prendre en charge IPv4 avec des connexions TCP uniquement, vous pouvez modifier /etc/memcached.conf pour ajouter la prise en charge des connexions UDP, des sockets de domaine Unix ou des connexions IPv6.

Configuration d’IPv6

Pour activer les connexions IPv6 à Memcached, ouvrez le fichier /etc/memcached.conf avec nano ou votre éditeur préféré:

  • sudo nano /etc/memcached.conf

Tout d’abord, trouvez la ligne suivante dans le fichier:

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

Cette ligne est l’endroit où Memcached est configuré pour écouter sur l’interface IPv4 locale. Pour ajouter le support IPv6, ajoutez une ligne contenant l’adresse de bouclage locale IPv6 (::1) comme ceci :

/etc/memcached.conf

. . .-l 127.0.0.1-l ::1

Enregistrez et fermez le fichier en appuyant sur CTRL+O puis ENTER pour enregistrer, puis CTRL+X pour quitter nano. Redémarrez ensuite Memcached à l’aide de la commande systemctl:

  • sudo systemctl restart memcached

Vous pouvez maintenant vérifier que Memcached écoute également les connexions IPv6 en répétant la commande ss de la section précédente:

  • sudo ss -plunt

Vous devriez recevoir une sortie comme suit:

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))

Les parties en surbrillance de la sortie indiquent que Memcached écoute maintenant les connexions TCP sur l’interface IPv6 locale.

Notez que si vous souhaitez désactiver le support IPv4 et écouter uniquement les connexions IPv6, vous pouvez supprimer la ligne -l 127.0.0.1 de /etc/memcached.conf et redémarrer le service à l’aide de la commande systemctl.

Configuration d’UDP

Si vous souhaitez utiliser Memcached avec des sockets UDP, vous pouvez activer la prise en charge d’UDP en éditant le fichier de configuration /etc/memcached.conf.

Ouvrez /etc/memcached.conf en utilisant nano ou votre éditeur préféré, puis ajoutez la ligne suivante à la fin du fichier:

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

Si vous n’avez pas besoin de prise en charge TCP, recherchez la ligne -p 11211 et remplacez-la par -p 0 pour désactiver les connexions TCP.

Lorsque vous avez terminé de modifier le fichier, enregistrez-le et fermez-le en entrant CTRL+O pour enregistrer, puis CTRL+X pour quitter.

Ensuite, redémarrez votre service Memcached avec la commande systemctl pour appliquer vos modifications:

  • sudo systemctl restart memcached

Vérifiez que Memcached écoute les connexions UDP à l’aide de la commande ss -plunt:

  • sudo ss -plunt

Si vous avez désactivé la prise en charge TCP et que les connexions IPv6 sont activées, vous devriez recevoir une sortie comme suit:

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)). . .

Notez que votre sortie peut être différente si vous n’avez activé que les connexions IPv4 et si vous avez laissé les connexions TCP activées.

Configuration des Sockets de domaine Unix

Si vous souhaitez utiliser Memcached avec des Sockets de domaine Unix, vous pouvez activer cette prise en charge en éditant le fichier de configuration /etc/memcached.conf. Notez que si vous configurez Memcached pour utiliser un socket de domaine Unix, Memcached désactivera la prise en charge TCP et UDP, alors assurez-vous que vos applications n’ont pas besoin de se connecter à l’aide de ces protocoles avant d’activer la prise en charge des sockets.

Ouvrez /etc/memcached.conf en utilisant nano ou votre éditeur préféré, puis ajoutez les lignes suivantes à la fin du fichier:

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

L’indicateur -a détermine les autorisations sur le fichier du socket. Assurez-vous que l’utilisateur qui doit se connecter à Memcached fait partie du groupe memcache sur votre serveur, sinon il recevra un message d’autorisation refusée lorsqu’il tentera d’accéder au socket.

Ensuite, redémarrez votre service Memcached avec la commande systemctl pour appliquer vos modifications:

  • sudo systemctl restart memcached

Vérifiez que Memcached écoute les connexions de socket de domaine Unix à l’aide de la commande ss -lnx:

  • sudo ss -lnx | grep memcached

L’indicateur -x limite la sortie de ss pour afficher les fichiers de socket. Vous devriez recevoir une sortie comme suit:

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

Maintenant que vous avez configuré les paramètres réseau de Memcached, vous pouvez passer à l’étape suivante de ce tutoriel, qui consiste à ajouter SASL pour l’authentification à Memcached.

Étape 3 – Ajout d’utilisateurs autorisés

Pour ajouter des utilisateurs authentifiés à votre service Memcached, vous pouvez utiliser Simple Authentication and Security Layer (SASL), qui est un framework qui dissocie les procédures d’authentification des protocoles d’application. Tout d’abord, vous ajouterez la prise en charge de SASL à votre serveur, puis vous configurerez un utilisateur avec des informations d’identification d’authentification. Avec tout en place, vous pouvez ensuite activer SASL dans le fichier de configuration de Memcached et confirmer que tout fonctionne correctement.

Ajout d’un utilisateur authentifié

Pour commencer à ajouter le support SASL, vous devrez installer le package sasl2-bin, qui contient des programmes d’administration pour la base de données des utilisateurs SASL. Cet outil vous permettra de créer un ou plusieurs utilisateurs authentifiés. Exécutez la commande suivante pour l’installer:

  • sudo apt install sasl2-bin

Ensuite, créez le répertoire et le fichier que Memcached vérifiera pour ses paramètres de configuration SASL à l’aide de la commande mkdir:

  • sudo mkdir -p /etc/sasl2

Créez maintenant le fichier de configuration SASL en utilisant nano ou votre éditeur préféré:

  • sudo nano /etc/sasl2/memcached.conf

Ajoutez les lignes suivantes :

/etc/sasl2/memcached.conf
log_level: 5mech_list: plainsasldb_path: /etc/sasl2/memcached-sasldb2

En plus de spécifier le niveau de journalisation, mech_list est défini sur plain, ce qui indique à Memcached qu’il doit utiliser son propre fichier de mot de passe et vérifier un mot de passe en texte brut. La dernière ligne que vous avez ajoutée spécifie le chemin d’accès au fichier de base de données utilisateur que vous allez créer ensuite. Enregistrez et fermez le fichier lorsque vous avez terminé.

Maintenant, vous allez créer une base de données SASL avec les informations d’identification de l’utilisateur. Vous utiliserez la commande saslpasswd2 avec l’indicateur -c pour créer une nouvelle entrée utilisateur dans la base de données SASL. L’utilisateur sera sammy ici, mais vous pouvez remplacer ce nom par votre propre utilisateur. L’indicateur -f spécifie le chemin d’accès à la base de données, qui sera le chemin que vous avez défini /etc/sasl2/memcached.conf:

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

Enfin, donnez à l’utilisateur et au groupe memcache la propriété de la base de données SASL avec la commande chown suivante:

  • sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2

Vous avez maintenant une configuration SASL en place que Memcached peut utiliser pour l’authentification. Dans la section suivante, vous confirmerez d’abord que Memcached s’exécute avec ses paramètres par défaut, puis vous le reconfigurerez et vous vérifierez qu’il fonctionne avec l’authentification SASL.

Configuration du support SASL

Nous pouvons d’abord tester la connectivité de notre instance Memcached avec la commande memcstat. Cette vérification nous aidera à établir que Memcached est en cours d’exécution et correctement configuré avant que l’authentification SASL et l’authentification de l’utilisateur ne soient activées. Après avoir apporté des modifications à nos fichiers de configuration, nous exécuterons à nouveau la commande pour vérifier la sortie différente.

Pour vérifier que Memcached est opérationnel à l’aide de la commande memcstat, tapez ce qui suit:

  • memcstat --servers="127.0.0.1"

Si vous utilisez IPv6, remplacez ::1 par l’adresse IPv4 127.0.0.1. Si vous utilisez un socket de domaine Unix, utilisez le chemin d’accès au socket à la place de l’adresse IP, par exemple --servers=/var/run/memcached/memached.sock.

Lorsque vous exécutez la commande memcstat et que vous vous connectez à Memcached avec succès, vous devriez recevoir une sortie comme suit:

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

Remarque : Si vous utilisez Memcached avec le support UDP, la commande memcstat ne pourra pas se connecter au port UDP. Vous pouvez utiliser la commande netcat suivante pour vérifier la connectivité:

  • nc -u 127.0.0.1 11211 -vz

Si Memcached répond, vous devriez recevoir une sortie comme suit:

Output
Connection to 127.0.0.1 11211 port succeeded!

Si vous utilisez Memcached avec IPv6 et UDP, la commande doit être la suivante:

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

Vous pouvez maintenant passer à l’activation de SASL. Pour ce faire, ajoutez le paramètre -S à /etc/memcached.conf. Ouvrez à nouveau le fichier avec nano ou votre éditeur préféré:

  • sudo nano /etc/memcached.conf

Au bas du fichier, ajoutez ce qui suit:

/etc/memcached.conf
. . .-S

Ensuite, recherchez et décommentez l’option -vv, qui fournira une sortie détaillée à /var/log/memcached. La ligne non commentée devrait ressembler à ceci :

/etc/memcached.conf
. . .-vv

Enregistrez et fermez le fichier.

Redémarrez maintenant le service Memcached en utilisant la commande systemctl suivante:

  • sudo systemctl restart memcached

Ensuite, vérifiez les journaux journalctl pour Memcached pour vous assurer que la prise en charge de SASL est activée:

  • sudo journalctl -u memcached |grep SASL

Vous devriez recevoir une ligne de sortie comme la suivante, indiquant que le support SASL a été initialisé:

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

Vous pouvez maintenant vérifier à nouveau la connectivité à Memcached. Avec la prise en charge de SASL en place et initialisée, la commande memcstat suivante devrait échouer sans informations d’authentification valides:

  • memcstat --servers="127.0.0.1"

La commande ne doit pas produire de sortie. Tapez la commande shell suivante pour vérifier son état:

  • echo $?

$? retournera toujours le code de sortie de la dernière commande qui s’est terminée. En règle générale, tout autre élément que 0 indique une défaillance du processus. Dans ce cas, vous devriez recevoir un statut de sortie de 1, ce qui indique que la commande memcstat a échoué.

L’exécution de memcstat à nouveau, cette fois avec un nom d’utilisateur et un mot de passe confirmera si le processus d’authentification a fonctionné ou non. Exécutez la commande suivante avec vos informations d’identification substituées à la place des valeurs sammy et your_password` si vous avez utilisé des informations d’identification différentes:

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

Vous devriez recevoir une sortie comme suit:

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

Votre service Memcached est maintenant configuré et exécuté avec le support SASL et l’authentification de l’utilisateur.

Étape 4 – Autoriser l’accès sur le réseau privé (Facultatif)

Par défaut, Memcached est uniquement configuré pour écouter sur l’interface de bouclage locale (127.0.0.1), ce qui protège l’interface Memcached de l’exposition à des tiers. Cependant, il peut y avoir des cas où vous devrez autoriser l’accès à partir d’autres serveurs. Dans ce cas, vous pouvez ajuster vos paramètres de configuration pour lier Memcached à une interface réseau privée.

Remarque: Nous expliquerons comment configurer les paramètres du pare-feu à l’aide d’UFW dans cette section, mais il est également possible d’utiliser les pare-feu DigitalOcean Cloud pour créer ces paramètres. Pour plus d’informations sur la configuration des pare-feu Cloud DigitalOcean, consultez notre Introduction aux Pare-feu Cloud DigitalOcean. Pour en savoir plus sur la façon de limiter le trafic entrant à des machines particulières, consultez la section de ce tutoriel sur l’application des règles de pare-feu à l’aide de balises et de noms de serveur et notre discussion sur les balises de pare-feu.

Limitation de l’accès IP Avec des pare-feu

Avant d’ajuster vos paramètres de configuration, il est conseillé de configurer des règles de pare-feu pour limiter les machines pouvant se connecter à votre serveur Memcached. Vous devrez d’abord enregistrer l’adresse IP privée de toute machine que vous souhaitez utiliser pour vous connecter à Memcached. Une fois que vous avez l’adresse IP privée (ou les adresses), vous ajouterez une règle de pare-feu explicite pour permettre à la machine d’accéder à Memcached.

Si vous utilisez le pare-feu UFW, vous pouvez limiter l’accès à votre instance Memcached en tapant ce qui suit sur votre serveur Memcached:

  • sudo ufw allow from client_system_private_IP/32 to any port 11211

Si plusieurs systèmes accèdent à Memcached via le réseau privé, assurez-vous d’ajouter des règles ufw supplémentaires pour chaque machine en utilisant la règle ci-dessus comme modèle.

Vous pouvez en savoir plus sur les pare-feu UFW en lisant notre guide ufw essentials.

Avec ces modifications en place, vous pouvez ajuster le service Memcached pour qu’il se lie à l’interface réseau privée de votre serveur.

Liaison de Memcached à l’interface réseau privée

Maintenant que votre pare-feu est en place, vous pouvez ajuster la configuration de Memcached pour la liaison à l’interface réseau privée de votre serveur au lieu de 127.0.0.1.

Tout d’abord, recherchez l’interface réseau privée de votre serveur Memcached à l’aide de la commande ip suivante

  • ip -brief address show

Selon la configuration réseau de votre serveur, la sortie peut être différente de l’exemple suivant:

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

Dans cet exemple, les interfaces réseau sont identifiées par leurs noms eth0 et eth1. Les adresses IPv4 en surbrillance sur la ligne eth0 sont les adresses IP publiques du serveur.

L’adresse 10.136.32.212 en surbrillance sur la ligne eth1 est l’adresse IPv4 privée du serveur, et l’adresse fe80::2cee:92ff:fe21:8bc4 est l’adresse IPv6 privée. Vos adresses IP seront différentes mais se situeront toujours dans les plages suivantes basées sur la spécification RFC 1918):

  • 10.0.0.0 à 10.255.255.255 (préfixe 10/8)
  • 172.16.0.0 à 172.31.255.255 (préfixe 172.16/12)
  • 192.168.0.0 à 192.168.255.255 (192.préfixe 168/16)

Une fois que vous avez trouvé l’adresse IP privée de votre serveur, ouvrez à nouveau le fichier /etc/memcached.conf en utilisant nano ou votre éditeur préféré:

  • sudo nano /etc/memcached.conf

Recherchez la ligne -l 127.0.0.1 que vous avez cochée ou modifiée précédemment et modifiez l’adresse pour qu’elle corresponde à l’interface réseau privée de votre serveur :

/etc/memcached.conf
. . .-l memcached_servers_private_IP. . .

Si vous souhaitez que Memcached écoute sur plusieurs adresses, ajoutez une autre ligne similaire pour chaque adresse, IPv4 ou IPv6 en utilisant le format -l memcached_servers_private_IP.

Enregistrez et fermez le fichier lorsque vous avez terminé.

Ensuite, redémarrez le service Memcached:

  • sudo systemctl restart memcached

Vérifiez vos nouveaux paramètres avec ss pour confirmer la modification:

  • 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)). . .

Testez la connectivité de votre client externe pour vous assurer que vous pouvez toujours accéder au service. C’est une bonne idée de vérifier également l’accès d’un client non autorisé (essayez de vous connecter sans utilisateur ni mot de passe) pour vous assurer que votre authentification SASL fonctionne comme prévu. C’est également une bonne idée d’essayer de se connecter à Memcached à partir d’un serveur différent qui n’est pas autorisé à se connecter pour vérifier que les règles de pare-feu que vous avez créées sont efficaces.

Conclusion

Dans ce tutoriel, vous avez exploré comment configurer Memcached avec des sockets de domaine IPv4, IPv6, TCP, UDP et Unix. Vous avez également appris à sécuriser votre serveur Memcached en activant l’authentification SASL. Enfin, vous avez appris à lier Memcached à votre interface réseau locale ou privée et à configurer des règles de pare-feu pour limiter l’accès à Memcached.

Pour en savoir plus sur Memcached, consultez la documentation du projet.

Write a Comment

Votre adresse e-mail ne sera pas publiée.