domingo, 28 de agosto de 2005

Criar um Túnel SSH


A criação de um túnel ssh para esconder o tráfego Web, é uma solução relativamente simples para um problema que a maioria de vós não sabe que tem. Na verdade são 2 problemas:

O primeiro prende-se com a falta de segurança e privacidade que se sofre ao aceder à Internet a partir de redes partilhadas (ex: Cybercafés, redes wireless abertas, rede do local de trabalho. Sempre que uma rede é partilhada por vários utilizadores, existe a possibilidade de um deles fazer sniffing à rede ou um ataque tipo “Man in the middle” ver visualizar o tráfego não encriptado que os restantes estão a gerar (Ex: páginas http, mensagens de e-mail, conversas MSN, usernames e passwords enviadas em clear text. Todas as redes partilhadas devem ser encaradas como ambientes hostis e nunca se devem aceder a dados confidenciais a partir das mesmas.

O segundo manifesta-se principalmente em alguns locais de trabalho, em que os administradores de rede sem sentido de humor, bloqueiam o acesso a alguns sites, portos ou protocolos. Não consigo perceber porque é que não se pode ver pornografia no local de trabalho, usar o Messenger ou jogar no Facebook. A parte da pornografia é a que me custa mais a perceber.





Lembram-se que tinha dito que esta era uma solução simples para estes problemas? Pois… menti-vos. Não é “rocket science”, mas envolve vários passos e condições. Esta é uma solução que recomendo apenas aos utilizadores de nível intermédio ou avançado.

Para criamos um túnel SSH e enviarmos o nosso tráfego pelo túnel necessitamos do seguinte:
1-      Servidor Linux noutra rede, onde não existam limitações de acesso.
2-      SSH server configurado na máquina Linux.
3-      SSH cliente configurado na máquina cliente.
4-      Proxy server SOCKS configurado no browser da máquina cliente.

Vamos então ao detalhe de cada um dos pontos anteriores para ver se conseguimos, ou não, por isto a funcionar:




1- Servidor Linux

Esta é a máquina vai receber o túnel a partir da rede partilhada (local de trabalho ou cybercafé) e encaminhar o tráfego para a internet usando uma ligação confiável. Sugiro que esta máquina seja instalada em vossa casa e use a vossa ligação à Internet e esteja permanentemente ligada ou, pelo menos que seja ligada antes de necessitarem do túnel SSH. Para se pouparem recursos sugiro que o Linux não seja instalado numa máquina física, mas sim numa Virtual Machine (VM), em VMware por exemplo. Recomendo a distribuição CentOS para este fim, tendo o cuidado de instalar o SSH Server durante a fase de instalação. Para facilitar a configuração, a placa de rede da VM deve esta em modo bridged para que fique na mesma rede do router de acesso à internet.

Não vou aqui ensinar a trabalhar com o VMware ou a instalar o Linux, mas deixo um vídeo a explicar a criação de uma VM e outro a instalação do Linux. Lamentavelmente, estes vídeos estão em inglês.

A minha configuração actual é um CentOS, instalado no VMware. Para este fim o Linux não necessita de ambiente gráfico, o que permite correr esta máquina com apenas 300 MB de RAM mantendo uma boa performance. Configurei o IP manualmente na placa de rede para que este não mude e o redireccionamento da porta, no router não deixe de funcionar.







2- Configuração do serviço de SSH no Linux

Ao seleccionar o serviço SSH Server na instalação do Linux, já ficamos com todas as configurações feitas e com o serviço a funcionar. Quero apenas fazer algumas alterações às configurações para melhorar a segurança e aumentar as probabilidades de sucesso.
-- Editar o ficheiro  /etc/ssh/sshd_config com o “vi”.
         “vi /etc/ssh/sshd_config”

-- Inibir o acesso directo do utilizador root. Uma vez que se trata de um serviço que vai ficar acessível da Internet este  passo aumenta bastante a segurança do nosso sistema.  Caso seja necessário o acesso root, pode-se sempre usar o comando “sudo” ou “su -”.
        Editar a linha 39 para o seguinte valor:
        “PermitRootLogin no”

-- Alterar o porto usado pelo serviço SSH. Por norma o serviço SSH responde no porto 22. Alterar este porto traz-nos 2 vantagens. A primeira é segurança acrescida pois qualquer hacker digno desse nome irá atacar o porto 22, contudo não saberá que serviço corre no porto 6969 por exemplo. A segunda vantagem é a de enganar os administradores de rede que não permitam o acesso ao porto 22 de máquinas externas a rede. Estes podem ter bloqueado o acesso ao porto 22, mas permitir o acesso ao porto 110 por exemplo.
        Alterar a linha 13 para o seguinte valor:
        “port 110” - Caso se pretenda outra porta, alterar o valor. Por defeito a porta usada é a 22.

-- gravar o ficheiro de configuração e fazer restart ao serviço “sshd”.
        Dento do VI, carregar na tecla ESC, seguida de “:wq”
        Fazer restar ao serviço SSHD - “service sshd restart”

-- Abrir o porto escolhido anteriormente no router para que este reencaminhe os pedidos para a máquina Linux com o serviço SSH.






3- Configurar o PuTTY e ligar ao servidor SSH

Na máquina cliente, onde queremos navegar de forma segura, devemos instalar um cliente de SSH. Recomendo o PuTTY (http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe) que é open source, gratuito e pode ser executado directamente, sem instalação.
        - Executar o PuTTY
        - Colocar o endereço do servidor SSH e o porto configurado no ponto anterior
        - Alterar o Connection type para SSH





Ainda nas configurações do PuTTY temos que definir o porto por onde o nosso tráfego web irá passar para o servidor SSH. Por norma uso o porto 8080 que é um porto típico de proxys, mas pode ser usado qualquer outro porto.
        - Colocar “8080” dentro da caixa Destination
        - Escolher Dynamic
        - clicar em Add.

Dentro de Forwarded ports deve ficar o seguinte: “D8080”.
Em seguida clicar no botão open e colocar o username e a password da máquina Linux.

Neste momento tens a ligação via SSH à tua máquina Linux estabelecia e o túnel criado. Agora só falta dizer ao browser para encaminhar o tráfego todo pelo túnel que acabaste de criar.





Caso uses Linux ou Mac OS X na tua máquina cliente, não necessitas do PuTTY, basta abrir a linha de comandos (shell) e usar colocar o seguinte comando:

        ssh -D 8080 -p 110 username@endereço.do.servidor.ssh

O switch “-D8080” se refere à porta dinâmica que vais usar localmente para encaminhar o tráfego.

O switch “-p 110” refere-se à porta onde o teu servidor aceita as ligações SSH. É desnecessário se estiveres a usar a porta 22, que é a porta típica do serviço SSH.



4- Configurar o browser para usar o proxy SOCKS

Qualquer browser suporta o uso de proxys socks. O meu browser de eleição é o Firefox, pelo que vou indicar abaixo as configurações para o mesmo:
        - Aceder ao Menu Tools (Ferramentas) e escolher Options (Opções).
        - Clicar em Advanced, Network e em Settings.
        - Escolher Manual proxy configuration e preencher a linha SOCKS Host da seguinte forma:
        - localhost port 8080

Neste momento todo o tráfego que fizeres através do Firefox será enviado, de forma segura, através do túnel que criaste no ponto anterior.

Sempre que terminares a ligação SSH ao Linux, deixarás de ter acesso à Internet. Para voltares a ter acesso à Internet, deverás restabelecer a ligação SSH ou configurar o Firefox para não usar proxy (No proxy).





The end.


E lembrem-se, não se deixem apanhar.