Comment installer et sécuriser Memcached sur Ubuntu 16.04
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 :
- Un serveur Ubuntu 16.04, configuré en suivant notre tutoriel Configuration initiale du serveur avec Ubuntu 16.04.
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.