Comment installer et sécuriser Memcached sur Ubuntu 16.04

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

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

[[step-1 -—- installation-memcached-from-the-official-repositories]] == Étape 1 - Installation de Memcached à partir des dépôts officiels

Si Memcached n’est pas déjà installé sur votre serveur, vous pouvez l’installer à partir des référentiels Ubuntu officiels. Tout d’abord, assurez-vous que votre index de paquet local est mis à jour:

sudo apt-get update

Ensuite, installez le paquet officiel comme suit:

sudo apt-get install memcached

Nous pouvons également installerlibmemcached-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, avec des outils vous permettant de tester sa connectivité. Nous pouvons maintenant passer à la sécurisation de ses paramètres de configuration.

[[step-2 -—- securing-memcached-configuration-settings]] == Étape 2 - Sécurisation des paramètres de configuration Memcached

Pour nous assurer que notre instance Memcached écoute sur l'interface locale127.0.0.1, nous vérifierons le paramètre par défaut dans le fichier de configuration situé à/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 avecnano:

sudo nano /etc/memcached.conf

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

/etc/memcached.conf

. . .
-l 127.0.0.1

Si vous voyez le paramètre 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 le rendre plus ouvert, il est également judicieux de désactiver UDP, car il est plus susceptible d'être exploité lors d'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 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.

[[step-3 -—- ajoutant-allowed-users]] == Étape 3 - 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 commandememcstat. 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:

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 activer 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 supprimez les commentaires de 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 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 02 22:03:58 memcached systemd-memcached-wrapper[2760]: Initialized SASL.
. . .

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

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

Ajout d'un utilisateur authentifié

Nous pouvons maintenant téléchargersasl2-bin, un package qui contient des programmes d'administration pour la base de données utilisateur 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 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 donnerons à l'utilisateurmemcache 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

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

[[step-4 -—- allow-access-over-the-private-network-optional]] == Étape 4 - Autorisation de l'accès sur le réseau privé (facultatif)

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 deUFW 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. Vous aurez besoin de connaître lesclient server’s private IP address pour configurer vos règles de pare-feu.

Si vous utilisez le pare-feuUFW, vous pouvez limiter l'accès à votre instance Memcached en tapant 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 nosufw essentials guide.

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

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

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

Nous pouvons rouvrir 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 réseau privée 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 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.