Qual é a diferença entre o SSH e o Squid ao usá-los como proxies?

4

Eu tenho usado o Squid em um dos meus servidores como um proxy transparente por um longo tempo (anos).

Basicamente do cliente eu estava criando um túnel SSH entre meu cliente e o servidor ssh + Squid fazendo isso:

ssh -T -N -x -C -L3128:127.0.0.1:3128 cedric@xxx

e, em seguida, eu lançaria meu navegador da Web (cromo), dando-lhe um servidor proxy em 127.0.0.1 na porta 3128.

Isso funcionou bem por um longo tempo, mas comecei a ter problemas de registro em muitos sites (fóruns, stackexchange usando o Google como autoridade de login, etc.). Alguns continuaram funcionando bem (como o GMail e todos os serviços do GMail). Eu não sei o que causou os problemas de login: Eu acho que é devido a algum problema de configuração do Squid quando eu atualizei o sistema operacional e o software do servidor.

Então, considerei configurar uma VPN, mas depois, lendo um artigo chamado "SSH como VPN de um homem pobre", percebi que poderia usar o SSH e simplesmente fazer isso, a partir do cliente:

ssh -D 5222 cedric@xxx -N

Em seguida, configure meu navegador para usar 127.0.0.1 como um host SOCKS na porta 5222.

E agora tudo funciona bem: todos os problemas de login parecem estar resolvidos e eu nem preciso mais do Squid no servidor.

No entanto, não entendo como isso funciona. Dos vários sites "o que é o meu ip", vejo o endereço do meu servidor (que é o que eu quero). Além disso, esses sites não parecem detectar que há um "túnel" de SSH em andamento.

Basicamente, minha pergunta é: qual é, tecnicamente, a diferença entre usar o Squid como um proxy transparente e usar "SSH-D ... -N" e usar uma VPN?

E do ponto de vista dos sites que estou visitando, há alguma diferença?

Além disso, gostaria de saber se existe alguma maneira de um site que estou visitando conseguir detectar meu IP real ao usar "SSH -D ... -N"? Isso é tecnicamente viável ou essa informação simplesmente não está disponível para o navegador?

    
por Cedric Martin 22.10.2013 / 20:23

1 resposta

7

1) O Squid é um proxy especial para o tráfego http e https. Como ele conhece este protocolo, ele pode oferecer alguns recursos avançados como cache, filtragem, regras de reescrita, resolução de dns. Todos os navegadores da web sabem como lidar com proxies http, pois fazem parte dessa especificação de protocolo.

Além disso, o Squid pode atuar como um proxy transparente , no qual você não configura seu navegador para usá-lo, mas um firewall redireciona o tráfego para o proxy. O navegador não sabe que está usando um proxy, que é o significado de transparente nesse cenário. Sua configuração antiga não era transparente nesse sentido.

2) ssh -D atua como um proxy SOCKS que é independente de protocolo. Leva apenas todo o tráfego chegando na porta de meias no lado local do túnel, extrai a carga e envia para o lado remoto não modificado e desmarcado e lá envia para o destino real. Para que um proxy SOCKS funcione, o programa cliente deve suportá-lo especialmente à medida que cada pacote enviado do cliente para o proxy de socks precisar ser alterado (encapsulado) para que o proxy de socks saiba para onde enviá-lo. Não sei se todos os navegadores da Web o suportam, mas, em princípio, ele funciona com muitos protocolos, não apenas com http.

3) Sua linha de comando antiga ssh -T -N -x -C -L3128:127.0.0.1:3128 ... apenas abriu um túnel simples, onde todo o tráfego que entrava na porta local 3128 era enviado para o destino predefinido 127.0.0.1:3128 não modificado. Isso você pode usar para qualquer cliente, já que nenhuma modificação dos pacotes enviados é necessária, mas você tem apenas um destino fixo.

Além do proxy, o ssh sempre usa um túnel criptografado, para que seus dados não possam ser rastreados durante a viagem pelo túnel.

Sua configuração antiga combinava o método 1 e 3, mas, em princípio, eles podiam trabalhar sozinhos, dependendo das circunstâncias.

4) Com a VPN, você também cria um túnel criptografado do seu host local para o seu servidor "proxy". Neste caso, não se limita a um programa cliente, mas o seu sistema operacional envia todo o tráfego de rede não local para o seu proxy, que então o encaminha para o destino. Para gerenciar isso, você precisa da permissão root / administrator, por isso pode não ser tão fácil de configurar.

Em todos os quatro casos, os dados são primeiro enviados para um host remoto, que cria a conexão real com o servidor da Web de destino e envia sua solicitação. A resposta primeiro retorna ao host remoto que procura o destino real em alguns dados internos e o envia de volta ao cliente original. Sites que mostram o seu IP só vêem o host remoto e não sabem sobre o seu túnel / proxy.

Editar:

Se um site realmente quer saber o seu IP, pode haver algumas possibilidades através de javascript ou plugins dentro de uma página web, que executam o código dentro do seu navegador, talvez usando alguns bugs. Se você realmente precisa esconder o seu endereço IP real, você tem que desativar o javascript e plugins.

Edit2:

Adicionado VPN

    
por 22.10.2013 / 21:07