iptables bloqueando a conexão local com o mongodb

2

Eu tenho uma VM (Ubuntu 12.04.4 LTS) com o mongodb (2.0.4) que quero restringir com o iptables para aceitar apenas SSH (entrada / saída) e nada mais. É assim que meu script de configuração parece configurar as regras:

#!/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

Mas com essas regras ativadas, não consigo me conectar ao mongodb localmente.

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

Sem eles, funciona bem. Existe algum caso especial de firewall que você precisa considerar ao implantar o mongodb?

Eu tentei instalar o mysql e ele funciona perfeitamente para conexões locais. O SSH funciona como excluído (pode se conectar de fora e de dentro).

As regras do iptables parecem com isso uma vez definidas:

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

Eu notei que se eu adicionar uma regra OUTPUT para a porta mongodb 27017 (tcp, todos os destinos permitidos) ela funciona. Então eu acho que tem algo a ver com a saída? Mas por que o mongodb não permitiria aceitar uma conexão local devido ao tráfego de saída do host?!

    
por Niklas9 01.04.2014 / 16:48

1 resposta

2

Uma conexão consiste em um IP de origem: Porta e um IP de destino: Porta. Pacotes do IP de origem: Port tem que percorrer a cadeia OUTPUT. Isso acontece mesmo quando você está se conectando à interface de loopback, assim como você descobriu que precisa permitir conexões de saída para 127.0.0.1.

É normal não bloquear a interface de loopback, pois muitos serviços a utilizam e isso pode causar problemas.

    
por 01.04.2014 / 17:04