Comment installer et sécuriser Memcached sur Ubuntu 18.04

De Get Docs
Aller à :navigation, rechercher

Une version précédente de ce didacticiel 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 principale en stockant temporairement des 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 pour sécuriser Memcached à l'aide de l'authentification simple et de la couche de sécurité (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.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de :

Une fois 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 le bouton Lancer un terminal interactif ! ci-dessous pour commencer.

Lancez une borne interactive !

Étape 1 - Installation de Memcached

Si Memcached n'est pas déjà installé sur votre serveur, vous pouvez l'installer à partir des dépôts officiels Ubuntu. Tout d'abord, assurez-vous que votre index de 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é. Vous pouvez maintenant passer à la sécurisation de ses paramètres de configuration.

Étape 2 - Configuration des paramètres réseau Memcached (facultatif)

Si votre serveur Memcached n'a besoin que de prendre en charge les connexions IPv4 locales à l'aide de TCP, vous pouvez ignorer cette section et passer à l'Étape 3 de ce didacticiel. Sinon, si vous souhaitez configurer Memcached pour utiliser les sockets UDP, les sockets de domaine Unix ou ajouter la prise en charge des connexions IPv6, suivez les étapes appropriées 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 fournie 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 exécuté.

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

sudo ss -plunt

Les différents drapeaux modifieront la sortie ss des manières suivantes :

  • -p ajoute le nom du processus qui utilise un socket
  • -l limite la sortie aux prises d'écoute uniquement, au lieu d'inclure également les prises connectées à 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 de valeurs lisibles par l'homme
  • -t inclut des sockets basés sur TCP dans la sortie

Vous devriez recevoir une sortie comme celle-ci :

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

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, Unix Domain Sockets ou 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, recherchez 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 la prise en charge d'IPv6, ajoutez une ligne contenant l'adresse de bouclage local 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 sur ENTER pour enregistrer, puis sur 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 celle-ci :

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

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 la prise en charge d'IPv4 et n'écouter que 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 UDP en modifiant 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 la prise en charge de 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 saisissant 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 en utilisant à nouveau 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 celle-ci :

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

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

Configuration des sockets de domaine Unix

Si vous souhaitez utiliser Memcached avec les sockets de domaine Unix, vous pouvez activer cette prise en charge en modifiant 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. Assurez-vous donc 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

Le drapeau -a détermine les permissions 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 Unix Domain Socket à l'aide de la commande ss -lnx :

sudo ss -lnx | grep memcached

Le drapeau -x limite la sortie de ss pour afficher les fichiers socket. Vous devriez recevoir une sortie comme celle-ci :

Outputu_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 didacticiel, 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 SASL (Simple Authentication and Security Layer), qui est un cadre qui dissocie les procédures d'authentification des protocoles d'application. Vous allez d'abord ajouter la prise en charge de SASL à votre serveur, puis vous allez configurer un utilisateur avec des identifiants 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 la prise en charge SASL, vous devez installer le package sasl2-bin, qui contient des programmes d'administration pour la base de données utilisateur 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 à l'aide de nano ou de votre éditeur préféré :

sudo nano /etc/sasl2/memcached.conf

Ajoutez les lignes suivantes :

/etc/sasl2/memcached.conf

log_level: 5
mech_list: plain
sasldb_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 mots de passe et vérifier un mot de passe en clair. 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 créerez ensuite. Enregistrez et fermez le fichier lorsque vous avez terminé.

Vous allez maintenant 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 d'utilisateur dans la base de données SASL. L'utilisateur sera sammy ici, mais vous pouvez remplacer ce nom par votre propre utilisateur. Le drapeau -f spécifie le chemin d'accès à la base de données, qui sera le chemin que vous avez défini dans /etc/sasl2/memcached.conf :

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

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

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 allez d'abord confirmer que Memcached fonctionne avec ses paramètres par défaut, puis le reconfigurer et vérifier qu'il fonctionne avec l'authentification SASL.

Configuration de la prise en charge 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 l'activation de SASL et de l'authentification des utilisateurs. Après avoir apporté des modifications à nos fichiers de configuration, nous exécuterons à nouveau la commande pour vérifier les différentes sorties.

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

memcstat --servers="127.0.0.1"

Si vous utilisez IPv6, substituez ::1 à la place de 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 celle-ci :

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

Remarque : Si vous utilisez Memcached avec prise en charge 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 celle-ci :

OutputConnection to 127.0.0.1 11211 port [udp/*] 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 à l'aide de la commande systemctl suivante :

sudo systemctl restart memcached

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

sudo journalctl -u memcached |grep SASL

Vous devriez recevoir une ligne de sortie comme celle-ci, indiquant que la prise en charge SASL a été initialisée :

OutputSep 23 17:00:55 memcached systemd-memcached-wrapper[2303930]: Initialized SASL.

Vous pouvez maintenant vérifier à nouveau la connectivité à Memcached. Avec la prise en charge SASL en place et initialisée, la commande memcstat suivante devrait échouer sans identifiants 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 $?

$? renverra toujours le code de sortie de la dernière commande sortie. En règle générale, tout autre élément que 0 indique un échec du processus. Dans ce cas, vous devriez recevoir un état de sortie de 1, qui indique que la commande memcstat a échoué.

Exécuter à nouveau memcstat, 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 en remplaçant vos identifiants par les valeurs sammy et your_password` si vous avez utilisé des identifiants différents :

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

Vous devriez recevoir une sortie comme celle-ci :

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

Votre service Memcached est maintenant configuré et fonctionne avec le support SASL et l'authentification des utilisateurs.

É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 local (127.0.0.1), ce qui protège l'interface Memcached de l'exposition à des tiers. Cependant, il peut arriver que vous deviez 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 de UFW dans cette section, mais il est également possible d'utiliser DigitalOcean Cloud Firewalls 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 didacticiel sur l'application de règles de pare-feu à l'aide de balises et de noms de serveur et notre discussion sur les balises de pare-feu.


Limiter l'accès IP avec des pare-feu

Avant d'ajuster vos paramètres de configuration, il est conseillé de définir 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 (ou les adresses) IP privée(s), 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 saisissant 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 de base ufw.

Une fois 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 de réseau privé

Maintenant que votre pare-feu est en place, vous pouvez ajuster la configuration Memcached pour vous lier à 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é de votre serveur Memcached à l'aide de la commande ip suivante

ip -brief address show

Selon la configuration réseau de votre serveur, le résultat peut être différent de l'exemple suivant :

Outputlo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             203.0.113.1/20 10.10.0.5/16 2001:DB8::1/64 fe80::7ced:9ff:fe52:4695/64
eth1             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 privée IPv6. Vos adresses IP seront différentes mais tomberont 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 (préfixe 192.168/16)

Une fois que vous avez trouvé la ou les adresses IP privées 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 vérifiée ou modifiée précédemment et modifiez l'adresse pour qu'elle corresponde à l'interface de réseau privé 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
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))
. . .

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 autre serveur 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 IPv4, IPv6, TCP, UDP et Unix Domain Sockets. 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.