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

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

Ubuntu 16.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

page:port仕事用コンピュータ(MyWorkIPスクリプト)と携帯電話(動的IP)から特定のコンテンツにアクセスしようとすると、すべてをテストしていますが、どちらのデバイスでもアクセスできます。私にとって必要なのは、MyWorkIP他のIPを拒否して、電話がそのIPにアクセスできないようにすることです。

私はIPtablesの設定がうまくいかないので、どこから調査を始めるべきかわかりません...(このサーバーにはXがインストールされていません。

どんなアイデア/考えがありますか?

答え1

私はこれを使って作業できました:

ipyouwanttoallowを除くすべての接続(インバウンドとアウトバウンド)を削除します。
    iptables -I DOCKER ! -s ipyouwanttoallow -j DROP
コンテナローカルIPから世界へのすべての接続を受け入れます。
    iptables -I DOCKER -s localipofyourcontainer -d 0.0.0.0/0 -j ACCEPT
外部サーバーがコンテナ要求に応答できるようにするために必要です。
    iptables -I DOCKER  -m state --state ESTABLISHED,RELATED -j ACCEPT

答え2

2つの問題がある可能性があります。

  • インターフェイスで転送を有効にするか、デフォルトで転送を有効にする必要があります。
  • モバイルから転送する必要があります(work_ipも可能です)。

ファイアウォールルールを作成するには、ファイアウォール作成ツールを使用することをお勧めします。私はこの方法を好みますが、shorewallその理由は文書化されていて、構成例が良く、ファイルで構成されているからです。 ufw代替案です。どちらもUbuntuパッケージで提供されています。

トンネルまたはプロキシを使用してアクセスを提供できます。

関連情報