저는 Raspberry Pi 4에서 Docker와 일부 컨테이너화된 웹 애플리케이션을 실행하고 있으며 모든 트래픽이 역방향 프록시로 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 컨테이너 내에서 실행되는 웹 애플리케이션)로 트래픽을 전달하고 있습니다. 현재 네트워크의 모든 장치에서 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
.