web-dev-qa-db-ja.com

IPTables-特定のIPアドレスに対してのみDockerポート転送を許可する

Ubuntu16.04でWebアプリをホストしています。このアプリのすべてのコンポーネントはDockerコンテナー内にあり、それらのほとんどは相互に通信する必要があるだけで、外部(PostgreSQLやElasticSearchなど)とは通信する必要はありません。たとえば、ElasticSearchはデフォルトでポート9200のプラグインインターフェースを公開します。

管理者として、これらのインターフェイスにアクセスする必要がありますが、仕事用のコンピューターのみに制限したいと思います。

私は次のことを試みました ポートに特定のIPのみを許可するように指示 、しかしDockerは私のルールを上書きしているようです:

## ALLOW specific ports only on ONE IP address:
# ElasticSearch
iptables -I INPUT -p tcp -s MyWorkIP --dport 9200 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 9200 -j DROP
iptables -I INPUT -p tcp -s MyWorkIP --dport 9300 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 9300 -j DROP
iptables -I INPUT -p tcp -s MyWorkIP --dport 5601 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 5601 -j DROP
# PostgreSQL
iptables -I INPUT -p tcp -s MyWorkIP --dport 5432 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 5432 -j DROP

仕事用のコンピューター(スクリプトではMyWorkIP)と電話(動的IP)から特定のpage:portにアクセスしようとしてすべてをテストしていますが、どのような試みでも両方のデバイスからのアクセスが許可されます。私が必要としているのは、MyWorkIP以外のIPが拒否されることです。だから私の電話はアクセスできませんでした。

私はIPtablesの構成があまり得意ではないので、どこから調査を開始すればよいかわかりません...(このサーバーにXがインストールされていません:私はすべてを一期で行います)

何か考え/アイデアはありますか?

3
gfd

私はそれをこれで動作させることができました:

    iptables -I DOCKER ! -s ipyouwanttoallow -j DROP
    iptables -I DOCKER -s localipofyourcontainer -d 0.0.0.0/0 -j ACCEPT
    iptables -I DOCKER  -m state --state ESTABLISHED,RELATED -j ACCEPT
0
mickael