Comment installer et sécuriser Memcached sur CentOS 7

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 et installez les éléments suivants :

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

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 référentiels CentOS officiels. Tout d'abord, assurez-vous que votre index de package local est mis à jour :

sudo yum update

Ensuite, installez le package officiel comme suit :

sudo yum install memcached

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

sudo yum install libmemcached

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.

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 modifier la variable OPTIONS dans le fichier de configuration situé à /etc/sysconfig/memcached. Nous allons également désactiver l'écouteur UDP. Ces deux actions protégeront notre serveur des attaques par déni de service.

Vous pouvez ouvrir /etc/sysconfig/memcached avec vi :

sudo vi /etc/sysconfig/memcached

Localisez la variable OPTIONS, qui ressemblera initialement à ceci :

/etc/sysconfig/memcached

. . .
OPTIONS=""

La liaison à notre interface réseau locale limitera le trafic vers les clients sur la même machine. Nous le ferons en ajoutant -l 127.0.0.1 à notre variable OPTIONS. Cela peut être trop restrictif pour certains environnements, mais cela peut constituer un bon point de départ en tant que mesure de sécurité.

Étant donné que le protocole UDP est beaucoup plus efficace pour les attaques par déni de service que TCP, nous pouvons également désactiver l'écouteur UDP. Pour cela, nous allons ajouter le paramètre -U 0 à notre variable OPTIONS. Le fichier complet devrait ressembler à ceci :

/etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -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.

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

memstat --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 pouvons ajouter le paramètre -S à notre variable OPTIONS dans /etc/sysconfig/memcached, ce qui activera SASL. Ouvrez à nouveau le fichier :

sudo vi /etc/sysconfig/memcached

Nous ajouterons les paramètres -S et -vv à notre variable OPTIONS. L'option -vv fournira une sortie détaillée à /var/log/memcached, ce qui nous aidera lors du débogage. Ajoutez ces options à la variable OPTIONS comme suit :

/etc/sysconfig/memcached

. . .
OPTIONS="-l 127.0.0.1 -U 0 -S -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 05 18:16:11 memcached-server memcached[3846]: Initialized SASL.
. . .

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

memstat --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 memstat a échoué.

Ajout d'un utilisateur authentifié

Nous pouvons maintenant télécharger deux packages qui nous permettront de travailler avec la bibliothèque Cyrus SASL et ses mécanismes d'authentification, y compris les plugins prenant en charge les schémas d'authentification PLAIN. Ces packages, cyrus-sasl-devel et cyrus-sasl-plain, nous permettront de créer et d'authentifier notre utilisateur. Installez les packages en tapant :

sudo yum install cyrus-sasl-devel cyrus-sasl-plain

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 vi /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 souhaitons donner à l'utilisateur memcached la propriété de la base de données SASL :

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

Redémarrez le service Memcached :

sudo systemctl restart memcached

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

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

Autoriser l'accès sur le réseau privé

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 de pare-feu à l'aide de FirewallD 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. Si vous avez suivi les prérequis et installé FirewallD sur votre serveur et que vous ne prévoyez pas de vous connecter à Memcached depuis un autre hôte, vous n'avez pas besoin d'ajuster vos règles de pare-feu. Votre instance Memcached autonome devrait être à l'écoute sur 127.0.0.1, grâce à la variable OPTIONS que nous avons définie précédemment, et il ne devrait donc y avoir aucun souci concernant le trafic entrant. Cependant, si vous prévoyez d'autoriser l'accès à votre serveur Memcached à partir d'autres hôtes, vous devrez modifier les paramètres de votre pare-feu à l'aide de la commande firewall-cmd.

Commencez par ajouter une zone Memcached dédiée à votre stratégie firewalld :

sudo firewall-cmd --permanent --new-zone=memcached

Ensuite, spécifiez le port que vous souhaitez garder ouvert. Memcached utilise le port 11211 par défaut :

sudo firewall-cmd --permanent --zone=memcached --add-port=11211/tcp

Ensuite, spécifiez les adresses IP privées qui doivent être autorisées à accéder à Memcached. Pour cela, vous aurez besoin de connaître l'adresse IP privée de votre serveur client ' :

sudo firewall-cmd --permanent --zone=memcached --add-source=client_server_private_IP

Rechargez le pare-feu pour vous assurer que les nouvelles règles prennent effet :

sudo firewall-cmd --reload

Les paquets provenant de l'adresse IP de votre client doivent maintenant être traités conformément aux règles de la zone Memcached dédiée. Toutes les autres connexions seront traitées par la zone public par défaut.

Une fois ces modifications en place, nous pouvons passer aux modifications de configuration nécessaires de notre service Memcached, en le liant à l'interface de réseau privé de notre serveur.

Liaison de Memcached à l'interface de réseau privé

La première étape de la liaison à l'interface de réseau privé de notre serveur consistera à modifier la variable OPTIONS que nous avons définie précédemment.

Nous pouvons ouvrir à nouveau /etc/sysconfig/memcached en tapant :

sudo vi /etc/sysconfig/memcached

À l'intérieur, localisez la variable OPTIONS. Nous pouvons maintenant modifier -l 127.0.0.1 pour refléter l'IP privée de notre serveur Memcached :

/etc/sysconfig/memcached

. . .
OPTIONS="-l memcached_servers_private_IP -U 0 -S -vv"

Enregistrez et fermez le fichier lorsque vous avez terminé.

Redémarrez à nouveau 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.