IPTABLES : 외부 사용자에게만 포트 차단


0

두 개의 도커 컨테이너가 실행중인 서버가 있습니다. 그중 하나는와 함께 제공되는 작은 응용 프로그램의 프런트 엔드입니다 http-server. 이 애플리케이션은 Javascript 페치 API를 사용하여 다른 컨테이너에서 실행중인 Node.js 'json-server'모듈을 기반으로하는 매우 간단한 데이터베이스에서 데이터를 페치했습니다.

그렇게 json-server사람이 할 수있는 브라우저를 가리키는 경우, 외부 사용자가 사용할 수있는 포트 3000, 즉하게 http://example.com:3000, 내 데이터는 프론트 엔드가 제공하는 필터링 및 프리젠 테이션없이 사용할 수 있습니다. 이것은 내가 원하는 것이 아닙니다.

다른 도커 컨테이너가 평소처럼 데이터를 가져올 수 있도록 포트 3000을 외부 환경으로 차단하고 싶습니다. 나는 이것이 IP 기반으로 수행 될 수 있다고 생각하지만 그것을 수행하는 방법을 모르겠습니다.

이것은 현재 Iptables 구성이며, 대부분 Docker 자체에서 표준으로 작성됩니다.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:http-alt
ACCEPT     tcp  --  anywhere             172.17.0.3           tcp dpt:3000

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere 

위의 구성에서 IP 172.17.0.2는 내 프론트 엔드 애플리케이션이고 172.17.0.3은 내 데이터베이스 컨테이너의 IP입니다.

프론트 엔드 컨테이너가 시작되고 있습니다

docker run -p 80:8080 --name=frontend -d mtr/frontend

두 번째는

docker run -p 3000:3000 --name=database -d mtr/database

또한이 액세스를 제한 할 수있는 도커 방법이있을 가능성을 고려했지만 많은 연구를 거친 후에는 아무것도 찾을 수 없었습니다.

이 작업을 수행하는 방법에 대한 제안 사항이 있습니까?

답변:


1

"tcp"포트 "dpt : 3000"의 "anywhere"에서 "172.17.0.3"호스트로의 "ACCEPT" "tcp"연결 및 모든 수신 연결을 "you-public"으로 전달하는 DNAT 규칙이있는 것 같습니다. iptables -t nat -L --line-numbers정상으로 간주되는 -ip-address : 3000 "~"172.17.0.3:3000 "(참조 )

NAT 테이블에서 DNAT 규칙을 제거하십시오.

iptables -t nat -D PREROUTING <the-dnat-rule-number>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.