私はRaspberry Pi 4でDockerといくつかのコンテナ化されたWebアプリケーションを実行しており、すべてのトラフィックがリバースプロキシでnginxを通過できるようにします。
私の問題は、ネットワーク上のすべてのデバイスからDockerコンテナポートにアクセスできることです。つまり、nginxをバイパスします。
これは私のnginx設定です。
server {
listen 80;
server_name myRaspi;
location /cool {
proxy_pass http://127.0.0.1:5000/cool;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
ご覧のとおり、http://myRaspi/coolからhttp://localhost:5000/cool(Dockerコンテナ内で実行されているWebアプリケーション)にトラフィックを転送しています。現在、ネットワーク上のすべてのデバイスからhttp://myRaspi/coolおよびhttp://myRaspi:5000/coolにアクセスできます。
フォローするドッカー公式文書以下を設定します。
iptables -I DOCKER-USER -i ext_if ! -s 192.168.174.0/24 -j DROP
sudo iptables --list
新しい表示ルールを実行します。
私のすべてのネットワークデバイスがサブネットにあるので、これは192.168.175
http://myRaspi/coolとhttp://myRaspi:5000/coolへのすべてのトラフィックが機能しないことを願っています(例外をブロックしたため)192.168.174
。中192.168.175
)。
残念ながら、この方法は機能しません。それでもhttp://myRaspi/coolとhttp://myRaspi:5000/coolにアクセスできます。
その後、以前sudo reboot
に作成されたルールは消え、sudo iptables --list
それ以上含まれなくなります。
私はまだDocker / Linux / nginxネットワーキングの世界に慣れていないので、すべてのトラフィックがnginxをリバースプロキシに渡し、Raspiの外部からコンテナポートにアクセスすることを不可能にするようにDocker / nginxを設定するのを手伝ってくれてありがとう。 。
答え1
私の間違いは、コンテナの起動時にDockerポートを公開する方法にありました。
このようなコンテナを実行する前に、-p 5000:5000
これを使用しています-p 127.0.0.1:5000:5000
。これによりポートはローカルでのみ公開されるため、http://myRaspi:5000/cool 経由でアクセスできなくなります。手動操作は必要ありませんiptables
。