Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Zura! - Busque. Compare. Compre.

Outras ofertas

Notebook

Monitor

Impressora

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Tunelando com OpenSSH

Colaboração: Ricardo Iramar dos Santos

Data de Publicação: 01 de Outubro de 2004

Apesar de a palavra "Tunelando" não existir no português (túnel não é um verbo), porém tecnicamente faz muito sentido empregar tal palavra na utilização do OpenSSH descrita nesta documentação.

O OpenSSH cria um "túnel virtual" através de um Firewall inserindo um cabeçalho com direitos de acesso (protocolo, porta e endereço) no lado do cliente e fazendo o processo inverso no lado do servidor. Além disso todos os dados que iram trafegar nesse túnel seram encriptados tornando assim a conexão muito segura.

As possibilidades de aplicações são infinitas, nesta documentação veremos uma aplicação que servirá como base para todas as demais.

Nesta documentação o ambiente consiste em duas máquinas (Smith e Trinity) com Slackware 10.0 fechando um túnel entre si. Em Smith usarei o usuário ricardo e em Trinity o usuário agent. Nas duas máquinas possuo o OpenSSH instalados como cliente e servidor.

Smith está atrás de um Firewall fazendo NAT onde tem permissões para sair pela porta 22 e 80. Já a Trinity é uma máquina com um IP válido dinâmico (Speedy).

                  ________
   -------       |        |               /°°°°°°°°\               ---------
  | Smith | --- [ Firewall ] ---/ ~ /--- ( Internet ) ---/ ~ /--- | Trinity |
   -------       |________|               \......../               ---------

Smith irá acessar Trinity através de um "túnel virtual" utilizando o VNC e vice-versa. Portanto irei instalar o VNC (servidor e cliente) nas duas máquinas. O VNC utiliza a porta 590x (por padrão 5900 no Windows e 5901 no Linux) e o protocolo RFB, mais informações podem ser obtidas na área documentações no site do VNC. Perceba que o Firewall não permite esse tipo de acesso nos dois sentidos.

Hey Ho! Let's Go!

Pré-requisitos

Instalação

Como na grande maioria das distribuições o OpenSSH já vem instalado, a procedimento para sua instalação não será abortado aqui.

A versão atual do VNC é a 4.0. Segue abaixo a instalação super simples dos binários do VNC.

  ricardo@smith:~/binarios/VNC$ wget http://www.realvnc.com/dist/vnc-4.0-x86_linux.tar.gz
  (...)
  ricardo@smith:~/binarios/VNC$ tar jxvf vnc-4.0-x86_linux.tar.gz
  (...)
  ricardo@smith:~/binarios/VNC$ cd vnc-4.0-x86_linux
  ricardo@smith:~/binarios/VNC/vnc-4.0-x86_linux$ su
  Password authentication bypassed.
  root@smith:/home/ricardo/binarios/VNC/vnc-4.0-x86_linux# ./vncinstall /usr/local/bin
  (...)
  root@smith:/home/ricardo/binarios/VNC/vnc-4.0-x86_linux# exit
  exit
  ricardo@smith:~/binarios/VNC/vnc-4.0-x86_linux$

Procedimento

Para facilitar o entendimento irei subdividir esse item em dois com base no sentido da comunicação entre Smith e Trinity.

Smith acessando Trinity

Para este primeiro caso imagine que estou próximo a Smith em meu serviço e Trinity está em casa a 25 Km conectada a internet via Speedy. Relembrando que já possuo o sshd (OpenSSH servidor) rodando nas duas máquinas.

Primeiramente Smith (VNC cliente) irá acessar Trinity (VNC servidor), desta forma precisamos executar o vncserver em Trinity. Como estou longe de Trinity irei fazer isso via ssh (OpenSSH cliente). Se for a primeira vez que estiver executando o vncserver será necessário definir a senha de acesso que será gravada em ~/.vnc/passwd.

  ricardo@smith:~$ ssh agent@[IP da Trinity]
  agent@[IP da Trinity]'s password: [senha do usuário agent em Trinity]
  (...)
  agent@trinity:~$ vncserver 
  
  New 'trinity:1 (agent)' desktop is trinity:1
  
  Starting applications specified in /home/agent/.vnc/xstartup
  Log file is /home/agent/.vnc/trinity:1.log
  
  agent@trinity:~$ exit
  logout
  Connection to [IP da Trinity] closed.
  ricardo@smith:~$

