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 et 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 didacticiel suppose que vous disposez d'un serveur configuré avec un utilisateursudo
non root et un pare-feu de base. Si ce n'est pas le cas, configurez les éléments suivants:
-
Un serveur Ubuntu 18.04, configuré selon nosInitial Server Setup with Ubuntu 18.04 tutorial.
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 update
Ensuite, installez le paquet officiel comme suit:
sudo apt install memcached
Nous pouvons également installerlibmemcached-tools
, une bibliothèque qui fournit plusieurs outils pour travailler avec votre serveur Memcached:
sudo apt 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 également le protocole 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 2279/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: 2279
uptime: 65
time: 1546620611
version: 1.5.6
. . .
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. . .
Jan 04 16:51:12 memcached systemd-memcached-wrapper[2310]: 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 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 /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
Il vous sera demandé de saisir et de revérifier un mot de passe de votre choix.
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: 2772
uptime: 31
time: 1546621072
version: 1.5.6 Ubuntu
. . .
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. Pour plus d'informations sur les réseaux privés sur DigitalOcean, veuillez consulter ceoverview of DigitalOcean private networking.
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_server_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_server_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_server_private_IP:11211 0.0.0.0:* LISTEN 2912/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 didacticiel, 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.