docker를 사용할 때 iptables에서 특정 IP에 대한 포트를 여는 방법은 무엇입니까?

docker를 사용할 때 iptables에서 특정 IP에 대한 포트를 여는 방법은 무엇입니까?

모든 사용자가 노출된 데이터베이스 포트를 볼 수 있으므로 호스트 네트워크에 노출하고 싶지 않은 postgreSQL데이터베이스가 내부에 있습니다 . Docker(현재 나는 pfsense 또는 이와 유사한 것이 없습니다).

전체적인 구성 iptables은 다음과 같습니다.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
Chain FORWARD (policy DROP)
target     prot opt source               destination
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0
DOCKER-ISOLATION-STAGE-1  all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
Chain DOCKER (2 references)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.2           tcp dpt:15672
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.18          tcp dpt:8081
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.19          tcp dpt:443
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.19          tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.8           tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.13          tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.11          tcp dpt:5432
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
Chain DOCKER-ISOLATION-STAGE-2 (2 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0
DROP       all  --  0.0.0.0/0            0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
Chain DOCKER-USER (1 references)
target     prot opt source               destination  

내가 한 일은 docker 내부의 데이터베이스를 동일한 포트의 호스트에 노출하는 것입니다.

0.0.0.0:5432:5432

iptables모든 연결을 삭제하고 IP 주소 111.111.111.111 및 222.222.222.222만 추가 했습니다 ACCEPT. 아래 링크는 이에 대해 설명합니다.

그래서 다음 명령을 내렸습니다.

iptables -I DOCKER-USER -s 111.111.111.111 -p tcp --dport 5432 -j ACCEPT
iptables -I DOCKER-USER -s 222.222.222.222 -p tcp --dport 5432 -j ACCEPT
iptables -I DOCKER-USER -p tcp --dport PORT_X -j REJECT --reject-with icmp-port-unreachable

위 구성으로는 222.222.222.2225432 포트에서 원격으로 로그인할 수 없습니다.

도커 체인에 규칙을 추가했습니다.

왜 이런 일이 발생하는지 이해할 수 없으며 첫 번째 및 두 번째 IP 주소에서 포트에 텔넷을 연결할 수 없습니다. 내 구성에 문제가 있나요?

답변1

IP 주소를 화이트리스트에 추가하는 것은 그리 안전하지 않습니다. IP 스푸핑을 사용하면 쉽게 우회할 수 있습니다.

IPTable을 수동으로 구성하는 것은 과도한 엔지니어링 문제이므로 불필요합니다.

IP 소켓 대신 Unix 소켓을 사용하도록 컨테이너를 구성합니다. 이를 통해 권한을 더 효과적으로 제어할 수 있습니다. 그런 다음 ssh보안 터널을 사용하여 포트를 로컬 컴퓨터(다른 Unix 소켓 또는 IP 소켓)로 전달할 수 있습니다 .

관련 정보