
나는 iptables와 다양한 규칙의 모든 뉘앙스에 익숙하지 않습니다. 배우고 있지만 속도를 높여야 하므로 여기에 질문합니다.
AWS EC2 인스턴스의 Docker 내에서 WebLogic 컨테이너를 실행하고 있습니다. 컨테이너가 를 사용하여 실행 중입니다 docker run -d -p 8002:8002 weblogic
. 이 이미지를 제가 만든 것이 아니기 때문에 뭔가가 남아 있어야 합니다. 네트워크 제한으로 인해 WebLogic 서버가 포트 8002를 통해 액세스하도록 구축되었음에도 불구하고 포트 443을 통해 외부에서 액세스할 수 있어야 합니다.
다양한 iptables 규칙을 시도했지만 그 중 어느 것도 성공적으로 전달할 수 없었습니다. 규칙이 8002 -> 443을 전달하도록 설정되어 있어도 컨테이너는 8002에서 계속 액세스할 수 있습니다.
실행 RHEL 7.3
하면 Dockerfile이 방화벽이 아닌 iptables용으로 빌드됩니다. 내가 통제할 수 없는 것들이 있기 때문에 내가 가진 것을 가지고 일해야 합니다.
내가 시도한 iptables 명령 중 하나는 다음과 같습니다.
iptables -t nat -A OUTPUT -p tcp --dport 8002 -j DNAT --to-destination 127.0.0.1:443
참고: 나는 service iptables save
. 를 사용하여 규칙이 존재하는지 확인할 수 있습니다 iptables -S
.
편집: 현재 iptables 규칙은 다음과 같습니다.
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j DOCKER-ISOLATION
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 8002 -j ACCEPT
-A DOCKER-ISOLATION -j RETURN
답변1
너해서는 안 된다Docker
이미지를 다시 빌드하지 않고 내부에서 실행 중인 컨테이너의 포트를 변경합니다 . EXPOSE
이 수준의 명령 Dockerfile
은 컨테이너의 포트 노출을 담당합니다. 다음 명령을 사용하여 노출된 컨테이너 포트를 확인할 수 있습니다.
docker inspect <image-name>
설명서에 나와 있듯이 서버는 weblogic
기본적으로 실행됩니다. TCP/8002
따라서 에서 컨테이너에 액세스할 수 있기를 원한다고 가정하고 443
다음을 입력합니다.
docker run -d -p 443:8002 weblogic
NAT
단지 -s TCP/443
(호스트 수준) -> (컨테이너 네임스페이스 수준) 입니다 TCP/8002
. iptables
거기에서도 이것을 볼 수 있습니다 .
iptables -t nat -L
다음을 통해 표시됩니다.
docker ps
다음 텍스트가 표시됩니다.0.0.0.0:443->127.0.0.1:8002
다음 단계. iptables
을(를) 허용하려면 방화벽에 대한 (특정) 규칙을 추가해야 합니다 TCP/443
.
그래서:
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
이렇게 하면 트래픽 도착을 허용하도록 시스템의 방화벽을 구성하게 됩니다 TCP/443
.
한 가지가 빠졌습니다. 에 대한 연결을 허용하려면 EC2와 연결된 보안 그룹을 구성해야 합니다 TCP/443
.
이러한 배포는 프로덕션 준비가 완료된 것으로 간주되지 않습니다. 보안 및 인증서 관리부터 자동 서비스 재시작까지 많은 것을 놓치고 있습니다.
인용하다: