MongoDB - Autoriser l’accès à distance

MongoDB - Autoriser l'accès à distance

Dans ce tutoriel, nous allons vous montrer comment activer l'accès à distance à un serveur MongoDB. Voici l'environnement testé:

1. Serveur MongoDB

  • IP privée - 192.168.161.100

  • IP publique - 45.56.65.100

  • MongoDB 2.6.3, port 27017

  • Pare-feu IpTables

2. Serveur d'applications (même réseau LAN)

  • IP privée - 192.168.161.200

  • IP publique - non pertinent

3. Développeurs à la maison (réseau LAN différent, WAN)

  • IP publique - 10.0.0.1

P.S By default, MongoDB doesn’t allow remote connections.

1. Lier IP

$ vim /etc/mongod.conf

# /etc/mongod.conf

# Listen to local interface only. Comment out to listen on all interfaces.
bind_ip = 127.0.0.1

Par défaut, MongoDB se lie à l'interface locale uniquement, cela restreindra les connexions distantes. Si vous ne vous souciez pas de la sécurité, il vous suffit de commenter pour accepter les connexions à distance (NON recommandé).

1.1 To allow LAN connections from Application Server.
Comme les deux sont dans le même réseau LAN, il vous suffit de lier MongoDB à sa propre interface IP privée.

$ vim /etc/mongod.conf

# /etc/mongod.conf

# Listen to local and LAN interfaces.
bind_ip = 127.0.0.1,192.168.161.100

Common Mistake
Ne placez pas l'adresse IP du serveur d'applications dans l'optionbind_ip. Cette optionbind_ip indique à MongoDB d'accepter les connexions à partir de quelles interfaces de réseau local, pas de quelle «adresse IP distante».

Par défaut - Échec de connexion

AS (192.168.161.200) <-- LAN --> MongoDB(192.168.161.100) <--> bind_ip (127.0.0.1)

Maintenant - Connexion réussie

AS (192.168.161.200) <-- LAN --> MongoDB(192.168.161.100) <--> bind_ip (192.168.161.100, 127.0.0.1)

Les développeurs de1.2 To allow remote access for developers at home.
accéderont à distance via l'IP publique MongoDB 45.56.65.100, pour permettre cela, lier également l'interface IP publique.

$ vim /etc/mongod.conf

# /etc/mongod.conf

# Listen to local, LAN and Public interfaces.
bind_ip = 127.0.0.1,192.168.161.100,45.56.65.100

Note
Pour les développeurs à la maison, il est recommandé de configurer une connexion VPN, au lieu d'ouvrir la connexion IP publique MongoDB, il est vulnérable aux attaques de personnes.

Redémarrez MongoDB pour prendre effet.

$ sudo service mongod restart
[ ok ] Restarting database: mongod.

2. Pare-feu IpTables

Si vous avez un pare-feu, autorisez les connexions sur le port27017, port par défaut de MongoDB.

2.1 Any connections can connect to MongoDB on port 27017

iptables -A INPUT -p tcp --dport 27017 -j ACCEPT

2.2 Only certain IP can connect to MongoDB on port 27017

iptables -A INPUT -s  -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d  -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -s 192.168.161.200 -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d 192.168.161.200 -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

2.3 Here is the firewall rules using in one of my MongoDB servers.

/etc/iptables.firewall.rules

*filter

-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j ACCEPT

#  Allow HTTP and HTTPS connections from anywhere
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp --dport 27017 -j ACCEPT

#-A INPUT -s  -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
#-A OUTPUT -d  -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

#  Allow SSH connections
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

#  Allow ping
-A INPUT -p icmp -j ACCEPT

#  Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Drop incoming connections if IP make more than 15 connection attempts to port 80 within 60 seconds
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60  --hitcount 15 -j DROP

#  Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

Mettre à jour les règles iptables

sudo vim /etc/iptables.firewall.rules
sudo iptables-restore < /etc/iptables.firewall.rules