Veja a linha "Starting applications specified in /home/agent/.vnc/xstartup", isso quer dizer que quando você se conectar a está máquina utilizando o vncviewer o vncserver irá executar o X e em seguinta os comandos em ~/.vnc/xstartup. Eu deixo neste arquivo o seguinte conteúdo.

  #!/bin/sh
  
  [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
  vncconfig -iconic &
  sh $HOME/.xinitrc

Assim quando me conectar em Trinity via VNC será iniciado o Window Manager padrão para meu usuário, isto é, o mesmo quando executo o startx.

Agora localmente em Smith iremos redirecionar a porta local 1024 para a porta remota 5901 em Trinity utilizando ssh. Você pode utilizar qualquer porta acima de 1023 pois abaixo ou igual só o root terá permissão para fazer isso.

  ricardo@smith:~$ ssh -f -N -L 1024:localhost:5901 agent@[IP da Trinity]
  agent@[IP da Trinity]'s password: [senha do usuário agent em Trinity]
  ricardo@smith:~$

O parâmetro -f serve para deixar o processo roando em segundo plano não prendendo o prompt. Com o comando acima foi criado o famoso "túnel virtual" redirecionando as portas citadas de uma forma convenientemente. Agora que a mágica acontece, com o comando abaixo em Smith iremos acessar via VNC a Trinity através do túnel criado acima.

  ricardo@smith:~$ vncviewer localhost:1024:1 &
  (...)
  ricardo@smith:~$

Se o vncviewer perguntar a senha do vncserver configurada acima já pode ficar feliz, caso contrário revise os passos acima. Perceba o & no final da linha para executar o vncviewer em segundo plano liberando o prompt.

Na janela do vncviewer utilize a tecla F8 para configurar-lo em tempo real ou até mesmo sair. Quando tudo estiver terminado finalize o vncserver da seguinte forma.

  ricardo@smith:~$ ssh agent@[IP da Trinity]
  agent@[IP da Trinity]'s password: [senha do usuário agent em Trinity]
  (...)
  agent@trinity:~$ vncserver -kill :1
  Killing Xvnc process ID 2563
  agent@trinity:~$ exit
  logout
  Connection to [IP da Trinity] closed.
  ricardo@smith:~$

Localmente em Smith finalize o processo do OpenSSH responsável pela criação do túnel da seguinte forma.

  ricardo@smith:~$ ps aux | grep [IP da Trinity]
  ricardo  10473  0.0  0.6  3208 1604 ?        S    11:41   0:00 ssh -f -N -L 1024:localhost:5901 agent@[IP da Trinity]
  ricardo@smith:~$ kill -9 10473
  ricardo@smith:~$
  

A velocidade de atualização da tela no VNC é diretamente proporcional a velocidade do link em Smith e Trinity. Porém essa velocidade será afetada devido a encriptação dos dados trafegados pelo túnel. De qualquer forma isso pode ser solucionado com um link de 2Mbps nas duas pontas :^D .

Trinity acesando Smith

O procedimento é bem similar ao item anterior, só que agora de uma forma reversa.

O problema está no Firewall que não permite nenhum tipo de acesso a Smith. Mas se Smith abrir e manter esse acesso à Trinity, irá fazer com que o Firewall "pense" que na verdade Smith é quem esta acessando Trinity.

Tendo isso em mente minutos antes de eu ir para minha casa, onde se encontra Trinity, irei excutar o vncserver para acesso remoto futuramente de casa e em seguinda abrir um túnel redirecionando a porta local 5901 em Smith para a porta remota 1024 em Trinity da seguinte forma.

  ricardo@smith:~$ vncserver
  
  New 'smith:1 (ricardo)' desktop is smith:1
  
  Starting applications specified in /home/ricardo/.vnc/xstartup
  Log file is /home/ricardo/.vnc/smith:1.log
  ricardo@smith:~$ ssh -f -N -R 1024:localhost:5901 agent@[IP da Trinity]
  agent@[IP da Trinity]'s password: [senha do usuário agent em Trinity]
  ricardo@smith:~$

Perceba que a sintaxe é bem similar a do item anterior, exceto o -L que agora é -R de "reverse".

Deixando Smith ligado no serviço vou para casa e de la executo o seguinte comando.

  agent@trinity:~$ vncviewer localhost:1024:1
  agent@trinity:~$

Mais uma vez a mágica acontece, agora é só digitar a senha do vncserver configurada no serviço e partir para brincadeira.

Para finalizar tudo basta matar os processos como explicado no item anterior.

Conclusão

A minha conclusão é que os desenvolvedores do OpenSSH são gênios!

Além da aplicação com o VNC você pode utilizar o Tunelamento com OpenSSH para diversas outras aplicações. Como por exemplo fazer uma conexão segura com um servidor POP, desta forma tanto o seu nome de usuário e senha enviados ao servidor POP como seus e-mails seram encriptados e trafegaram com muito mais segurança pela internet.

Outra coisa interessante. que eu mesmo utilizo quase que diariamente. é fazer um ponte com uma terceira máquina. No meu caso não gosto de deixar minha máquina em casa ligada por muito tempo para não fritar o processador AMD, desta forma eu faço todo o procedimento acima com uma terceira máquina na qual tenhu uma conta shell com acesso ao OpenSSH e quando estou em casa fecho o túnel entre essa terceira máquina e a minha máquina.

Isso irá afetar diretamente a velocidade, mas se você for usar somente o console, assim como eu, não terá problema algum.

Referências


Dúvidas, críticas e sugestões devem ser enviadas para agent.smith@globo.com.

Quer saber mais um pouco sobre o autor desta documentação? Acesse minha home page em http://www.agentsmith.kit.net.

Veja a relação completa dos artigos de Ricardo Iramar dos Santos

Stumble Upon Digg This Del.icio.us Twitter Recomendar este artigo a um amigo Entre em contato Formato PDF
Newsfeed RSS
Formato para impressão
StumbleUpon Digg Del.icio.us Twitter Recomendar Contato PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.00/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (597 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script


Encontre imóveis, apartamentos e casas a venda no Imobilien
Saiba mais

Grupo MBS