Comment installer et sécuriser Memcached sur Ubuntu 16.04

De Get Docs
Aller à :navigation, rechercher

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.

Étant donné que des systèmes comme Memcached peuvent contribuer à des attaques par déni de service s'ils sont mal configurés, il est important de sécuriser vos serveurs Memcached. Dans ce guide, nous expliquerons comment protéger votre serveur Memcached en liant votre installation à une interface réseau locale ou privée et en créant un utilisateur autorisé pour votre instance Memcached.

Conditions préalables

Ce didacticiel suppose que vous disposez d'un serveur configuré avec un utilisateur sudo non root et un pare-feu de base. Si ce n'est pas le cas, configurez les éléments suivants :

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

Étape 1 - Installation de Memcached à partir des référentiels officiels

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 :

sudo apt-get update

Ensuite, installez le package officiel comme suit :

sudo apt-get install memcached

Nous pouvons également installer libmemcached-tools, une bibliothèque qui fournit plusieurs outils pour travailler avec votre serveur Memcached :

sudo apt-get 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é. Nous pouvons maintenant passer à la sécurisation de ses paramètres de configuration.

Étape 2 - Sécurisation des paramètres de configuration Memcached

Pour nous assurer que notre instance Memcached écoute sur l'interface locale 127.0.0.1, nous allons vérifier le paramètre par défaut dans le fichier de configuration situé dans /etc/memcached.conf. La version actuelle de Memcached fournie avec Ubuntu et Debian a le paramètre -l défini sur l'interface locale, ce qui empêche les attaques par déni de service du réseau. Nous pouvons inspecter ce paramètre pour nous assurer qu'il est correctement défini.

Vous pouvez ouvrir /etc/memcached.conf avec nano :

sudo nano /etc/memcached.conf

Pour inspecter le paramètre d'interface, recherchez la ligne suivante dans le fichier :

/etc/memcached.conf

. . .
-l 127.0.0.1

Si vous voyez le réglage par défaut de -l 127.0.0.1, il n'est pas nécessaire de modifier cette ligne. Si vous modifiez ce paramètre pour qu'il soit plus ouvert, il est également judicieux de désactiver UDP, car il est plus susceptible d'être exploité dans des attaques par déni de service. Pour désactiver UDP (sans affecter TCP), ajoutez l'option suivante au bas de ce fichier :

/etc/memcached.conf

. . .
-U 0

Enregistrez et fermez le fichier lorsque vous avez terminé.

Redémarrez votre service Memcached pour appliquer vos modifications :

sudo systemctl restart memcached

Vérifiez que Memcached est actuellement lié à l'interface locale et n'écoute que les connexions TCP en saisissant :

sudo netstat -plunt

Vous devriez voir la sortie suivante :

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

Cela confirme que memcached est lié à l'adresse 127.0.0.1 en utilisant uniquement TCP.

Étape 3 - Ajout d'utilisateurs autorisés

Pour ajouter des utilisateurs authentifiés à votre service Memcached, il est possible d'utiliser Simple Authentication and Security Layer (SASL), un framework qui découple les procédures d'authentification des protocoles applicatifs. Nous allons activer SASL dans notre fichier de configuration Memcached, puis passer à l'ajout d'un utilisateur avec des informations d'authentification.

Configuration de la prise en charge SASL

Nous pouvons d'abord tester la connectivité de notre instance Memcached avec la commande memcstat. Cela nous aidera à établir que SASL et l'authentification des utilisateurs sont activées après avoir apporté des modifications à nos fichiers de configuration.

Pour vérifier que Memcached est opérationnel, saisissez ce qui suit :

memcstat --servers="127.0.0.1"

Vous devriez voir une sortie comme celle-ci :

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

Nous pouvons maintenant passer à l'activation de SASL. Tout d'abord, nous allons ajouter le paramètre -S à /etc/memcached.conf. Ouvrez à nouveau le fichier :

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 le service Memcached :

