sábado, 28 de novembro de 2009

ubuntu + ssh + tunneling = (almost) total privacy

Quem nunca se viu privado de certos sites no seu local de trabalho? Ou até com receio de estarem a interceptar os seus dados e monitorizar os sites que consulta numa rede wireless aberta ou mesmo protegida (ex: sapo wifi) num aeroporto, ou até mesmo no local de trabalho?

Face a este problema decidi utilizar um computador velho que tenho aqui por casa e instalar-lhe Ubuntu. Porquê Ubuntu?

  • Primeiro porque me pareceu uma boa oportunidade de continuar a minha aprendizagem neste Sistema Operativo, que basicamente é a distribuição mais conhecida de Linux.
  • Segundo porque é grátis, poupando assim dinheiro que teria de despender na aquisição de um SO proprietário.
  • E por último, a possibilidade de instalação de servidor SSH. Não querendo entrar em muitos detalhes o SSH é um protocolo existente na camada de aplicação do TCP/IP. Este protocolo tem várias funcionalidades mas neste caso vamos utilizar especificamente o HTTP tunneling com encriptação de dados.

Vamos então por as mãos na massa e passar ao que interessa:
  1. Instalar uma distribuição qq de linux (recomendo Ubuntu porque não tem muito que se lhe diga e existe bastante info ai pela net). Está máquina irá ser o servidor que irá escutar pelos pedidos de ligação via SSH, portanto irá ter que estar 24h ligada. Há uma excepção a esta regra, para quem tiver uma placa de rede WOL (Wake On Lan) que assim que puder irei tentar por em prática e depois deixar aqui alguma info :).

  2. Instalar SSH.

    sudo apt-get install openssh-server


  3. Criar uma cópia de segurança do ficheiro sshd_config.

  4. sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_backup


  5. Editar o ficheiro sshd e mudar umas parametrizações de forma a que o servidor fique sem vulnerabilidades de segurança.

  6. sudo nano /etc/ssh/sshd_config


    Recomendo a alteração imediata destes parâmetros:

    O porto 22 é convencionalmente utilizado pelos servidores SSH logo é o porto mais susceptível a ataques por outros utilizadores, logo é recomendável a utilização de outro que não esteja a ser utilizado por nenhum serviço (ex: 2222).
    # What ports, IPs and protocols we listen for
    Port 22


    Penso que este opção esteja a "yes" por defeito. Tem de ser mudada para "no" para não permitir a autenticação através de password, mas somente por chave publica ou RSA
    # Change to no to disable tunnelled clear text passwords
    PasswordAuthentication no


    Para mais informações sobre a melhores práticas consultar este site:
    http://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html

  7. Como o meu objectivo (e possivelmente de muita gente) é ligar-me a partir de um cliente windows (PC do trabalho, portátil, etc.) vamos ter que instalar o putty.

  8. Download aqui:
    http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

    É necessário fazer download do putty.exe (basicamente este é a aplicação que se vai ligar ao nosso servidor SSH) como do puttygen.exe (aplicação que vai gerar a chave pública e privada para encriptar os dados entre o cliente (nosso pc numa rede não amistosa) e servidor (ponto seguro)).

  9. De seguida vamos então gerar a chave com o puttygen.exe. Este processo pode ser feito usando a máquina cliente, usando portanto o Windows para executar-lo.

    Clicar em "generate" para começar o processo de criação das chaves:


    Passar o ponteiro do rato sobre a barra de progressão para ir gerando a chave aleatóriamente:


    Chegando a barra ao fim o aspecto final é este:


  10. Salvar a chave privada (carregar em save private key):

    Muito importante! Atribuir uma password à chave privada. Assim se eventualmente alguém tiver acesso ao teu cliente e roubar a chave privada esta vai estar protegida com password.


  11. Na máquina com o servidor SSH colar o que está na primeira caixa de texto


    De seguida colar a chave publica no editor de texto e salvar:
    cd ~
    sudo nano .ssh/authorized_keys


    Finalmente fazer restart ao servidor SSH:
    sudo service ssh restart

    E assim damos por terminado a configuração do servidor SSH


  12. Vamos passar à configuração do PUTTY na máquina cliente:

    Em primeiro definimos o hostname ou IP da servidor SSH (eu utilizo o dyndns para ficar sempre com o meu IP associado a um url).


    Em segundo indicar a localização do ficheiro que contém a chave privada salva no ponto 7. do tutorial.


    E finalmente configurar o "tunnel". Para o browser adicionei o porto 5555 como dynamic. O porto pode ser um qualquer, desde que não esteja a ser utilizado por mais nenhum serviço. Podem adicionar este como um número superior. Aqui podemos utilizar o tunnel para mais serviços como ligação remota. O porto 5900 por exemplo é para me ligar remotamente via VNC ao servidor SSH.


  13. Se carregarem em "open", inserirem o username e password adicionada no puttygen aquando a geração da "private key" deverão ter acesso ao terminal do vosso servidor SSH.

  14. De seguida vamos configurar o firefox de acordo inserindo o porto adicionado no putty (Ferramentas>Opções>Avançado>Rede>Definições).


    ... e voilá, os dados que passam entre o cliente e o servidor ficam encriptados.


olá