Comment configurer l'accès à distance pour MongoDB sur CentOS 8
Une version antérieure de ce didacticiel a été écrite par Melissa Anderson.
Introduction
MongoDB, également connu sous le nom de Mongo, est une base de données de documents open source 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 le fichier de configuration de Mongo 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 CentOS 8. Ce serveur doit avoir un utilisateur administratif non root et un pare-feu configuré avec
firewalld
. Configurez-le en suivant notre guide de configuration initiale du serveur pour CentOS 8. - 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 CentOS 8.
- 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 CentOS 8. Comme votre serveur MongoDB, cette machine doit avoir un utilisateur administratif non root et un pare-feu configuré avec
firewalld
comme décrit dans notre guide de configuration initiale du serveur pour CentOS 8. 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 CentOS 8.
Étape 1 - Réglage du pare-feu
En supposant que vous ayez suivi le didacticiel de configuration initiale du serveur prérequis et configuré un pare-feu 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 de pare-feu.
Commencez par vérifier sur quel port votre installation MongoDB écoute avec la commande netstat
. netstat
est un utilitaire de ligne de commande qui affiche des informations sur les connexions réseau TCP actives.
La commande suivante redirigera la sortie produite par sudo netstat -plunt
vers une commande grep
qui recherche toutes les lignes contenant la chaîne mongo
:
sudo netstat -plunt | grep mongo
Cet exemple de sortie indique que MongoDB écoute les connexions à 127.0.0.1
, une adresse de bouclage spéciale qui représente localhost, sur son port par défaut, 27017
:
Outputtcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 15918/mongod
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. Une façon de configurer cela avec firewalld
consiste à exécuter la commande firewall-cmd
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 d'un autre serveur de confiance.
Exécutez la commande suivante, en veillant à remplacer trusted_server_ip
par l'adresse IP de la machine distante de confiance que vous utiliserez pour accéder à votre instance MongoDB :
Remarque : Si la sortie de la commande précédente indiquait 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 firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="trusted_server_ip" port protocol="tcp" port="27017" accept'
Cette commande ajoute de manière permanente une règle riche ' à la zone public
du pare-feu. Les règles riches sont des fonctionnalités de firewalld
qui vous permettent d'avoir un contrôle plus précis sur qui a accès à votre serveur grâce à l'utilisation d'un certain nombre d'options. La règle fournie dans cette commande spécifie que seule l'adresse trusted_server_ip
doit être autorisée à établir des connexions à travers le mur. Il précise également qu'il ne peut le faire qu'en utilisant le protocole TCP pour se connecter au port 27017
.
Si la règle a été ajoutée avec succès, la commande renverra success
dans la sortie :
Outputsuccess
Rechargez le pare-feu pour appliquer la nouvelle règle :
sudo firewall-cmd --reload
À 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_server_ip
.
Vous pouvez vérifier la modification des paramètres du pare-feu en exécutant firewall-cmd
avec l'option --list-all
:
sudo firewall-cmd --list-all
La sortie inclura la nouvelle règle enrichie autorisant le trafic sur le port 27017
depuis le serveur distant :
Outputpublic (active) . . . rich rules: rule family="ipv4" source address="157.230.58.94" port port="27017" protocol="tcp" accept
Vous pouvez en savoir plus sur firewalld
dans Comment configurer un pare-feu à l'aide de firewalld sur CentOS 8.
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 à l'adresse IP routable publiquement de votre serveur. 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 . . .
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 le serveur distant de confiance que vous avez autorisé 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 CentOS 8. La procédure d'activation des connexions à distance décrite aux é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.
Tout d'abord, connectez-vous à votre serveur de confiance en utilisant SSH :
ssh sammy@trusted_server_ip
Une façon de tester que votre serveur distant 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.
Si vous ne l'avez pas déjà fait, vous devrez peut-être installer nc
. La version des référentiels CentOS officiels est en fait une implémentation appelée ncat, qui a été écrite par le projet Nmap en tant que mise à jour pour netcat.
Installez ncat en tapant :
sudo dnf install nc
Appuyez sur y
puis sur ENTER
lorsque vous êtes invité à confirmer que vous souhaitez installer le package.
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 ncat à 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 qu'il a établi une connexion :
OutputNcat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to mongodb_server_ip:27017. Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.
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 CentOS 8, 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 Mongo à distance depuis le 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 CentOS 8 pour ajouter un utilisateur administratif et verrouiller davantage les choses.