sudo systemctl restart memcached

Ensuite, nous pouvons jeter un œil aux journaux pour nous assurer que le support SASL a été activé :

sudo journalctl -u memcached

Vous devriez voir la ligne suivante, indiquant que le support SASL a été initialisé :

Output. . .
Mar 02 22:03:58 memcached systemd-memcached-wrapper[2760]: Initialized SASL.
. . .

Nous pouvons vérifier à nouveau la connectivité, mais comme SASL a été initialisé, cette commande devrait échouer sans authentification :

memcstat --servers="127.0.0.1"

Cette commande ne doit pas produire de sortie. Nous pouvons taper ce qui suit pour vérifier son statut :

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, nous devrions voir un état de sortie de 1, qui nous indique que la commande memcstat a échoué.

Ajout d'un utilisateur authentifié

Nous pouvons maintenant télécharger sasl2-bin, un package contenant des programmes d'administration pour la base de données des utilisateurs SASL. Cela nous permettra de créer notre utilisateur authentifié :

sudo apt-get install sasl2-bin

Ensuite, nous allons créer le répertoire et le fichier que Memcached vérifiera pour ses paramètres de configuration SASL :

sudo mkdir -p /etc/sasl2
sudo nano /etc/sasl2/memcached.conf 

Ajoutez ce qui suit au fichier de configuration SASL :

/etc/sasl2/memcached.conf

mech_list: plain
log_level: 5
sasldb_path: /etc/sasl2/memcached-sasldb2

En plus de spécifier notre niveau de journalisation, nous allons définir mech_list 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. Nous spécifierons également le chemin d'accès au fichier de base de données utilisateur que nous créerons ensuite. Enregistrez et fermez le fichier lorsque vous avez terminé.

Nous allons maintenant créer une base de données SASL avec nos informations d'identification d'utilisateur. Nous utiliserons la commande saslpasswd2 pour créer une nouvelle entrée pour notre utilisateur dans notre base de données en utilisant l'option -c. Notre utilisateur sera sammy ici, mais vous pouvez remplacer ce nom par votre propre utilisateur. En utilisant l'option -f, nous spécifierons le chemin d'accès à notre base de données, qui sera le chemin que nous avons défini dans /etc/sasl2/memcached.conf :

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

Enfin, nous donnerons à l'utilisateur memcache la propriété de la base de données SASL :

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

Redémarrez le service Memcached :

sudo systemctl restart memcached

Exécuter à nouveau memcstat confirmera si notre processus d'authentification a fonctionné ou non. Cette fois, nous allons l'exécuter avec nos identifiants d'authentification :

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

Vous devriez voir une sortie comme celle-ci :

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

Notre service Memcached fonctionne maintenant avec succès avec le support SASL et l'authentification des utilisateurs.

Étape 4 - Autoriser l'accès sur le réseau privé (facultatif)

Nous avons expliqué comment configurer Memcached pour écouter sur l'interface locale, ce qui peut empêcher les attaques par déni de service en protégeant 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 à l'interface de réseau privé.

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 aurez besoin de connaître l'adresse IP privée du serveur client pour configurer vos règles de pare-feu.

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

sudo ufw allow from client_servers_private_IP/32 to any port 11211

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.

Nous pouvons ouvrir à nouveau le fichier /etc/memcached.conf en tapant :

sudo nano /etc/memcached.conf

À l'intérieur, 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
. . .

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 netstat pour confirmer la modification :

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

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é pour vous assurer que vos règles de pare-feu sont efficaces.

Conclusion

Dans ce didacticiel, nous avons expliqué comment sécuriser votre serveur Memcached en le configurant pour qu'il se lie à votre interface réseau locale ou privée et en activant l'authentification SASL.

Pour en savoir plus sur Memcached, consultez la documentation du projet. Pour plus d'informations sur l'utilisation de Memcached, consultez notre tutoriel sur Comment installer et utiliser Memcache sur Ubuntu 14.04.