web-dev-qa-db-ja.com

mongodbへのローカル接続をブロックするiptables

私はVM(Ubuntu 12.04.4 LTS)with mongodb(2.0.4)を持っており、iptablesでSSH(in/out)のみを受け入れ、他には何も受け入れないように制限したいです。これが方法です。私のセットアップスクリプトはルールをセットアップするように見えます:

#!/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、すべての宛先が許可されている)にOUTPUTルールを追加すると、それが機能することに気づきました。だから私はそれが出力と関係があると思いますか?しかし、ホストからの発信トラフィックが原因で、mongodbがローカル接続の受け入れを許可しないのはなぜですか?!

2
Niklas9

接続は、送信元IP:ポートと宛先IP:ポートで構成されます。ソースIP:ポートからのパケットは、OUTPUTチェーンを通過する必要があります。これは、ループバックインターフェイスに接続している場合でも発生するため、127.0.0.1への発信接続を許可する必要があることがわかりました。

多くのサービスがループバックインターフェイスを使用しているため、ループバックインターフェイスをブロックしないのが普通であり、そうすると問題が発生する可能性があります。

2
user9517