Eu quero configurar sslh na porta 443 para encaminhar para https e openvpn, que residem em dois contêineres docker. Desde que eu quero fornecer ACLs baseados em IP em https a longo prazo, eu quero sslh para fornecer o IP do cliente verdadeiro para o servidor da Web (também conhecido como o modo "transparente" do sslh).
Pelo que entendi, a documentação e esta resposta , o sslh irá falsificar solicitações externas na rede interna e precisa retornar a resposta dos servidores para traduzir a porta para comunicação com o cliente.
Meu problema é a configuração do iptables. Existem duas possibilidades de executar o sslh: no host ou em um contêiner dentro da rede do docker.
Consegui que a configuração "padrão" descrita na documentação funcionasse, ou seja, o sslh no host poderia ser encaminhado de maneira transparente para um serviço no host.
No entanto, não consigo obter o SSL transparente no host ou em um contêiner para trabalhar com os servidores em contêiner. Mais especificamente, minhas regras de iptables para marcar o tráfego que deveria ser roteado para sslh nunca correspondem a um pacote.
Por exemplo para um servidor https eu gostaria de:
iptables -t mangle -A OUTPUT -p tcp --sport 443 --source 172.25.0.2 --jump SSLH
Usando este quadro , tentei discernir como a rede ethernet virtual os dispositivos do contêiner, a ponte docker, o docker NAT e o iptables funcionam juntos, mas não consigo envolvê-lo com isso.
Para melhor discutir isso, vamos supor o seguinte:
Aqui está o meu modelo de falha deve acontecer quando um navegador se conecta ao host: 443 e sslh está no host no modo transparente
Meu problema na lista acima é que não conheço os critérios de filtro para o tráfego de saída dos servidores da web: Devo usar a porta interna da janela de encaixe 443 ou a porta mapeada 8443? O docker IP 172.25.0.2 ou outro? Tudo se resume a: será que a regra de saída do mangle será executada antes ou depois do NAT do docker?
Eu achei que poderia colocar sslh na rede do docker para evitar pensar sobre o NAT, mas ainda não consigo fazer com que as regras do iptables correspondam.
Eu não sei como proceder.
Tags networking docker iptables linux