Acesso remoto a servidores através de firewalls usando AJAX - Parte 1
Escrevi este artigo para o Equipe TI (acesse-o e aproveite para conhecer a nossa equipe) e, assim como outros que virão em um futuro próximo. Assim os visitantes de ambos os sites terão acesso ao conteúdo e a base de artigos do Hypercast permanecerá completa em termos de referência. Os artigos que serão publicados nos dois sites serão apenas levemente diferentes. Em geral, basta ler em uma das fontes. Farei apenas algumas adaptações cabíveis. Abaixo segue a primeira parte. Acompanhem e aguardem a segunda!
Como primeiro artigo para o EquipeTI.info, resolvi escrever algo que tivesse relação direta com todas as áreas que irei abordar aqui, não sendo necessariamente complexo, mas bastante abrangente, que envolvesse conhecimentos de vários segmentos, e não habilidades aprofundadas em uma área só.
Falarei então de um software para acesso remoto que está ficando bastante difundido entre os profissionais da área, o AjaxTerm. A idéia deste software é promover uma via de acesso ao shell de um servidor seu rodando Linux em um ambiente de conectividade problemática.
Este artigo irá envolver áreas diversas, como dito acima. Tudo ficará mais claro com o decorrer do artigo, mas já segue uma lista do que será necessário, para sabermos onde estamos pisando:
- Redes de Computadores e servidores (cerne do problema);
- Acesso remoto (conectividade);
- Desenvolvimento Web (Python, Javascript e AJAX, para o AjaxTerm);
- Servidor Web e proxy com Apache (elo de ligação do cliente e o servidor);
- Protocolo HTTP/HTTPS (alguns métodos deles serão mencionados);
- Criptografia e Certificação Digital (segurança da conexão);
- Estrutura do Linux (processos e syscalls serão mencionadas, como forks e execs).
Tentarei expor um ambiente onde esta solução é útil. Não se trata de uma situação incomum. A preocupação com a segurança tem cada vez mais comprometido as facilidades de nossa conectividade.
Este artigo está dividido em duas partes: a primeira falando do problema abordado e de sugestões para resolvê-lo, e a segunda no nível de implementação, utilizando os softwares e técnicas citadas neste primeiro artigo.
Normalmente este trabalho é feito por um servidor SSH e um cliente SSH, mas isso só funciona em uma situação ideal, onde ambas as máquinas têm acesso irrestrito à Internet. Supondo que o firewall na frente do seu servidor permita conexões na porta 22 do SSH server e você, de algum lugar, não consiga realizar a conexão por que a sua porta 22 está bloqueada, uma solução possível seria mudar a porta que o servidor SSH escuta.
Para isso, edite seu arquivo de configuração, mudando a porta:
# vi /etc/ssh/sshd_config
E em seguida reinicie o servidor:
# /etc/init.d/ssh restart
Aproveitando que o Debian Etch foi lançado, toda a implementação apresentada foi realizada nele. Se o firewall de qualquer um dos lados estiver sido razoavelmente bem configurado, esta solução não irá funcionar, pois a abertura de portas será feita pontualmente, fechando-se as demais.
Então precisaremos utilizar uma das portas disponíveis na conexão do cliente. Podemos resolver o problema usando a porta 80, que é a porta do protocolo HTTP, utilizado para acessar páginas web. No servidor, instalamos um applet Java muito conhecido, o Mindterm, que atua como cliente SSH e faz a conexão através da porta 22 para o servidor. Coloque-o em uma região acessível externamente de seu servidor Web e acesse pelo navegador. Certifique-se que seu browser suporta a execução de applets Java. Já fiz extenso uso do Mindterm, e é realmente muito eficiente.
Podemos piorar um pouco a situação. Suponha que no caso anterior, a porta 22 do servidor está bloqueada, inclusive para acesso pelo Mindterm. Uma das forma de resolver seria usar a mudança de porta citada no começo do artigo, usando desta vez a porta 443, do protocolo HTTPS, que é utilizado em conexões seguras de páginas web. Esta porta com certeza está liberada em praticamente todos os locais possíveis de acessar a internet. Basta agora usar seu cliente SSH e acessar o seu servidor direto, pela porta 443.
Em um caso mais extremo, pode ser que o tráfego de conexão esteja sendo analisado, e você seja bloqueado pois não está falando o protocolo HTTPS na porta HTTPS. Não é difícil encontrar um software que faça essa tarefa, porém, nos coloca em uma posição um pouco mais complicada, pois como iremos acessar um terminal sob a forma das conexões com páginas web?
É agora que entra o advento do AJAX, que permite que conteúdo seja atualizado dinamicamente no navegador do cliente, sem precisar atualizar a página ou fazer novas requisições. Para o caso de uma construção de um terminal, é possível ter a idéia de conexão on-line, embora o próprio protocolo HTTP seja stateless, ou seja, não guarda os estados pelos quais as requisições vão passando. Não há histórico. Para ele, cada requisição é completamente independente das anteriores.
É muito simples criar um programa do lado do servidor que armazene uma string dentro da requisição vinda do cliente, crie um processo filho executando o programa desejado, armazene sua saída e retorne para o navegador do cliente, sob a forma de HTML.
Com a chegada do paradigma do AJAX, muito mais recursos podem ser agregados à essa solução. Eu mesmo cheguei a criar um software similar, só que bem mais simples, com um script escrito em Perl do lado do servidor, responsável por criar os processos e pela atualização da tela do cliente através das requisições assíncronas do AJAX, respondendo-as com o auxílio do módulo CGI::Ajax.
É óbvio que não fui o único a ter a idéia de integrar o AJAX na solução. É possível encontrar muitos pequenos projetos similares na internet, mas resolvi falar deste em especial por que está avançando muito em popularidade, o que quer dizer que tem qualidade: o AjaxTerm.
Até aqui indiquei algumas formas de contornar o problema da conectividade, até com sugestão de desenvolvimento e softwares já prontos, que recomendo fazer um pequeno teste antes partir para a segunda parte do artigo, que tratará da configuração completa das sugestões indicadas, no estilo “hands-on”! Você pode encontrar mais artigos relacionados aqui no Hypercast, como a leitura deste artigo, que fala sobre o gerenciamento de túneis SSH. Até lá!
Artigos Relacionados:
Sobre este artigo
You’re currently reading “Acesso remoto a servidores através de firewalls usando AJAX - Parte 1,” an entry on Hypercast
- Published:
- 04.10.07 / 2pm
- Category:
- Uncategorized
No comments
Jump to comment form | comments rss [?] | trackback uri [?]