Escolar Documentos
Profissional Documentos
Cultura Documentos
18 de abril de 2007
Sumário
II Informações Básicas 4
III Tunelamento 9
1 Tunelamento 10
2 Plano de ensino 11
2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Publico Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3 Material de apoio 14
4 Introdução 15
4.1 O que é tunelamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2 Pra que serve tunelamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.3 O que vamo conhecer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.4 Quando usar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.5 Contornando Firewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.6 Criptografando Conexões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.7 Tunelamento Reverso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.8 Acesso indireto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5 Instalando as ferramentas 20
5.1 Instalando o Netcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.2 Instalando o OpenSSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.3 Instalando o Corkscrew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.4 Instalando o HTTPTunnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
6 Iniciação prática 23
6.1 Netcat - Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.2 Netcat - Conectando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.3 Netcat - Servindo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.4 Netcat - Piruetas (opcional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.4.1 Piruetas do Netcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.4.2 Caso 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.4.3 Caso 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.4.4 Caso 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.4.5 Caso 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.4.6 Caso 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.4.7 Caso 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.4.8 Caso 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.4.9 Opções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
8 Tunelamento - Netcat 36
8.1 Tunelando com o Netcat - Parte 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
8.2 Tunelando com o Netcat - Parte 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8.3 Tunelando com o Netcat - Parte 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
8.4 Simulando um túnel com redirecionamentos Netcat (opcional) . . . . . . . . . . . . 38
8.4.1 Redirecionamentos Netcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
10 Tunelamento em HTTP 48
10.1 Corkscrew - Parte 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
10.2 Corkscrew - Parte 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
10.3 HTTPTunnel - Parte 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
10.4 HTTPTunnel - Parte 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
11 Últimas notas 52
11.1 Tunelamento reverso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2
Parte I
3
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Conteúdo
O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-
ternet, disponíveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br.
O formato original deste material bem como sua atualização está disponível dentro da licença
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de
mesmo nome, tendo inclusive uma versão traduzida (não oficial).
A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro
de 2006. Críticas e sugestões construtivas são bem-vindas a qualquer tempo.
Autores
A autoria deste é de responsabilidade de Tomas Ribeiro Cardoso (tomas@cdtc.org.br).
O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento, que
vem sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com
outros parceiros institucionais, atuando em conjunto com as universidades federais brasileiras
que tem produzido e utilizado Software Livre, apoiando inclusive a comunidade Free Software
junto a outras entidades no país.
Garantias
O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-
lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam
direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) .
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-
TILA. A copy of the license is included in the section entitled GNU Free Documentation
License.
4
Parte II
Informações Básicas
5
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Sobre o CDTC
Objetivo Geral
Objetivo Específico
Guia do aluno
Neste guia, você terá reunidas uma série de informações importantes para que você comece
seu curso. São elas:
• Primeiros passos
É muito importante que você entre em contato com TODAS estas informações, seguindo o
roteiro acima.
Licença
6
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".
• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais.
• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real.
• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.
A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:
. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a
7
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso. É recomendado que você faça uso do Forum de dúvidas gerais que lhe dá recursos mais
efetivos para esta prática.
. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.
. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:
Primeiros Passos
Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:
• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;
Perfil do Tutor
8
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor
ou instrutor:
• fornece explicações claras acerca do que ele espera, e do estilo de classificação que irá
utilizar;
• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;
• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervossismo’)
9
Parte III
Tunelamento
10
Capítulo 1
Tunelamento
O tunelamento é uma das ténicas, se quisermos assim, mais úteis das tecnologias de rede.
Uma técnica que muitos usam regular e diariamente sem saber que o fazem, mas certamente
aqueles que a conhecem solucionarão problemas e desafios de rede com mais elegância e matu-
ridade. O tunelamento, basicamente, é a técnica de encapsular conjuntos de dados que trafegam
em rede dentro de outro conjunto de dados, de forma que a rota que os primeiros iam tomar seja
conduzida para um lugar ou de uma maneira que sem o encapsulamento eles não poderiam fazer.
Existe tunelamento tanto de conexões TCP quanto de protocolos de baixo nível, e os softwares,
assim como as utilidades que um túnel pode ter, são diversos.
11
Capítulo 2
Plano de ensino
2.1 Objetivo
Qualificar usuários para o uso do HylaFAX.
2.3 Pré-requisitos
Os usuários deverão ser, necessariamente, indicados por empresas públicas e ter conheci-
mento básico acerca de programas de arquitetura cliente-servidor.
2.4 Descrição
O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle
como ferramenta de aprendizagem. Ele é composto de um conjunto de lições e uma avaliação
que será dada no no final do curso. O material didático estará disponível on-line de acordo com
as datas pré-estabelecidas no calendário. A versão utilizada para o HylaFAX será a 4.3.0
2.5 Metodologia
O curso está dividido da seguinte maneira:
2.6 Cronograma
• Lição 1 - Introdução
• Lição 3 - Testando
12
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Lição 4 - Cliente
• Lição 5 - Detalhes
• Avaliação de Aprendizagem
• Avaliação de Curso
Todo o material está no formato de lições, e estará disponível ao longo do curso. As lições
poderá ser acessadas quantas vezes forem necessárias. Aconselhamos a leitura de "Ambienta-
ção do Moodle", para que você conheça o produto de Ensino a Distância, evitando dificuldades
advindas do "desconhecimento"sobre o mesmo.
Ao final de cada semana do curso será disponibilizada a prova referente ao módulo estudado
anteriormente que também conterão perguntas sobre os textos indicados. Utilize o material de
cada semana e os exemplos disponibilizados para se preparar para prova.
Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dvida deve ser
disponibilizada no fórum ou enviada por e-mail. Diariamente os monitores darão respostas e es-
clarecimentos.
2.7 Programa
O curso de Hylafax oferecerá o seguinte conteúdo:
• Introdução e Instalação
• Uso das ferramentas mais comuns.
2.8 Avaliação
Toda a avaliação será feita on-line.
Aspectos a serem considerados na avaliação:
Instrumentos de avaliação:
• Participação ativa nas atividades programadas.
• Avaliação ao final do curso.
• O participante fará várias avaliações referente ao contedo do curso. Para a aprovação e
obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo
com a fórmula abaixo:
• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições
• AF = Avaliações
13
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
2.9 Bibliografia
• Site oficial: http://www.hylafax.org
• http://www.rzg.mpg.de/networking/tunnelling.html
• http://br-linux.org/artigos/dicas_httptunnel.htm
• http://www.jfranken.de/homepages/johan.en.html
• http://en.wikipedia.org/wiki/HTTP-Tunnel
• http://www.brandonhutchinson.com/ssh_tunnelling.html
• http://gentoo_wiki.com/TIP_SSH_Reverse_Tunnel
14
Capítulo 3
Material de apoio
15
Capítulo 4
Introdução
• Realizar uma conexão cujo protocolo seria bloqueado não fosse o uso do túnel;
• Conectar-se a uma máquina de rede interna como se fosse de dentro para fora;
16
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Mascaramento de IP.
• Transferir dados por uma rede cujos protocolos de camada 2 não são suportados;
De qualquer forma as finalidades que resaltamos a pouco se devem todas a um mesmo fato
sobre o tunelamento: a conexão tunelada é realizada sempre sob a máscara da conexão-túnel
de forma que, dependendo da espécie deste, os dados da conexão principal podem transitar em
outros protocolos, ou ordenados sob algorítmos de criptografia e até sua origem e seu destino
podem aparecer mascarados dependendo do ponto da rede em vista.
Utilizamos já o tunelamento em uma ou outra tarefa diária, mesmo que não saibamos, atra-
vés de aplicativos que se aproveitam das funções listadas acima para funcionar devidamente,
como em tecnologias de redes VPN ou tecnologias PPPoE (Potocolo point-to-point tunelado por
Ethernet).
17
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
– OpenSSH;
– Corkscrew;
– HTTPTunnel;
É evidente que esses dois papéis se baseiam na mesma característica do que é o tunela-
mento. Afora os dois grupos acima, cada aplicativo pode servir para mascaramento de IP e o
OpenSSH, como veremos, é capaz de realizar o tal de tunelamento reverso.
Mapeados os aplicativos às suas respectivas funções de tunelamento, vamos entender um
pouco melhor a solução que tais funções oferecem. Terminadas as breves apresentações parti-
remos já para a instalação destes programas.
• 143 (IMAP)
• 22 (SSH)
• 6667 (IRC)
• 25 (SMTP)
• 42 (NS)
• 21 (FTP)
• 110 (POP3)
O tunelamento pode nos ajudar permitindo que façamos uma conexão para uma dessas por-
tas de destino através de uma das portas autorizadas pelo firewall, que funcionaria como o nó
intermediário da conexão que nos interessa. Uma das portas muito frequentemente habilitadas
mesmo por firewalls restritivos de redes empresariais é a porta 80, de acesso à web. Ela acaba
sendo, por esse motivo, a saída principal das conexões que de outra forma seriam bloqueadas.
Poderíamos utilizar em algumas conexões também a porta 22 como saída do firewall, se estiver
liberada.
Temos em mente casos em que conexões a determinadas portas de destino são bloqueadas,
o que poderíamos contornar também, se tivermos acesso ao servidor, reconfigurando o serviço
visado para escutar em uma porta autorizada pelo firewall. Existem casos, porém, nada raros, em
que os próprios protocolos das conexões que queremos fazer são bloqueados com, por exemplo,
um proxy. Nestes casos precisamos mascarar o protocolo proíbido o tunelando dentro de um
outro autorizado; mais uma vez este protocola será, principalmente, o http.
Em todo caso, as ferramentas que contornam firewalls no segundo caso também o fazem
no primeiro. Uma ferramenta que obviamente poderíamos utilizar aqui é o HTTPTunnel, capaz
de tunelar todos os dados da camadas de aplicação em HTTP para que atravessem o firewall
18
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
no formato que ele espera. Outra que pode interessar a quem quer fazer uma conexão a um
shell remoto com SSH bloqueado é o Corkscrew, que tunela em HTTP, através de um proxy,
especificamente o protocolo SSH, outrora a própria ferramenta de tunelamento.
Ambas ferramentas de tunelamento em HTTP repassam os dados para estações que rever-
tem o formato dos dados para os protocolos que o servidor de destino espera receber. Por tabela
o IP de origem da conexão, do ponto de vista do servidor da conexão, fica mascarado como um
IP dos servidores de conversão de dado intermediários.
Por enquanto estamos somente mapeando as funções destas quatro ferramentas de tune-
lamento. Mais tarde vamos conhecê-las pessoalmente, e junto a elas o uso do Netcat, nosso
canivete suíço dos milagres em rede.
19
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
autoriza a saída de uma conexão, na verdade um túnel, por dentro da qual podemos estabelecer
outra conexão a partir de fora sobre a qual o firewall jamais ficará sabendo.
20
Capítulo 5
Instalando as ferramentas
# wget http://osdn.dl.sourceforge.net/sourceforge/netcat/netcat-0.7.1.tar.gz
# cd netcat-0.7.1
# ./configure
# make
# make install
No site em que está o arquivo que baixamos está também o hash md5 para quem quiser
21
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
conferir sua legitimidade. Teste a instalação do aplicativo com o comando que lista a suas opções
de uso:
# netcat -h
# wget ftp://ftp.openbsd.org.br/pub/OpenBSD/OpenSSH/portable/openssh-4.5p1.tar.gz
# cd openssh-4.5p1
# ./configure
# make
# make install
22
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
com todo tipo de protocolo. O Corkscrew vai servir como uma introdução simples e breve ao
tunelamento de contorno de firewalls.
Vamos digitar os mesmos seguintes comandos para compilar e instalar o Corkscrew em nossa
máquina, caso não o possamos fazer com um gerenciador de pacotes.
# wget http://ftp.debian.org/debian/pool/main/c/corkscrew/corkscrew_2.0.orig.tar.gz
# cd corkcrew_2.0.orig
# ./configure
# make
# make install
# wget http://ftp.gnu.org/gnu/httptunnel/httptunnel-3.3.tar.gz
# cd httptunnel-3.3
# ./configure
# make
# make install
23
Capítulo 6
Iniciação prática
• Conexões simples:
– Acessar um serviço;
– Pegar o banner de um serviço;
• Servir conexões:
– Estabelecer chats;
– Disponibilizar acesso remoto à aplicativos locais:
* Acesso à própria shell;
* Disparar um processo qualquer;
– Repassar dados pela rede para monitoramento remoto em tempo real para a máquina
local ou para outra(s);
• Tunelar conexões;
Como consequência temos funções criativas que podemos dar ao Netcat como:
Sabendo que o comando do Netcat é ’nc’, vamos agora realizar algumas de suas operações
básicas para ganharmos alguma familiaridade com ele.
Note que daqui para frente, o texto que estiver em negrito corresponde os dados que forem
inseridos e comandos digitados (exceto o caractere cifrão $, que indica a linha de comando do
shell), enquanto o texto em itálico corresponderá ao texto impresso na tela como resposta do
aplicativo.
24
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
$ nc google.com 80
$ nc servidor-ssh 22
$ nc localhost 22
SSH-2.0-OpenSSH_4.3p2 Debian-3
Protocol mismatch.
É claro, o próprio cliente OpenSSH espera que reconheçamos o certificado do servidor, mas
não ’falamos SSH’ e ao digitarmos qualquer coisa (literalmente, no exemplo) aparece, natural-
mente, a mensagem Protocol Mismatch, indicando o erro de protocolo.
$ nc -l -p 1025
25
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Como último comentário a montagem de serviços com Netcat, gostaria de ressaltar que o
Netcat transfere dados em claro, o que permite que alguém facilmente capture os dados trasfe-
ridos. Para se utilizar dos recursos que o Netcat oferece em situações em que a segurança dos
dados for importante experimente o tal Cryptcat, que dizem ser o Netcat criptografado. Existe,
porém, maneiras de tornar serviços Netcat um pouco mais seguros do que da forma como vimos
acima. Podemos, por exemplo, restringir o acesso ao serviço posto designando os IPs específi-
cos dos quais esperamos a conexão, assim como podemos especificar uma porta de origem de
conexão como critério de filtro. Essas medidas não protegem, é claro, uma conexão Netcat de ser
observada clandestinamente com uma ferramente de sniffing. Caso queiramos utilizar o próprio
Netcat e ainda assim proteger os dados com criptografia podemos também simplismente tunelar
o Netcat em um túnel criptográfico, como vamos aprender a fazer até o final deste curso.
$ cat
alo
alo
26
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
eco
eco
sair
sair
<Ctrl>-d
$ cat arquivo
ou
A segunda forma também funciona com o Netcat. Vamos lá. Primeiro abrimos uma porta para
escuta por um terminal e em seguida nos conectamos com o comando simples que estabelece a
conexão, que já conhecemos, seguido do redirecionador e do nome do arquivo ’< mensagem’, ou
seja:
6.4.2 Caso 1
27
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
6.4.3 Caso 2
T1 (terminal 1) - Servidor T2 (terminal 2) - Cliente
$ nc -l -vv -p 1025 < mensagem $ nc localhost 1025
olá
listening on [any] 1025 ...
<Ctrl-c>
connect to [127.0.0.1] from localhost.localdomain [127.0.0.1] 50480 $
sent 0, rcvd 4
$
Pense agora que se podemos passar o conteúdo de um arquivo para dentro de uma conexão
Netcat, como faríamos com o próprio cat, e se o Netcat joga os dados que chegam da outra ponta
para a saída padrão, o terminal, então podemos também jogar o conteúdo de saída, que iria para
o terminal, igualmente para dentro de um arquivo.
Observe então a seguinte cena.
Antes de mais nada:
6.4.4 Caso 3
<Ctrl-c>
$
6.4.5 Caso 4
28
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Enviamos o executável de uma ponta da conexão (do servidor) para outra (para o cliente).
Checamos que o conteúdo dos arquivo é idêntico.
O Netcat simplismente estabelce uma conexão, o que faz com ela não interessa a ele (na
próxima página, na verdade, vamos conhecer algumas opções do Netcat que podem sofisticar
suas funções). Podemos preparar todo tipo de serviço útil combinando as milhares de funções
úteis do bash com o uso do Netcat. Mais um exemplo simples, mas útil, é o uso do pipe ( | ).
Pense que assim como podemos passar o conteúdo de um arquivo pela conexão também po-
demos passar o conteúdo resultante de um procedimento qualquer, com um comando qualquer.
Por exemplo, podemos passar uma lista de ítems pela conexão ordenando-a antes de enviá-la.
6.4.6 Caso 5
$ cat lista | sort | nc localhost 1025
Essa é uma saída estática de um comando, mas imagine o envio permanente de dados de
saída de um pipe qualquer. Por exemplo, podemos monitorar remotamente os processos que
mais consomem recursos de nosso sistema com a seguinte manobra:
Servidor:
Cliente:
$ nc servidor 1025
Uau!
Agora mais que isso, podemos repassar pela conexão a própria execução de um comando
interativo qualquer. E ainda mais, esse aplicativo pode ser o próprio shell! O Netcat pode, ora se
não poderia, estabelecer um servidor de shell remota. Observe essa maravilha:
29
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
6.4.7 Caso 6
T1 (terminal 1) - Servidor T2 (terminal 2) - Cliente
$ nc -l -vv -p 1025 | /bin/bash $ nc localhost 1025
listening on [any] 1025 ... ls -1
connect to [127.0.0.1] from localhost [127.0.0.1] 4572
copia-nc <Ctrl>-c
exemplo1 $
lista
mensagem $
pergunta-chata
piruetas-netcat
piruetas-netcat˜
resposta-obvia-No1
sent 0, rcvd 6
$
Da maneira que foi feita acima o cliente, que passa o comando, não pode ver a sua saída.
No caso de um comando como o ls este fato é relevante, mas diversos comandos poderiam ser
dados pelo lado do cliente sem que se esperasse qualquer resposta, como ’init 0’, por exemplo,
para desligar a máquina.
Mas e se precisássemeos da saída do comando dado? Como podemos fazer para vê-la
do lado do cliente? Ora, se podemos, via pipe, passar quaisquer comandos tanto para dentro
da conexão Netcat quanto podemos podemos passar da conexão Netcat afora para dentro de
um comando, então podemos redirecionar as saídas do shell no servidor para dentro de outra
conexão Netcat! Observe a manobra olímpica:
6.4.8 Caso 7
$
Ainda assim temos de ficar trocando de terminais para em um passar um comando e em outro
ver sua saída. Uma alternativa funcional é no T3, ao invés de simplismente nos conectarmos,
30
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Isso que vimos acima é a solução crua para a implementação de um servidor de shell remoto.
O Netcat oferece várias opções passadas em parâmetros para tar seu uso mais funcional e otimi-
zado. O conhecimento de como se realizar as manobras acima ainda se mostrará importante, no
entanto, para que você encontre soluções criativas quando precisar. Como informei, o domínio
deste trecho da lição não é fundamental para o aprendizado e uso do tunelamento, e por isso
este curso não espera que tenha aprendido a realizar as piruetas do Netcat.
6.4.9 Opções
Brevemente, vamos ver agora algumas das opções que o Netcat nos oferece.
Abaixo está a lista de opções obtida com o comando ’nc -h’ e traduzida por mim.
-i, –interval=SECS intervalo de espera para linhas enviadas e para porta escaneadas
-v, –verbose modo verboso (utilizar duas vezes para ser ainda mais verboso)
-x, –hexdump faz um hexdump tanto do tráfico que chega quanto do que sai
31
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
-w, –wait=SECS tempo limite para tentativas de conexões e para ’final net reads’
Marquei em negrito as 2 opções que vou comentar neste resto de página. Como podem ver
já conhecemos algumas opções como -h, -l, -p, -v e -vv. A opção que nos é central neste curso
é, é claro, a -L. Outras são muito interessantes, como a -u, para realizar conexões UDP, -z, -r, -w
e -i para escaneamento de portas e -o para sniffing.
A opção -c permite que automaticamente fechemos uma conexão ao término da transferência
de um arquivo. Isso pode ser útil caso não possamos manualmente interromper o netcat com
<Ctrl>-c, por exemplo. Especialmente útil se estivermos mantendo o serviço em pé com um while
ou com outra manobra. Experimente refazer o caso 4 apresentado acima com a opção -c. Esta
opção funciona sempre quando informada do lado da conexão que vai inserir dados.
A opção -e soluciona de forma elegante e nativa o problema que só "resolvemos"com a mano-
bra completa apresentada no Caso 7. A opção -e passa a execução de um comando especificado
para a outra ponta da conexão, e ao recebere dados, retorna a saída do comando, caso responda,
devolta para a ponta remota. Experimente escutar uma porta como fazíamos nos casos apresen-
tados e passar o parâmetro -e seguido do caminho, digamos, do shell bash, -e /bin/bash. Pimba,
um servidor de shell remoto perfeito.
Uma última dica: Para realizar as mesmas peripércias que fazemos com o Netcat, mas com
segurança de dados, pode-se utilizar o tal Criptcat, que se diz ser o Netcat com conexões crip-
tografadas. Uma alternativa, no entanto, seria tunelar as conexões Netcat por dentro de SSH, é
claro!
32
Capítulo 7
$ ssh servidor
Simples assim. Quando não especificamos com que nome de usuário vamos ser autenticados
pelo servidor, o OpenSSH tenta logar com o nosso nome de usuário local, com o qual lançamos
o cliente OpenSSH. Acontece que geralmente o nome de usuário com o qual nos logaremos no
servidor não é o mesmo que usamos para dar o comando. Nestes casos, precisamos especificá-
lo adicionando ’usuario@’ antes do nome do servidor. Modelo:
$ ssh usuário@servidor
Uma segunda alternativa para a especificação do nome de usuário com o qual logarmos
no shell remoto é a utilização do parâmetro ’ -l ’, provavelmente de login. Observe, o seguinte
comando faz o mesmo que o anterior:
Da maneira como foi apresentado acima, o comando não especifica a porta à qual tentará
se conectar. O OpenSSH, neste caso, assume que queremos nos conectar à porta padrão dos
servidores SSH, que é a 22. Um serviço de protocolo SSH, ao contrário de um servidor Netcat,
possui uma porta padrão vastamente conhecida. Para especificar a porta à qual tentaremos nos
conectar por SSH passamos o parâmetro identificado por ’ -p ’ para o nosso comando. Modelo:
$ ssh usuário@servidor -p 22
33
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Fazendo conexões com esses parâmetros somos levados ao shell da máquina remota. Po-
demos, entretanto, passarmos diretamente um comando para ser execuatado ao conecatarmos.
Por exemplo, podemos fazer uma conexão que retorna a saída do comando ’who’, listando os
usuários logados no sistema:
Esta mensagem será aprensentada à primeira vez que nos conectarmos a cada servidor a
partir de uma mesma máquina. Essa mensagem acusa que o serviço ao qual o cliente OpenSSH
está prestes a se conectar não pode ser autenticado, ou seja, ou ele não pode garantir que à
máquina à qual estamos nos conectando é realmente aquela que apontamos no comando ou
(nem) que a máquina que apontamos é a que pensamos que é. Tipicamente essa operação não
é arriscada porquanto não estamos fazendo uma conexão de sigilo coorporativo.
A partir da primeira conexão autorizada por nós, através do ’yes’, o OpenSSH armazenará
no arquivo /.ssh/know_hosts a chave de identificação do servidor que legitimamos. Na próxima
vez que nos conectarmos ao mesmo servidor, o OpenSSH vai poder comparar a chave dada
pelo servidor encontrado com a chave armazenada associada ao servidor que pensamos estar
encontrando. Com o nível de segurança setado por padrão, a conexão será interrompida caso as
chaves não batam.
Sobre o risco corrido na primeira conexão, podemos anteriormente requerer do administrador
da máquina servidora, por uma via que pensamos ser mais segura, como por email ou pessoal-
mente, a chave do servidor para comparação. Existem também maneiras de checar a legitimidade
do servidor após logados, o que nem sempre é conveniente e seguro.
Importante:
Caso venhamos a nos conectar mais de uma vez a uma mesma máquina, pode ser o caso
que o OpenSSH não reconheça a chave ou o IP do servidor, caso tenham mudado. Isso pode
acontecer por um motivo ou outro, e é provável que ao longo dos exercícios tenhamos nosso
acesso bolqueado a máquinas seguras pelo nosso próprio cliente OpenSSH por essa razão de
segurança. Existem várias saídas elegantes para este problema, como, por exemplo, alterar
as medidas de segurança do cliente OpenSSH no arquivo de configaração. No entanto, não
faria sentido nos envolver aqui com a soução de como implementar essa ou outra solução ade-
quada. Sugiro, portanto, que aquelas pessoas que tiverem esses problemas de autenticação
34
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
$ /usr/local/sbin/sshd
Caso tenha instalado o OpenSSH pelo sistema de pacotes debian podemos iniciar o serviço
através do init.d com o comando
$ /etc/init.d/sshd start
Como dizíamos, a porta padrão para serviços SSH é a 22, e o OpenSSH escutará nesta
mesma porta caso não setemos outra. Tentemos pois nos conectar à porta 22 de nossa própria
máquina com o comando que aprendemos na página anterior:
$ ssh localhost
Logo na quinta linha do arquivo está indicada a porta em que o OpenSSH vai abrir o socket
para conexão. Podemos setar qualquer outro valor no lugar de 22, e o sshd funcionará com a
nova configuração contanto que o reiniciemos. Para tanto, podemos interromper o processo do
serviço e o reiniciarmos da mesma maneira. Caso se utilize o init.d, o fazemos da mesma maneira
como antes mas com restart no lugar de start.
Outras linhas deste mesmo arquivo de configuração são interessantes, mesmo para quem
não quer montar um servidor profissional. Por exemplo, podemos decidir, através da seguinte
diretiva,
26 PermitRootLogin
35
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
, se será permito que a autenticação se dê com o nome de usuário do próprio root, o que
poderia ser uma fraqueza na segurança.
A diretiva
62 X11Forwarding
36
Capítulo 8
Tunelamento - Netcat
T 1 (servidor):
$ nc -l -vv -p 1026
T 2 (túnel):
$ nc -L localhost:1026 -p 1025
T 3 (cliente):
$ nc localhost 1025
Este teste mostra que a conexão que entra na porta aberta pelo túnel, no caso a 1025, atra-
vessa o túnel e cai na porta do serviço para o onde o túnel leva, no caso a 1026. Este é um
37
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
cenário bastante semelhante ao que vimos na lição sobre escutar em portas com o Netcat. Aqui
é estabelecida uma conexão clara em que tudo que for passado em uma ponta sai na outra, sem
que o nó intermediário, o túnel, interfira na passagem. Experimente portanto digitar qualquer
coisa em quaisquer das duas pontas, e observe que os dados saem na outra. Aquilo que for
escrito no terminal do túnel parece não ir a lugar algum. Observe:
38
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Quem estiver mais a vontade com redes e interessado, pode também, e isso sim eu reco-
mendo fortemente, acompanhar os testes com uma ferramenta de sniffing, como o wireshark (que
antes era o ethereal), o snort ou o próprio tcpdump. Um acompanhamento deste tipo permite que
vejam o papel que tem um túnel criptográfico, por exemplo, assim como a origem aparente de
cada pacote e outras informações. Não posso, no entanto, fazer esse acompanhamento para os
testes que fizermos aqui.
No primeiro terminal o Netcat faz a sua única participação: aponta para um servidor SSH,
escuta na porta 1025 e espera por uma conexão SSH. No segundo terminal, um cliente SSH se
conecta à porta aberta pelo túnel Netcat. A conexão SSH acontece normalmente, e por dentro
do túnel até o seu fim os dados aparecem criptografados.
Um exemplo talvez mais surpreendente e aparentemente útil seja o tunelamento de uma co-
nexão HTTP. Considere uma rede interna em que um site específico seja bloqueado. Se temos
acesso a uma máquina externa, na internet, podemos nela montar um túnel que aponte para o
servidor web na internet que queremos ver e em seguida nos conectar ao túnel com, é claro, um
browser, capaz de falar o protocolo do servidor, o HTTP.
Faça o teste em uma rede interna. Comece inicializando o Apache (caso não tenha um
rodando, ou teste logo com um site na internet) na porta que quiser, mas suponhamos que tenha
sido na porta padrão 80. De uma segunda máquina, monte um túnel Netcat que aponte para o
servidor Apache, escutando por conexões que entrem. De uma terceira máquina, o cliente, abra
um browser e se conecte à porta aberta pelo túnel na máquina em que está escutando. Veja o
resultado!
39
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
é obrigatória neste curso, e deve ser lida por aquelas pessoas que tiverem curiosidade e interesse
em sofisticar suas técnicas de manipulação de conexões com o Netcat. As técnicas apresentadas
nesta página têm suas utilidades superadas, ao menos de forma geral, pela possibilidade de um
túnelamento, agora nas novas versões do Netcat.
Nota 2: Note que o redirecionamento de que falo não é um controle de roteamento, como o
que o módulo redirect do Iptables faz. Estou, com ’redireciomento’, me referindo à operação de
passar os dados que chegam de uma conexão para dentro de outra.
Existe, como dizia a pouco, a possibilidade de simplismente redirecionarmos os dados que
chegam de uma conexão para dentro de outra, o que estabelece uma conectividade unilateral,
ou seja, uma conexão indireta na qual só uma das pontas pode enviar dados à outra. É claro que
podemos, no entanto, determinar para que lado da conexão o redirecionamente vai estar virado,
o que nos leva a dois cenários diferentes. Com o Netcat podemos montá-los das seguintes
maneiras:
$ nc -l -vv -p 1025
$ nc localhost 1026
$ nc -l -vv -p 1025
$ nc localhost 1026
40
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Podemos combinar esses dois sentidos estabelecendo duas rotas simultâneas entre um cli-
ente e um servidor. Cada um com duas conexões estabelecidas, uma para ouvir e outra para
falar. Essa operação inflada desenpenharia um papel bastante semelhante ao papel de um tú-
nel, e pode satisfazer as necessidades daquelas pessoas cujo Netcat não possui o recurso de
tunelamento.
Existe, ainda, uma maneira mais eficaz de simular um túnel com o Netcat envolvendo quatro
terminais (e não seis, como no caso acima), em que a ponta do servidor escuta e fala através
de um centro de redirecionamento com dois clientes, um que fala e outro que escuta. É claro,
permitindo a conectividade bidirecional que buscamos aqui (e que um tunelamento oferceria).
Observe:
T 1 - Servidor
$ nc -l -vv -p 1025
T 2 - Redirecionador
T 3 - Cliente 1
$ nc localhost 1026
T 4 - Cliente 2
$ nc localhost 1027
41
Capítulo 9
42
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
impediria de forjar a operação toda em uma única máquina (ou duas), como vimos acontecer
nos experimentos com o Netcat. Naquele testes, entretanto, era importante que víssemos o
tunelamento de forma transparente, com os seus integrantes (cliente, servidor e túnel) lado a lado
em terminais. Penso que podemos, estudando agora o tunelamento com o OpenSSH, envolver
em nossos estudos de caso máquinas diferentes, inclusive para representarmos cenários reais
com mais fidelidade. Já sabemos colocar o OpenSSH para escutar em portas, então caso já
não tenham acesso a um servidor SSH nós mesmos podemos montar o nosso (lembre que
podemos tunelar em SSH conexões não SSH até um servidor qualquer, não SSH). Acontece que,
naturalmente, a máquina que vai fazer o túnel também deve ter o OpenSSH instalado, mesmo que
o comando que estabelece o túnel seja dado a partir da máquina cliente.
O fato de que o comando que estabelece o túnel seja dado pelo cliente é algo relevante. Nos
exemplos que conhecemos e nas experiências que fizemos com o Netcat, o túnel era sempre
estabelecido a partir da própria máquina que intermediaria as duas pontas. Como fazíamos a co-
nexão da máquina local para a própria máquina local, não precisamos sentar em outra cadeira ou
logar remotamente para fazer o túnel, mas nos casos sugeridos de tunelamento real precisaría-
mos de dar o comando de tunelamento em uma outra máquina (presencialmente ou por acesso
remoto). Com o OpenSSH não é diferente, mas o próprio comando de tunelamento traz imbutido
na sintaxe uma conexão remota, de forma que podemos montar o túnel na máquina intermediária
diretamente a partir da máquina cliente. (Como sugeri, o mesmo poderia ser feito com o Netcat,
ainda que não tenhamos visto este caso).
O túnel do OpenSSH tem uma característica especial para nós. Quando estabelecemos o
túnel com um comando remoto, a porta que abrimos para o túnel escutar fica na nossa própria
máquina local, o que é uma mudança de estratégia com relação ao tunelamento regular do Netcat.
Essa estratégia permite que a conexão desde o cliente até o servidor receba o mesmo tratamento
de protocolo, segurança e etc., tendo em vista que uma conexão tunelada normalmente possui
duas fases - a entre o cliente e a entrada do túnel e deste até o servidor. A consequência desta
característica é que quando formos nos conectar ao túnel com o cliente vamos apontar a conexão
para a própria máquina local, na porta que setamos.
Outro detalhe é que quando passado o comando desde o cliente, o túnel é montado e o ter-
minal do cliente recebe a shell deste sistema intermediário. Mas não se passarmos um comando
como aprendemos na página sobre o cliente OpenSSH. Como devem lembrar, podemos passar
um comando para execução automática no lugar de receber uma shell do sistema remoto. Nos
exemplos que mostrarei aqui vou utilizar esse recurso de execução remota automática com o
comando ’sleep’, para contar em segundos o tempo em que o túnel se manterá aberto.
43
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Este trecho do comando indica a máquina que intermediará a conexão entre as pon-
tas, fazendo o túnel. Esta passagem também poderia ser escrita como ssh usu-
ario_atual@localhost -p 22, que são os valores padrões assumidos quando não
especificados. Já vimos isso na página do cliente OpenSSH, mas vamos entender
melhor o papel do nome de usuário no tunelamento SSH na próxima página.
Parte 2: -L 1025:localhost:22
44
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
do usuário com nosso nome no servidor, que normalmente seria remoto, mas que,
mais uma vez, está em nosso própria máquina. Logo, mais um vez, a senha a ser
fornecida no segundo terminal também é a nossa própria senha, a senha do nosso
usuário (com o qual executamos o comando).
Observe como é curioso que, pelo túnel OpenSSH partir do cliente, para nos conectarmos ao
servidor acabamos por fazer um acesso SSH para a nossa própria máquina!
• O usuário com o qual logar no servidor quando dentro da conexão tunelada, cujo login é
logicamente posterior ao login do da máquina intermediária.
45
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
No primeiro comando, podemos determinar com que usuário vamos nos autenticar na má-
quina intermediária, a que nos tunelará. Lembre que só precisamos nos autenticar nela para
estabelecer o túnel de forma confortável, a partir do cliente. Podemos definí-lo com duas sintaxes
diferentes:
Podemos utilizar a sintaxe usual:
No segundo comando, podemos determinar com que usuário vamos nos autenticar no servi-
dor, observe:
Análogamente, como exisetm três nós envolvidos no tunelamento, podemos envolver até três
diferentes portas de escuta na operação:
Tendo as letras acima como identificadores das portas descritas, eis aqui a posição em que
cada porta é especificada no primeiro comando:
PS.: Depois que o túnel for estabelecido com o primeiro comando em um primeiro terminal,
podemos no lugar de fazer uma conexão SSH simples, fazer outro tipo de conexão que fale o
protocolo SSH, como conexões scp, sftp, slogin etc. Podemos, depois que o túnel estiver pronto,
dar um comando no T2 como o seguinte, para, como no exemplo, copiar uma pasta remota por
inteira na máquina local:
Esta manobra, como sugerida acima, é claramente útil quando se quer copiar arquivos de
uma máquina a qual não se tem acesso direto. Isso pode acontecer, por exemplo, em razão de
problemas de DNS. De qualquer forma, com a técnica acima conseguimos copiar de uma vez o
que em outro caso precisaríamos de primeiramente passar para a máquina intermediária e só
então copiar para a máquina local.
46
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Terminal 1:
* Estabelece uma conexão em claro com o túnel criptogrado na máquina local (1) na porta 1025
e sai no serviço Netcat na porta 2000 da máquina 3.
47
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
$ nc localhost 1025
Observe o uso de ’-t cat -’ no comando do terminal 2 no lugar de ’-t sleep n’. É uma alternativa
para quem quiser manter o túnel aberto indefinidademente sem que haja uma contagem tempo
para o fechamento da conexão.
O mesmo que fizemos na lição de tunelamento com o Netcat pode ser repetido aqui com um
túnel SSH, que era o exercício de tunelar uma conexão que um aplicativo que não seja modo
texto, como uma conexão HTTP, que um browser fala.
48
Capítulo 10
Tunelamento em HTTP
Nessa lição teremos uma visão geral a respeito do que é o SpamAssassin e um pouco de sua
origem.
Corkscrew significa, em inglês, ’saca-rolhas’, que sugere seu papel de abrir uma rota. Se-
gundo o site de seu criador, os proxies em que o Corkscrew já foi testado com sucesso são:
• Gauntlet
• CacheFlow
• JunkBuster
• Squid
• Apache’s mod_proxy
Para automatizar a tarefa do Corkscrew, precisamos editar um único arquivo que vai fazer o
OpenSSH sempre chamá-lo antes de tentar estabelecer a conexão por conta própria. Com o
Corkscrew já instalado e logados com o usuário com que pretendemos nos conectar, vamos criar
o arquivo /.ssh/config:
$ vim ~/.ssh/config
E completem com os dados:
Host *
ProxyCommand corkscrew http-proxy.com porta %h %p
49
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Com a diretiva host definimos para quais máquinas a configuração que se segue vai valer.
Podemos, em geral, simplismente setar *, que vale para quaisquer hosts.
ProxyCommand é a diretiva que vai chamar o Corkscrew par tunelar a conexão atual pelo
proxy dado na sua porta (que também deve ser indicada). %h e %p são variáveis recebidas
como argumentos do comando OpenSSH que estamos dando, respectivamente, o host e a porta
de destino.
O normal é que possamos simplismente utilizar o comando ssh como se não houvesse proxy
algum em nosso caminho. Experimente.
50
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Para que o HTTPTunnel funcione, é necessário que tanto o servidor quanto o cliente estejam
atrás de uma interface do HTTP. Ou seja, ambas as máquina devem ter o software instalado e
rodando. Isso certamente é uma restrição ao uso se lembrarmos de como podíamos nos tunelar
para qualquer canto sem que o servidor sequer imaginasse por onde passara a conexão do cli-
ente.
O cliente, nós, devemos iniciar o HTTP-Tunnel com o comando htc (http tunnel client), abrindo
uma porta (arbitrária, digamos, 1500) local, de onde a conexão vai ser enviada para a porta de
escuta do servidor passando pelo proxy na sua porta, no caso, a porta 3128 do lado interno do
proxy proxy.rede.local.org. Os comandos de tunelamento serão:
HTTPTunnel - SERVIDOR
HTTPTunnel - CLIENTE
Por fim, com o esquema de túneis preparado, fazemos a conexão propriamente dita, (como
clientes, obviamente):
51
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
É claro que em um cenário típico, se a conexão a ser realizada tem o ser regularmente, o es-
quema de túneis já vai estar preparado, estático. Essa estrutura não precisa ser desmoantada
por que um conexão foi fechada, um servidor, especialmente, pode manter o seu túnel funcio-
nando permanentemente e divulgar sua porta já como sendo a porta aberta com o hts.
52
Capítulo 11
Últimas notas
Para fazer um túnel reverso com o OpenSSH, a partir do servidor dê um comando do formato:
SERVIDOR:
MÁQUINA INTERMEDIÁRIA:
GatewayPorts yes
53
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
54