linux roteando o tráfego de saída da porta 80 via túnel ssh, iptables ou uma rota simples

1

Eu tenho dois hosts, A e B. O host A hospeda serviços na porta 8080 e tem regras de firewall de internet de saída que permitem acesso à porta 80 e 443 ao Host C.

O host B está na mesma sub-rede que o Host A. O host B é impedido de acessar o host da Internet C. O host A, no entanto, tem regras de saída em um firewall externo que permite a saída da porta 80 e 443 para o host C.

O host B executa um cliente de software com URLs codificadas para fazer o download do Host A (porta http 8080) e Host C (porta http 80). Novamente, o Host B é impedido de alcançar o Host C via firewall. O cliente no Host B não suporta SOCKS ou qualquer outro recurso de proxy. A única maneira que eu posso alcançar o Host C: 80 é redirecionando ou encapsulando via Host A.

Eu tenho acesso root ao Host A e ao Host B. Como o Host B pode alcançar o Host C via Host A na porta 80?

Por que isso não funciona no host B?

ssh -L 80: hostC: 80 raiz @ hostA -N

Eu ativei o AllowTCPForwarding e o GatewayPorts no Host A. É correto para isso ou existe um truque do iptables que eu possa usar?

Esta imagem é um diagrama de querer fazer com o que eu tenho: link

    
por Brett Bonner 20.04.2013 / 05:51

3 respostas

0

Como disse Nathan Adams, uma foto seria particularmente útil para resolver esse problema. Eu não encontrei o que você está tentando fazer antes, mas depois de criar um diagrama para mim e ler o comando -L para SSH, eu suspeito que o problema é que você precisa rodá-lo como root, como a porta que você estão tentando ligar é uma porta privilegiada (ou seja, < 1025).

    
por 20.04.2013 / 09:52
0

Onde está o firewall, no próprio B ou externo?

Seu comando ssh não está funcionando porque ele liga a porta 80 em B para encaminhar para C a A. Em sua descrição, você tem um endereço codificado, o que significa que B não está tentando se conectar à porta 80 em si. O endereço codificado é a chave para o seu problema. O URL contém um endereço lógico ou um endereço IP real codificado?

Se o firewall estiver em B, você teria que evitar que os pacotes fossem endereçados para C. Eu assumo que este não é o caso, já que você tem root em B. No entanto, uma solução neste caso também deve funcionar Não importa o que, a saber, encontrar uma maneira de obter conexões para C para ir para A vez. Você pode fazer isso manipulando o DNS ou com uma regra de reconfiguração do firewall.

Outro truque seria ter A como sua rota padrão para B. Supondo que C é externo e atingirá o firewall ao tentar devolver pacotes para B, você desejará ter A do NAT para B. Uma abordagem realmente grosseira é ter um responder às solicitações ARP para enganar o tráfego, mas é improvável que seja viável, exceto em configurações muito pequenas.

    
por 20.04.2013 / 21:00
0

Vi isso à procura de outra coisa, mas pensei em responder, embora seja antigo:

Em Host B :

ssh -L 8080:hostC:80 user@hostA -N -f
sudo iptables -t nat -A OUTPUT -d hostC -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

O software no Host B é codificado para se conectar ao HostC: 80 (por questão), portanto, você deve redirecionar a conexão para percorrer o túnel SSH que você criou. Também com as alterações acima, você não precisa executar nada como root.

    
por 16.10.2013 / 19:18