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パッケージで提供されています。
トンネルまたはプロキシを使用してアクセスを提供できます。