Comment installer et sécuriser Memcached sur CentOS 7

introduction

Les systèmes de mise en cache des 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 manière, ils réduisent le nombre de requêtes directes adressées à vos bases de données.

Comme des systèmes tels que Memcached peuvent contribuer aux attaques par déni de service s’ils ne sont pas configurés correctement, 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 tutoriel suppose que vous avez 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:

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

Installation de Memcached à partir de 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 paquet local est mis à jour:

sudo yum update

Ensuite, installez le paquet officiel comme suit:

sudo yum install memcached

Nous pouvons également installerlibmemcached, 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, avec des outils vous permettant 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 locale127.0.0.1, nous allons modifier la variableOPTIONS dans le fichier de configuration situé à/etc/sysconfig/memcached. Nous allons également désactiver l'écouteur UDP. Ces deux actions protégeront notre serveur contre les attaques par déni de service.

Vous pouvez ouvrir/etc/sysconfig/memcached avecvi:

sudo vi /etc/sysconfig/memcached

Localisez la variableOPTIONS, qui ressemblera initialement à ceci:

/etc/sysconfig/memcached

. . .
OPTIONS=""

La liaison à notre interface réseau locale limitera le trafic aux clients sur le même ordinateur. Nous allons faire cela en ajoutant-l 127.0.0.1 à notre variableOPTIONS. 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é.

Le protocole UDP étant beaucoup plus efficace que TCP pour les attaques par déni de service, nous pouvons également désactiver l'écouteur UDP. Pour ce faire, nous allons ajouter le paramètre-U 0 à notre variableOPTIONS. 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 tapant:

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 quememcached est lié à l'adresse127.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 SASL (Simple Authentication and Security Layer), un framework qui dissocie les procédures d'authentification des protocoles d'application. Nous activerons SASL dans notre fichier de configuration Memcached, puis nous ajouterons un utilisateur avec des informations d'authentification.

Configuration du support SASL

Nous pouvons d'abord tester la connectivité de notre instance Memcached avec la commandememstat. Cela nous aidera à établir que SASL et l'authentification de l'utilisateur sont activés après la modification de nos fichiers de configuration.

Pour vérifier que Memcached est opérationnel, tapez 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 activer SASL. Tout d'abord, nous pouvons ajouter le paramètre-S à notre variableOPTIONS 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 variableOPTIONS. L'option-vv fournira une sortie détaillée à/var/log/memcached, ce qui nous aidera lors du débogage. Ajoutez ces options à la variableOPTIONS 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 examiner les journaux pour nous assurer que la prise en charge de SASL a été activée:

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ée, cette commande doit échouer sans authentification:

memstat --servers="127.0.0.1"

Cette commande ne devrait 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 qui s'est terminée. En règle générale, tout autre élément que0 indique un échec du processus. Dans ce cas, nous devrions voir un état de sortie de1, qui nous indique que la commandememstat 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 dePLAIN. Ces packages,cyrus-sasl-devel etcyrus-sasl-plain, nous permettront de créer et d'authentifier notre utilisateur. Installez les paquets 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 les éléments suivants 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 définironsmech_list surplain, 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 allons créer 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 commandesaslpasswd2 pour créer une nouvelle entrée pour notre utilisateur dans notre base de données en utilisant l'option-c. Notre utilisateur serasammy ici, mais vous pouvez remplacer ce nom par votre propre utilisateur. En utilisant l'option-f, nous allons spécifier le chemin de 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 voulons donner à l'utilisateurmemcached 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

L'exécution dememstat à nouveau confirmera si notre processus d'authentification a fonctionné ou non. Cette fois, nous allons l'exécuter avec nos informations 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 le support SASL et l’authentification des utilisateurs.

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

Nous avons expliqué comment configurer Memcached pour qu’il écoute 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. Dans certains cas, vous devrez peut-être 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é.

[.note] #Note: Nous verrons comment configurer les paramètres du pare-feu à l'aide deFirewallD dans cette section, mais il est également possible d'utiliser les pare-feu Cloud DigitalOcean pour créer ces paramètres. Pour plus d'informations sur la configuration des pare-feu Cloud DigitalOcean, consultez nosIntroduction to DigitalOcean Cloud Firewalls. Pour en savoir plus sur la façon de limiter le trafic entrant vers des machines particulières, consultez la section de ce tutoriel surapplying firewall rules using tags and server names et notre discussion surfirewall tags.
#

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

Avant de régler vos paramètres de configuration, il est judicieux de configurer des règles de pare-feu afin de limiter les ordinateurs pouvant se connecter à votre serveur Memcached. Si vous avez suivi les prérequis et installé FirewallD sur votre serveur et quenot prévoit de se 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 sur127.0.0.1, grâce à la variableOPTIONS que nous avons définie précédemment, et il ne devrait donc y avoir aucun problème 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 commandefirewall-cmd.

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

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

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

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

Ensuite, spécifiez les adresses IP privées qui devraient être autorisées à accéder à Memcached. Pour cela, vous aurez besoin de connaître vosclient server’s private IP address:

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 zonepublic par défaut.

Avec ces changements en place, nous pouvons procéder aux modifications de configuration nécessaires de notre service Memcached, en le liant à l’interface réseau privée de notre serveur.

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

La première étape de la liaison à l’interface réseau privée de notre serveur consistera à modifier la variableOPTIONS 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, recherchez la variableOPTIONS. Nous pouvons maintenant modifier-l 127.0.0.1 pour refléter l'adresse 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 avecnetstat 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. Il est également judicieux de vérifier l'accès à partir d'un client non autorisé afin de garantir l'efficacité de vos règles de pare-feu.

Conclusion

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

Pour en savoir plus sur Memcached, consultez lesproject documentation. Pour plus d'informations sur l'utilisation de Memcached, consultez notre tutoriel surHow To Install and Use Memcache on Ubuntu 14.04.