iptables блокирует локальное подключение к mongodb

У меня есть виртуальная машина (Ubuntu 12.04.4 LTS) с mongodb (2.0.4), которую я хочу ограничить с помощью iptables только приемом SSH (вход/выход) и ничего больше. Вот как выглядит мой сценарий установки для настройки правил:

#!/bin/sh

# DROP everything
iptables -F
iptables -X
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP

# input
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -j ACCEPT  # accept all ports for local conns

# output
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT  # ssh

Но с активированными этими правилами я не могу подключиться к mongodb локально.

ubuntu ~ $ mongo
MongoDB shell version: 2.0.4
connecting to: test
Fri Mar 28 09:40:40 Error: couldn't connect to server 127.0.0.1 shell/mongo.js:84
exception: connect failed

Без них работает нормально. Есть ли какой-то особый случай брандмауэра, который необходимо учитывать при развертывании mongodb?

Я попытался установить mysql, и он отлично работает для локальных подключений. SSH работает как положено (может подключаться снаружи и изнутри).

После установки правила iptables выглядят следующим образом:

ubuntu ~ $ sudo iptables -nvL
Chain INPUT (policy DROP 8 packets, 1015 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  449  108K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  *      *       127.0.0.1            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
   32  2048 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 27 packets, 6712 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  379  175K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

person Niklas9    schedule 28.03.2014    source источник
comment
Я заметил, что если я добавлю правило OUTPUT для порта 27017, оно сработает. Вопрос в том, почему? Я не хочу открывать его, не понимая, почему, или оставляя его потенциально открытым   -  person Niklas9    schedule 01.04.2014


Ответы (2)


Исходящий трафик также должен приниматься для обратной связи (127.0.0.1).

Добавление этого заставило его работать:

iptables -A OUTPUT -o lo -j ACCEPT
person Niklas9    schedule 01.04.2014

Вы можете попробовать, заменив строку

iptables -A INPUT -s 127.0.0.1 -j ACCEPT

С

iptables -A INPUT -i lo -j ACCEPT
person abraXxl    schedule 31.03.2014
comment
Я попробовал это, к сожалению, та же проблема, что и раньше. Вот как выглядит правило при применении: 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 - person Niklas9; 01.04.2014