A porta do contêiner do Forwarding Docker de 8002 para 443 não está funcionando

0

Eu não estou realmente familiarizado com iptables e todas as nuances das diferentes regras. Eu estou no processo de aprender, mas eu preciso disso acelerado, e é por isso que estou perguntando aqui.

Estou executando um contêiner do WebLogic dentro do Docker em uma instância do AWS EC2. O contêiner está em execução usando docker run -d -p 8002:8002 weblogic . Eu não construí a imagem, então há algumas coisas que devem ficar. Eu preciso que o servidor WebLogic seja acessível a partir do exterior na porta 443 devido a restrições de rede, mesmo que ele seja construído para ser acessado pela porta 8002.

Eu tentei várias regras do iptables, mas nenhuma delas está sendo encaminhada com sucesso. O contêiner ainda é acessível no 8002 mesmo com as regras encaminhando 8002 - > 443 no lugar.

Executando RHEL 7.3 e o Dockerfile é construído para o iptables, não para o firewalld. Algumas dessas coisas eu não tenho controle sobre isso, então eu tenho que trabalhar com o que eu tenho.

Um dos comandos do iptables que eu tentei foi:

iptables -t nat -A OUTPUT -p tcp --dport 8002 -j DNAT --to-destination 127.0.0.1:443

Nota: sei correr service iptables save . Eu posso verificar se as regras existem usando iptables -S .

EDIT: Aqui estão minhas regras de iptables atualmente

-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
    
por Greg 02.01.2018 / 21:48

1 resposta

2

Você não deve alterar a porta do contêiner em execução internamente sem recompilar Docker image. O comando EXPOSE em Dockerfile level é responsável por expor a porta do contêiner. Você pode inspecionar portas de contêiner expostas com o comando

docker inspect <image-name>

Como a documentação diz, weblogic server é executado em TCP/8002 por padrão. Então, suponho que você queira que seu contêiner esteja acessível em 443 , você precisa digitar:

docker run -d -p 443:8002 weblogic

Apenas NAT -s TCP/443 (no nível do host) - > TCP/8002 (nível do espaço de nomes do contêiner). Você pode ver isso em iptables também.

iptables -t nat -L

Será visível com:

docker ps 

Você verá o seguinte texto: 0.0.0.0:443->127.0.0.1:8002

Próximo passo. Você precisa adicionar a regra do firewall ( iptables specificly) para permitir o tráfego em TCP/443 .

Então:

iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

Com isso, você configurará o firewall do seu sistema para permitir o tráfego para TCP/443 .

Mais uma coisa está faltando. Você precisa configurar o grupo de segurança associado ao EC2 para permitir conexões com TCP/443 .

Lembre-se de que essa implantação não pode ser tratada como pronta para produção. Ele perde muitas coisas a partir do gerenciamento de segurança e certificados, terminando com a reinicialização automática do serviço.

Referências:

por 02.01.2018 / 22:28