Proxy

Um proxy é um servidor que age como um intermediário entre você (o cliente) e um servidor que provê um recurso. Ao invés de se conectar diretamente ao servidor=, você pede para que o servidor intermediário se conecte e faça requisições em seu nome.

Todo servidor SSH tem a capacidade de agir como um proxy. Isso significa que tendo acesso SSH ao DINF, você pode acessar a Internet como se estivesse no departamento. Isso é principalmente para pesquisadores, pois a Universidade Federal do Paraná tem contratos com bibliotecas digitais como a IEEE Xplore que permitem a pesquisadores baixar os artigos do site sem custo adicional.

Neste artigo assumimos que você tem familiaridade com o comando ssh e que sabe por exemplo, que é possível acessar os recursos computacionais do departamento sem precisar ficar digitando a senha toda hora. Essas e outras informações são encontradas no artigo sobre o acesso SSH.

Servidor de proxy SOCKS4/SOCKS5 com o comando ssh

O SOCKS é um protocolo de proxy bastante utilizado. Praticamente qualquer aplicativo que suporta o uso de um proxy permite o uso de um servidor SOCKS na sua configuração. Neste protocolo, qualquer tipo de pacote pode ser encaminhado, seja ele TCP ou UDP e para qualquer endereço IP, seja ele IPv4 ou IPv6. O comando ssh provê um servidor SOCKS que aceita conexões com a versão 4 e 5 do protocolo.

O comando ssh cria um servidor SOCKS4/SOCKS5 na sua máquina local através do flag -D. Após o flag deve ser especificado qual a porta TCP do servidor, que pode ser qualquer porta TCP atualmente não utilizada no seu computador, como por exemplo a porta 12345:

$ ssh -D 12345 usr99@ssh.inf.ufpr.br

Assim que esse comando é executado, um servidor SOCKS4/SOCKS5 está iniciado localmente no seu computador e pode ser acessado pelo nome localhost:12345, ou pelos IPs 127.0.0.1:12345 ou [::1]:12345. Em praticamente todas as aplicações são campos separados: localhost é o domínio, e 12345 é a porta TCP do servidor.

Note também que ao usar este comando, uma sessão SSH também é iniciada, e pode ser utilizada normalmente. Se você desejar não iniciar qualquer comando, e usar o comando ssh apenas para finalidade de proxy, pode ser útil usar o flag -N.

Podemos fazer como no acesso SSH normal e criar uma configuração pronta de proxy no ~/.ssh/config, algo como:

Host dinf-proxy
  HostName ssh.inf.ufpr.br
  User usr99
  DynamicForward 12345
  SessionType none

Usando um servidor de proxy no Firefox

Uma das principais aplicações do proxy é acessar sites de periódicos que fora dos limites da universidade exigem pagamento dos pesquisadores. Para facilitar todas as configurações que vamos fazer no navegador Firefox, vamos criar um perfil novo nesta seção que usa o servidor de proxy criado na seção anterior.

  1. O primeiro passo é criar um novo perfil no Firefox. Acesse a URL about:profiles no seu navegador.

  2. Nesta página, clique no botão «Criar novo perfil».

  3. No assistente, dê um nome para o novo perfil, por exemplo «Proxy DINF».

Aviso

O Firefox vai definir o novo perfil criado como padrão! Certifique-se de definir o seu perfil normal como perfil padrão novamente.

  1. Após a criação, ache o perfil na lista e clique no botão «Abrir outro Firefox com este perfil».

  2. Agora vamos alterar as configurações. Acesse a URL about:config no Firefox que abriu.

  3. Você sabe o que está fazendo.

  4. Altere a chave network.proxy.socks para localhost.

  5. Altere a chave network.proxy.socks_port para 12345.

  6. Altere a chave network.proxy.type para 1. Isto irá ativar as configurações de proxy.

  7. Altere a chave network.dns.disableIPv6 para true. Esta configuração desativa o IPv6 e é necessária para que sites como o IEEE Xplore reconheçam o IP utilizado na universidade.

  8. Se tudo estiver certo e o servidor de proxy estiver rodando, agora você poderá acessar sites de periódicos e ter o acesso já liberado neste Firefox como se estivesse no laboratório.

  9. Quando você precisar abrir esta instância do Firefox novamente, basta acessar o about:profiles e abrir o perfil que você criou, lembrando claro de rodar o servidor de proxy.

Utilizando proxy via SSH no Android

No Android, é possível utilizar proxy via SSH através do aplicativo SagerNet, disponibilizado sob licença GPLv3.

  1. Na tela principal do aplicativo, crie uma nova conexão através de «Manual Settings», selecionando «SSH».

  2. Defina o «Server» como ssh.inf.ufpr.br.

  3. Defina o «Username» como o seu usuário.

  4. Defina o seu tipo de autenticação, senha ou chave privada como desejar.

  5. Ative o acesso na tela principal do aplicativo.

No Android, o uso do proxy será sinalizado por um ícone ded chave na barra de notificações.

Note que todo o tráfego do seu telefone irá agora passar pelo departamento, e isso pode ser indesejado por aumentar a latência em todos os aplicativos, além de consumir banda desnecessária. Você pode configurar que apenas alguns aplicativos especifícos sejam afetados pelo proxy em «Settings», «Route Settings» e «Apps VPN mode».

Proxy simples com o comando ssh

Muitas vezes queremos algo mais simples do que o protocolo SOCKS pois o endereço onde queremos conectar é estático. Isso acontece muito quando desenvolvemos servidores web em alguma outra máquina e queremos acessar este servidor web na máquina local. Ao invés de abrir a máquina para acessos externos, podemos fazer isso via SSH e a flag -L.

Assim, se estamos rodando um servidor web numa porta 8080 em outra máquina, podemos executar por exemplo:

$ ssh -L 8000:localhost:8080 usr99@litorina -J usr99@ssh.inf.ufpr.br

Isso significa que podemos acessar o servidor web que está rodando na porta 8080 na litorina locamente na porta 8000, isto é, podemos acessar o endereço localhost:8000 no navegador e poderemos ver nosso servidor web funcionando.

Também é possível fazer um proxy reverso (que expõe alguma porta da nossa própria máquina para o servidor), e esses e outros detalhes foram documentados neste blog do Ivan Veichko <https://iximiuz.com/en/posts/ssh-tunnels/>.