Criando túneis seguros

Uma forma simples de encriptar protocolos que em condições normais não suportam encriptação é usar o SSH para criar túneis seguros, ligando uma das portas da sua máquina à porta do servidor onde o serviço em questão está ativo. Nesse caso, é criada uma espécie de VPN temporária, através da qual é possível acessar o serviço de forma segura. Todas as informações transmitidas são encriptadas pelo SSH, tornando seguros mesmo protocolos “escancarados”, como o FTP.

Um dos usos mais comuns para este recurso é encriptar sessões do VNC, evitando que pessoas mal intencionadas tenham acesso ao que foi feito dentro da sessão, mesmo que ela seja interceptada.

O VNC utiliza uma chave de encriptação de mão única durante a autenticação, de forma que a senha não circula abertamente pela rede. Isso impede que alguém sniffando a rede consiga capturar sua senha do VNC, como acontece no caso do Telnet, por exemplo. Apesar disso, o algoritmo de encriptação de senha usada pelo VNC não é muito seguro e, depois que a conexão é iniciada, os dados são enviados de forma não-encriptada, abrindo a possibilidade de que alguém capaz de capturar os pacotes transmitidos possa ver o que você está fazendo e até mesmo capturar as teclas digitadas no teclado.

Se você utiliza o VNC para tarefas sensíveis, como administrar servidores, acessar sistemas bancários, etc., pode implantar uma camada extra se segurança, utilizando o VNC em conjunto com o SSH.

Neste caso, a segurança é quase total, pois além de ser necessária uma dupla autenticação, primeiro no SSH e depois no VNC, todos os dados são transmitidos através da rede de forma encriptada, utilizando um algoritmo reconhecidamente seguro.

Para utilizar o SSH em conjunto com o VNC, utilizamos a opção “-L”, que permite redirecionar uma determinada porta local para uma porta no servidor. A sintaxe do SSH, neste caso, seria “ssh -L porta_local:servidor:porta_do_servidor servidor” (parece complicado, mas vai melhorar… :).

O servidor VNC escuta na porta 5900 + o número do display (5901, 5902, 5903, etc.). Note que a porta é diferente do servidor Java, acessível utilizando o browser, que utiliza as portas de 5800 em diante. Se você vai acessar o display 1 (porta 5901), na máquina 220.132.54.78, precisamos orientar o SSH a redirecionar esta porta para uma outra porta acessível pelo cliente VNC (a 5902, por exemplo) no PC local. Para isso, é necessário que o servidor SSH esteja aberto no servidor remoto e que você tenha uma conta nele. O comando seria:

$ ssh -f -N -L5902:220.132.54.78:5901 -l login 220.132.54.78

Substitua o “login” pela sua conta de usuário na máquina remota. O SSH pedirá a senha e, pronto, você está conectado.

Tudo o que você precisa fazer agora é abrir o cliente VNC e acessar o endereço “localhost:2”. Isso fará com que o cliente acesse a porta 5902 na máquina local, que por sua vez será redirecionada (através do túnel) para a porta 5901 do servidor remoto. Você usará o VNC da mesma forma, mas desta vez usando um túnel seguro.

Se você fosse acessar o display 4 (porta 5904) no servidor 192.168.0.4, redirecionando-o para a porta 5905 (display 5) da máquina local, logando-se usando o usuário “tux”, o comando seria:

$ ssh -f -N -L5905:192.168.0.4:5904 -l tux 192.168.0.4

Neste caso, você acessaria o endereço “localhost:5” no cliente VNC.

A desvantagem de utilizar o SSH é que a atualização de tela ficará um pouco mais lenta, pois o servidor terá dois trabalhos, o de compactar os dados usando um dos algoritmos de VNC e, em seguida, encriptar os pacotes usando a chave do SSH, uma dupla jornada.

Uma observação é que este comando pode ser usado para criar túneis para outras portas, criando uma espécie de VPN entre os dois micros. Para redirecionar portas privilegiadas, da 1 a 1024, você precisa executar o comando como root. Para as portas altas (como as usadas pelo VNC), você pode usar um login normal de usuário.

O parâmetro “-f” dentro do comando faz com que o comando seja executado em background, liberando o terminal depois que a conexão é estabelecida. O “-N” faz com que o SSH apenas crie o redirecionamento da porta, sem abrir um terminal do servidor remoto. O “-L” é a opção principal, que especifica que queremos fazer um redirecionamento de portas. Ele é seguido (sem espaços) pela porta local que receberá a porta remota, o endereço do servidor e a porta do servidor que será redirecionada (“-L2121:192.168.0.4:21” redireciona a porta 21 do servidor remoto para a porta 2121 da máquina local). O “-l” em seguida especifica o login que será usado para estabelecer a conexão, seguido pelo endereço IP do servidor.

