iptables não está funcionando para https

1

Eu tenho um servidor http escutando as portas 8080 (http) e 8081 (https) em 127.0.0.1

Eu tenho essas regras do iptables para redirecionar de / para $external_ip :

iptables -t nat -A PREROUTING -i eno1 -p tcp -d $external_ip --dport 80  -j DNAT --to-destination 127.0.0.1:8080
iptables -t nat -A PREROUTING -i eno1 -p tcp -d $external_ip --dport 443 -j DNAT --to-destination 127.0.0.1:8081
  • HTTP (80 de / para 8080) funciona bem
  • HTTPS (443 de / para 8081) não funciona

O servidor é uma instância do Tomcat que usa bibliotecas APR do apache para manipular conexões https.

Há algo que me falta?

ATUALIZAÇÃO: Correntes para mesa NAT: $ iptables -t nat -L -n -v

Chain PREROUTING (policy ACCEPT 1111 packets, 69838 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   14   724 REDIRECT   tcp  --  eno1   *       0.0.0.0/0            101.0.105.178        tcp dpt:80 redir ports 8080
    6   360 REDIRECT   tcp  --  eno1   *       0.0.0.0/0            101.0.105.178        tcp dpt:443 redir ports 8081

Chain INPUT (policy ACCEPT 1064 packets, 66008 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 9 packets, 596 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 9 packets, 596 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    
por morgano 19.02.2017 / 12:16

2 respostas

1

Eu posso ver que suas regras estão corretas. A possibilidade de bloquear o tráfego pelo seu firewall foi verificada como você comentou. A regra NAT foi atingida várias vezes, conforme indicado no contador de bytes e pacotes mostrado na saída de iptables -t nat -L -n -v .

Você precisa ter certeza de que pode acessar a porta 443 localmente, e você pode verificar se o seu servidor web está escutando nesta porta usando netstat -lnp .

    
por 19.02.2017 / 13:32
0

Solução alternativa (espécie de)

O iptables, o Tomcat ou o Apache APR não gostam de escutar na interface de loopback.

Eu finalmente consegui trabalhar usando uma interface diferente de lo (127.0.0.1)

iptables -t nat -A PREROUTING -i eno1 -p tcp -d $external_ip --dport 80  -j DNAT --to-destination $local_ip:8080
iptables -t nat -A PREROUTING -i eno1 -p tcp -d $external_ip --dport 443 -j DNAT --to-destination $local_ip:8081

No meu caso eu usei uma interface fictícia (módulo linux: dummy ) porque eu queria que o Tomcat "ouvisse" de um ip "privado".

Estou postando isso como uma resposta para pessoas futuras com o mesmo problema que eu, mas eu não estou marcando essa resposta como a resposta aceita, já que não estou resolvendo o problema de usar o loopback nem explicando porque funciona bem com link mas não com link .

    
por 21.02.2017 / 09:35