http://www.zago.eti.br/ssh/tunelando-com-openssh.txt Veja também o FAQ: http://www.zago.eti.br/firewall/httptunnel.txt ******************************************************** ******************************************************** CRIAR TUNEL COM SSH Pra fazer um tunel via internet com ssh entre maquinas que passam por firewall que bloqueia conexão entrante por ssh, casos como condominios e centros empresariais onde uma empresa distribui a internet e voce recebe somente um IP reservado do tipo 192.168.x.x, desta forma nestas estações não é possivel receber uma conexão da internet, ou melhor seria possivel com regras no firewall, quando voce não tem acesso ou permissão pra mudar o firewall pode criar um tunel pra liberar a conexão entrante por ele e furar o firewall e roteadores, serve também pra conexão nas maquinas com classe de IP não é roteavel. A solução é voce fazer a conxão de saida pra uma maquina remota, completada a conexão, vai abrir um tunel pra conectar de volta a partir da maquina remota. Lado protegido, origem da conexão, abrir o tunel.... Pra criar este tunel, voce conecta a partir de uma estação que esteja atraz de um firewall ou proxy a um servidor remoto, com esta linha de comando: ssh -R 2222:localhost:22 usuario-destino@ip-do-destino Onde: 2222 é a porta que vai abrir na maquina remota, pode usar outra porta qualquer. usuario-destino é um usuário valido com shell na maquina remota, servidor. @ip-do-destino ou dominio, por exemplo, pro usuario anderson se conectar como zago na maquina 200.200.200.201 a linha de comando seria: ssh -R 2222:localhost:22 zago@200.200.200.201 Na maquina remota, no console execute netstat -na [zago@faqremoto zago]$ netstat -na Conexões Internet Ativas (servidores e estabelecidas) Proto Recv-Q Send-Q Endereço Local Endereço Remoto Estado tcp 0 0 127.0.0.1:2222 0.0.0.0:* OUÇA Veja que na maquina remota a conexão abriu a porta 2222 como localhost 127.0.0.1, a partir deste console dá pra fazer uma conexão de volta, neste caso a conexão de volta vai ser feita na porta 2222 e não a um IP como se faz normalmente, mesmo porque a maquina que abriu o tunel não tem um IP roteavel ou está atraz de firewall que bloqueia a conexão entrante, como a conexão de volta está dentro do tunell criado pelo ssh, nenhuma regra de firewall ou roteamente se aplica na conexão de volta. Para fazer esta conexão de volta, basta abrir um terminal e fazer a conexão na porta 2222, exemplo de comando na maquina remota (servidor) pra fazer a conexão na maquina de origem, no terminal digite: ssh -p 2222 anderson@localhost onde 2222 é a porta da conexão, anderson é usuário na maquina de origem (estação) e mantenha o restante da linha de comando @localhost Em resumo, pra abrir o tunel voce executa na orgiem a linha de comando: ssh -R 2222:localhost:22 zago@200.200.200.201 na maquina remota (servidor) executa: ssh -p 2222 anderson@localhost Assim a estação tem um terminal no servidor e o servidor tem um terminal na estação. O detalhe é que na origem o firewall não detecta a conexão de retorno porque ela está dentro da conexão de saida, ou seja, está usando um tunel dentro da conexão ssh. Zago ******************************************************** Criando um túnel através de uma proxy web Você já passou pela situação de ter que fazer alguma atividade importante na internet, e descobrir que a empresa ou laboratório onde você está impede o acesso "full" à Internet, liberando apenas alguns serviços ou sites? http://brlinux.linuxsecurity.com.br/artigos/dicas_httptunnel.htm?redirected=1 ******************************************************** De:  Dicas-L-Owner@unicamp.br Assunto:  [Dicas-L] Tunelando com OpenSSH Data:  Fri, 1 Oct 2004 02:47:16 -0300 Criando Websites de Sucesso com PHP data : 13/10 a 29/10 em São Paulo Confira: http://www.4linux.com.br/treinamento/php_mysql.php ----------------------------------------------------------- Tunelando com OpenSSH ===================== © Ricardo Iramar dos Santos - Agent Smith Introdução ========== 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 (http://www.openssh.com) 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 (http://www.realvnc.com) 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 (http://www.realvnc.com/documentation.html) 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 ============== - OpenSSH (http://www.openssh.com). - VNC (http://www.realvnc.com). 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 acesando 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 =========== - http://www.openssh.com - http://www.realvnc.com - http://www.google.com.br -------------------- Dúvidas, críticas e sugestões devem ser enviadas para agent.smith@globo.com (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 (http://www.agentsmith.kit.net). ------------------------------------------------------------------- Seminário de Segurança da Informação - SECURITY DAY 2004 ======================================================== Dia: 06/10 (quarta-feira) Horário: das 8h às 22h Local: Auditório da UNITEC - Câmpus Unisinos, São Leopoldo Nesta era da economia digital, um dos principais fatores críticos de sucesso é: como criar uma estratégia de Segurança da Informação que agregue valor ao negócio. A grade temática do evento irá destacar o papel da Segurança da Informação e seu impacto estratégico nas empresas. Os temas serão discutidos por representantes do Governo Federal, por usuários críticos, como Bancos, pesquisadores acadêmicos e fornecedores de soluções como a Módulo Security Solutions, a Claro Digital e a IBM. Salientamos que o programa, palestrantes, inscrições e demais informações podem ser obtidas no site do evento: www.unisinos.br/seminario/securityday CCTI - Centro de Capacitação em Tecnologia da Informação Instituto de Informática - UNISINOS Fone/fax: (51) 3328-2221 Site: http://www.inf.unisinos.br/instituto -------------------------------------------------------------------- Colabore com a Dicas-L. Publique seu comentário sobre esta mensagem em http://www.Dicas-l.com.br/dicas-l/20041001.php -------------------------------------------------------------------- **** Treinamento PostgreSQL: Performance Tuning **** Campinas: 21 e 22 de outubro São Paulo: 7 e 8 de outubro Dextra Sistemas - http://www.dextra.com.br/pgperf/ ---------------------------------------------------------------------- As mensagens da lista Dicas-L são veiculadas diariamente para 25475 assinantes. Todas as mensagens da Dicas-L ficam armazenadas em http://www.Dicas-l.com.br/dicas-l/ A redistribuição desta e outras mensagens da lista Dicas-L pode ser feita livremente, desde que o conteúdo, inclusive esta nota, não sejam modificados. --------------------------------------------------------------------