Comment configurer l'accès à distance pour MongoDB sur Ubuntu 20.04
Une version antérieure de ce didacticiel a été écrite par Melissa Anderson.
Introduction
MongoDB est une base de données orientée document utilisée dans de nombreuses applications Web modernes. Par défaut, il n'autorise que les connexions provenant du même serveur sur lequel il est installé. Si vous souhaitez gérer MongoDB à distance ou le connecter à un serveur d'applications distinct, vous devez apporter quelques modifications à la configuration par défaut.
Dans ce didacticiel, vous allez configurer une installation MongoDB pour autoriser en toute sécurité l'accès à partir d'un ordinateur distant de confiance. Pour ce faire, vous allez mettre à jour vos règles de pare-feu pour fournir à la machine distante un accès au port sur lequel MongoDB écoute les connexions, puis mettre à jour son fichier de configuration pour modifier son paramètre de liaison IP. Ensuite, dans une dernière étape, vous testerez que votre machine distante est capable d'établir avec succès la connexion à votre base de données.
Conditions préalables
Pour terminer ce tutoriel, vous aurez besoin de :
- Un serveur exécutant Ubuntu 20.04. Ce serveur doit avoir un utilisateur administratif non root et un pare-feu configuré avec UFW. Configurez cela en suivant notre guide de configuration initiale du serveur pour Ubuntu 20.04.
- MongoDB installé sur votre serveur. Ce didacticiel suppose que vous avez installé MongoDB 4.4 ou une version plus récente. Vous pouvez installer cette version en suivant notre tutoriel sur Comment installer MongoDB sur Ubuntu 20.04.
- Un deuxième ordinateur à partir duquel vous accéderez à votre instance MongoDB. Pour plus de simplicité, ce didacticiel suppose que cette machine est un autre serveur Ubuntu 20.04, avec un utilisateur administratif non root et un pare-feu UFW configuré conformément à notre guide de configuration initiale du serveur pour Ubuntu 20.04. Cependant, les étapes 1 et 2, qui décrivent la procédure réelle d'activation de la connectivité à distance sur le serveur de base de données, fonctionneront quel que soit le système d'exploitation exécuté sur la machine distante.
Enfin, bien qu'il ne soit pas nécessaire de suivre ce didacticiel, nous vous recommandons fortement de sécuriser votre installation MongoDB en créant un compte d'utilisateur administratif pour la base de données et en activant l'authentification. Pour ce faire, suivez notre tutoriel sur Comment sécuriser MongoDB sur Ubuntu 20.04.
Étape 1 - Réglage du pare-feu
En supposant que vous ayez suivi le didacticiel de configuration initiale du serveur préalable et que ait activé un pare-feu UFW sur votre serveur , votre installation MongoDB sera inaccessible depuis Internet. Si vous avez l'intention d'utiliser MongoDB uniquement localement avec des applications exécutées sur le même serveur, il s'agit du paramètre recommandé et sécurisé. Cependant, si vous souhaitez pouvoir vous connecter à votre serveur MongoDB à partir d'un emplacement distant, vous devez autoriser les connexions entrantes sur le port où la base de données écoute en ajoutant une nouvelle règle UFW.
Commencez par vérifier sur quel port votre installation MongoDB écoute avec la commande lsof
. Cette commande renvoie généralement une liste avec chaque fichier ouvert dans un système, mais lorsqu'elle est combinée avec l'option -i
, elle répertorie uniquement les fichiers ou les flux de données liés au réseau.
La commande suivante redirigera la sortie produite par lsof -i
vers une commande grep
qui recherche une chaîne nommée mongo
:
sudo lsof -i | grep mongo
Cet exemple de sortie montre que MongoDB écoute les connexions sur son port par défaut, 27017
:
Outputmongod 82221 mongodb 11u IPv4 913411 0t0 TCP localhost:27017 (LISTEN)
Dans la plupart des cas, MongoDB ne doit être accessible qu'à partir de certains emplacements de confiance, comme un autre serveur hébergeant une application ou une machine locale utilisée pour gérer une instance MongoDB distante. Une façon de configurer cela consiste à exécuter la commande suivante sur votre serveur MongoDB, qui ouvre l'accès au port par défaut de MongoDB tout en n'autorisant explicitement que l'adresse IP de l'autre machine de confiance.
Exécutez la commande suivante, en veillant à remplacer trusted_machine_ip
par l'adresse IP de l'ordinateur distant de confiance que vous utiliserez pour accéder à votre instance MongoDB.
Remarque : Si vous n'êtes pas sûr de l'adresse IP de la machine de confiance, vous pouvez exécuter la commande curl
suivante. Cela accédera au site Web icanhazip.com
, qui renverra l'adresse IP de la machine à partir de laquelle vous exécutez la commande :
curl -4 icanhazip.com
De plus, si la sortie de la commande précédente a montré que votre installation de MongoDB écoute sur un port autre que celui par défaut, utilisez ce numéro de port à la place de 27017
dans cette commande :
sudo ufw allow from trusted_machine_ip to any port 27017
À l'avenir, si vous souhaitez accéder à MongoDB à partir d'une autre machine, exécutez à nouveau cette commande avec l'adresse IP de la nouvelle machine à la place de trusted_machine_ip
.
Vous pouvez vérifier la modification des paramètres du pare-feu avec ufw
:
sudo ufw status
La sortie montrera que le trafic vers le port 27017
depuis le serveur distant est désormais autorisé :
OutputStatus: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 27017 ALLOW trusted_machine_ip OpenSSH (v6) ALLOW Anywhere (v6)
Vous pouvez trouver des paramètres de pare-feu plus avancés pour restreindre l'accès aux services dans UFW Essentials : règles et commandes de pare-feu communes.
Ensuite, vous lierez MongoDB à l'adresse IP publique du serveur afin de pouvoir y accéder depuis votre ordinateur distant.
Étape 2 - Configuration d'un bindIP public
À ce stade, même si le port est ouvert, MongoDB est actuellement lié à 127.0.0.1
, l'interface réseau de bouclage local. Cela signifie que MongoDB ne peut accepter que les connexions provenant du serveur sur lequel il est installé.
Pour autoriser les connexions à distance, vous devez modifier le fichier de configuration MongoDB - /etc/mongod.conf
- pour lier en plus MongoDB à une adresse IP accessible par votre ordinateur distant de confiance. De cette façon, votre installation MongoDB pourra écouter les connexions établies à votre serveur MongoDB à partir de machines distantes.
Ouvrez le fichier de configuration MongoDB dans votre éditeur de texte préféré. L'exemple suivant utilise nano
:
sudo nano /etc/mongod.conf
Trouvez la section network interfaces
, puis la valeur bindIp
:
/etc/mongod.conf
. . . # network interfaces net: port: 27017 bindIp: 127.0.0.1 . . .
Ajoutez une virgule à cette ligne suivie de l'adresse IP publique de votre serveur MongoDB :
/etc/mongod.conf
. . . # network interfaces net: port: 27017 bindIp: 127.0.0.1,mongodb_server_ip . . .
Veuillez noter qu'il doit s'agir de l'adresse IP du serveur sur lequel vous avez installé MongoDB, et non l'adresse IP de votre machine distante de confiance.
Enregistrez et fermez le fichier. Si vous avez utilisé nano
, faites-le en appuyant sur CTRL + X
, Y
, puis ENTER
.
Ensuite, redémarrez MongoDB pour appliquer ce changement :
sudo systemctl restart mongod
Ensuite, votre installation MongoDB pourra accepter les connexions à distance de toutes les machines que vous avez autorisées à accéder au port 27017
. Enfin, vous pouvez tester si la machine de confiance que vous avez autorisée via le pare-feu à l'étape 1 peut atteindre l'instance MongoDB exécutée sur votre serveur.
Étape 3 - Test de la connectivité à distance
Maintenant que vous avez configuré votre installation MongoDB pour écouter les connexions qui proviennent de son adresse IP routable publiquement et que vous avez accordé à votre ordinateur distant l'accès via le pare-feu de votre serveur au port par défaut de Mongo, vous pouvez tester que l'ordinateur distant est capable de se connecter.
Remarque : Comme mentionné dans la section Prérequis, ce didacticiel suppose que votre machine distante est un autre serveur exécutant Ubuntu 20.04. La procédure d'activation des connexions à distance décrite dans les étapes 1 et 2 devrait fonctionner quel que soit le système d'exploitation exécuté par votre machine distante, mais les méthodes de test décrites dans cette étape ne fonctionnent pas de manière universelle sur tous les systèmes d'exploitation.
Une façon de tester que votre ordinateur de confiance est capable de se connecter à l'instance MongoDB consiste à utiliser la commande nc
. nc
, abréviation de netcat, est un utilitaire utilisé pour établir des connexions réseau avec TCP ou UDP. Il est utile pour tester dans des cas comme celui-ci car il vous permet de spécifier à la fois une adresse IP et un numéro de port.
Tout d'abord, connectez-vous à votre serveur de confiance en utilisant SSH :
ssh sammy@trusted_machine_ip
Exécutez ensuite la commande nc
suivante, qui inclut l'option -z
. Cela limite nc
à rechercher uniquement un démon d'écoute sur le serveur cible sans lui envoyer de données. Rappelez-vous du tutoriel d'installation des prérequis que MongoDB s'exécute en tant que démon de service, ce qui rend cette option utile pour tester la connectivité. Il inclut également l'option v
qui augmente la verbosité de la commande, obligeant netcat à renvoyer une sortie qu'il ne renverrait pas autrement.
Exécutez la commande nc
suivante depuis votre serveur distant de confiance, en veillant à remplacer mongodb_server_ip
par l'adresse IP du serveur sur lequel vous avez installé MongoDB :
nc -zv mongodb_server_ip 27017
Si le serveur de confiance peut accéder au démon MongoDB, sa sortie indiquera que la connexion a réussi :
OutputConnection to mongodb_server_ip 27017 port [tcp/*] succeeded!
En supposant que vous ayez une version compatible du shell mongo
installée sur votre serveur distant, vous pouvez à ce stade vous connecter directement à l'instance MongoDB installée sur le serveur hôte.
Une façon de se connecter consiste à utiliser une chaîne de connexion URI, comme ceci :
mongo "mongodb://mongo_server_ip:27017"
Remarque : Si vous avez suivi le didacticiel recommandé Comment sécuriser MongoDB sur Ubuntu 20.04, vous aurez fermé l'accès à votre base de données aux utilisateurs non authentifiés. Dans ce cas, vous devez utiliser un URI qui spécifie un nom d'utilisateur valide, comme ceci :
mongo "mongodb://username@mongo_server_ip:27017"
Le shell vous demandera automatiquement d'entrer le mot de passe de l'utilisateur.
Avec cela, vous avez confirmé que votre serveur MongoDB peut accepter les connexions du serveur de confiance.
Conclusion
Vous pouvez maintenant accéder à votre installation MongoDB depuis un serveur distant. À ce stade, vous pouvez gérer votre base de données MongoDB à distance à partir du serveur de confiance. Vous pouvez également configurer une application pour qu'elle s'exécute sur le serveur approuvé et utilise la base de données à distance.
Si vous n'avez pas configuré d'utilisateur administratif et activé l'authentification, toute personne ayant accès à votre serveur distant peut également accéder à votre installation MongoDB. Si vous ne l'avez pas déjà fait, nous vous recommandons fortement de suivre notre guide sur Comment sécuriser MongoDB sur Ubuntu 20.04 pour ajouter un utilisateur administratif et verrouiller davantage les choses.