MongoDB - разрешить удаленный доступ

MongoDB - разрешить удаленный доступ

В этом руководстве мы покажем вам, как включить удаленный доступ к серверу MongoDB. Вот протестированная среда:

1. Сервер MongoDB

  • Частный IP - 192.168.161.100

  • Публичный IP - 45,56,65,100

  • MongoDB 2.6.3, порт 27017

  • IpTables Firewall

2. Сервер приложений (та же сеть LAN)

  • Частный IP - 192.168.161.200

  • Общественный IP - не имеет значения

3. Разработчики дома (Другая сеть LAN, WAN)

  • Публичный IP - 10.0.0.1

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

1. Привязать 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

По умолчанию MongoDB связывается только с локальным интерфейсом, это ограничивает удаленные соединения. Если вы не заботитесь о безопасности, просто закомментируйте, чтобы принимать любые удаленные подключения (НЕ рекомендуется).

1.1 To allow LAN connections from Application Server.
Поскольку оба находятся в одной сети LAN, вам просто нужно привязать MongoDB к его собственному частному IP-интерфейсу.

$ 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
Не указывайте IP-адрес сервера приложений в параметреbind_ip. Эта опцияbind_ip указывает MongoDB принимать соединения с каких интерфейсов локальной сети, а не с какого «удаленного IP-адреса».

По умолчанию - Ошибка подключения

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

Сейчас - соединение успешно

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

1.2 To allow remote access for developers at home.
Разработчики будут осуществлять удаленный доступ через общедоступный IP-адрес MongoDB 45.56.65.100, чтобы разрешить это, также привяжите общедоступный IP-интерфейс.

$ 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
Для разработчиков дома рекомендуется установить VPN-соединение, вместо того, чтобы открывать общедоступное IP-соединение MongoDB, оно уязвимо для атак со стороны людей.

Перезапустите MongoDB для вступления в силу.

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

2. IpTables Firewall

Если у вас есть брандмауэр, разрешите соединения на порту27017, порт по умолчанию 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

Note
Проконсультируйтесь с этимMongoDB firewall documentation

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

Обновите правила iptables

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