Em resumo, a sintaxe deste longo comando é: ssh -f -N -Lporta-local:servidor:porta-do-servidor -l login servidor (veja que é necessário especificar o endereço do servidor remoto duas vezes).

Além do VNC, podemos usar estes túneis seguros para encriptar praticamente qualquer outro protocolo. Um segundo exemplo interessante seria usar um túnel para encriptar todo o tráfego Web, de forma que você possa navegar de forma segura, ler seus e-mails, etc. mesmo ao acessar através de uma conexão wireless sem qualquer tipo de encriptação.

Para isso, é preciso que o gateway da rede (ou alguma máquina na Internet, que seja acessível por você) esteja com um servidor proxy aberto. Se você estiver usando o Squid, por exemplo, o proxy ficará aberto na porta 3128 do servidor.

Podemos usar o SSH para criar um túnel, ligando a porta 3128 do servidor à porta 3128 (ou qualquer outra) do seu micro. Para que isso funcione, é necessário que você tenha um login de acesso válido no servidor:

$ ssh -f -N -L3128:200.231.23.21:3128 -l tux 200.231.23.21

O próximo passo é configurar o navegador na sua máquina para acessar usando o proxy. Mas, ao invés de configurar o navegador para acessar o proxy diretamente, vamos configurá-lo para procurar o proxy na porta 3128 do localhost. Isso faz com que todos os acessos sejam direcionados ao túnel criado através do SSH e cheguem até o proxy de forma encriptada:

Embora inseguro, o FTP ainda é muito usado para tarefas sensíveis, como atualizar o conteúdo de websites. O perigo é obvio: qualquer um em condições de sniffar o tráfego da rede pode capturar sua senha e usá-la para alterar o conteúdo do seu site, fazendo um acesso normal via FTP.

Para evitar isso, você pode novamente usar um túnel SSH. Se você tem acesso ao servidor via SSH, pode simplesmente criar o túnel diretamente, ligando a porta 21 do servidor a uma porta da sua máquina e configurando o cliente FTP para acessar através dela. Mas, mesmo que isso não seja possível, ainda existe a possibilidade de usar qualquer outro servidor disponível na Internet, ao qual você tenha acesso via SSH para criar o túnel.

Se, por exemplo, você quer acessar o servidor FTP que está escutando a porta 21 do host “meu-site.com.br”, criando um túnel través do host “meu-amigo.com.br” (ao qual você tem acesso via SSH), através da porta 2121 do localhost, o comando ficaria:

$ ssh -f -N -L2121:meu-site.com.br:21 -l login meu-amigo.com.br

Nesse caso, é criado um túnel entre a porta 2121 da sua máquina e o host “meu-amigo.com.br”, que encaminha os pacotes para a porta 21 do host “meu-site.com.br”. Essa configuração é menos segura que um túnel direto, pois o túnel encriptado existe apenas entre a sua máquina e o “meu-amigo-com.br”. Dele até o servidor “meu-site.com.br” é feita uma conexão normal, sem encriptação.

Em teoria, os dados ainda poderiam ser capturados, mas pelo menos eles passam ilesos através da rede local, que normalmente é o ponto mais vulnerável a interceptações, sobretudo se você está acessando através de uma rede wireless sem encriptação.

Para usar os túneis SSH é necessário que o servidor esteja apenas com a porta do SSH aberta no firewall. Seja qual for a porta destino, todo o tráfego é transportado através da porta do SSH e encaminhada localmente para a porta final. Graças a essa peculiaridade, os túneis são uma forma muito usada para acessar ferramentas como o Webmin, PhpMyAdmin ou Swat em servidores remotos, sem precisar manter as respectivas portas abertas para toda a Internet.

Basta que a porta 22 (ou outra em que o servidor SSH esteja escutando) esteja aberta para que você consiga acessar qualquer outra usando túneis. Em casos em que o servidor remoto esteja configurado para usar uma porta diferente da padrão para o SSH, adicione a opção “-p porta” no início do comando, como em:

$ ssh -p 2222 -f -N -L2121:meu-site.com.br:21 -l login meu-amigo.com.br

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X