iptables阻止本地连接到mongodb

我有一个VM(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 

我注意到,如果我添加一个输出规则mongodb端口27017(TCP,所有目的地允许)它的作品。 所以我猜这跟输出有关系 但是,为什么mongodb不允许接受本地连接,因为从主机传出的stream量?

连接由源IP:端口和目的IP:端口组成。 源IP:端口的数据包必须遍历OUTPUT链。 即使连接到回送接口,也会发生这种情况,因为您发现需要允许传出连接到127.0.0.1。

阻止回环接口是正常的,因为许多服务使用它,这样做可能会导致问题。