Académique Documents
Professionnel Documents
Culture Documents
About
Archives
Redirecionamento de portas no
SSH
Jul 9, 2012 Tiago Ilieve
H poucos meses falei aqui sobre algumas das facilidades do SSH, citando a
possibilidade de se utilizar o recurso de redirecionamento de portas locais para se
acessar indiretamente um computador na rede interna, sem deixar esta porta
aberta publicamente na internet. Tambm falei sobre como o VNC inseguro e
que o NX Server era melhor por rodar em cima do SSH. Porm, aliando alguns
destes recursos de tunelamento e redirecionamento de portas do SSH com a
simplicidade do VNC, podemos criar uma soluo muito interessante para acesso
remoto, alm de segura, multi-plataforma e muito flexvel.
Por padro, o VNC escuta nas faixas das portas 5800 e 5900. Digo nas faixas,
porque um mesmo servidor VNC pode abrir n sesses, cada uma em uma porta,
contando a partir da 5900: 5901, 5902, 5903 No caso da 5800 quase a mesma
coisa, com a nica diferena sendo o fato de que estas portas so utilizadas no
servidor Java, o que permite a um cliente acessar o servidor remotamente via
web, sem ter o aplicativo-cliente instalado. O maior problema desta configurao,
que mesmo tendo um sistema de autenticao encriptado, no muito prudente
deixar o servidor VNC disponvel abertamente na internet. Algumas
implementaes do VNC nem mesmo suportam senhas de mais de 8 caracteres.
O mais prudente considerar que no h segurana suficiente no VNC e deixar
isto a cargo do SSH.
Para criar um tnel e acessar um servidor VNC que est instalado na mesma
mquina onde est o servidor SSH, a sintaxe do comando para efetuar a conexo
a partir do cliente esta:
$ ssh -L 5901:localhost:5901 usuario@<ip-do-servidor>
O parmetro -L, diz que estamos criando uma porta local. Isto muito
importante, pois o que estamos fazendo na verdade criado um tnel que ser
usado da seguinte forma: a porta 5901 da sua mquina passar a redirecionar
para a porta 5901 do servidor, em sua interface de rede local. Sendo assim, ao se
conectar no servidor VNC, voc no mais especificaria o endereo **:1**" (o VNC
pede apenas o nmero da sesso, no necessrio somar seu valor porta
5900) e sim utilizaria o endereo "**localhost:1**".
Neste exemplo estamos utilizando a mesma porta em ambos os lados da
conexo, mas importante deixar bem claro que voc pode especificar o nmero
que bem entender ao criar uma porta local. Voc poderia, por exemplo, fazer com
que a porta local 20000 apontasse para a porta 21 do servidor, criando um tnel
encriptado para suas transferncias de arquivos, e em seguida conectaria seu
cliente FTP no endereo localhost:2000.
No Putty a configurao to simples quanto a utilizao do cliente SSH via
terminal, basta ir em Connection -> SSH -> Tunnels, especificar a porta local
(5901) no campo Source port e o restante (localhost:5901) no campo
Destination, em seguida marcando a opo Local logo abaixo. Ao clicar no
boto Add, a porta especificada adicionada lista Forwarded ports.
Esta a ideia de se redirecionar uma porta local para outra qual o servidor tenha
acesso. Acontece que esta porta no precisa ser necessariamente uma porta do
servidor, pode ser outra da rede interna, por exemplo. Se o conceito ficar confuso,
recomendo a leitura do post j citado onde explico como utilizar o conceito para
tunelar uma conexo da rea de trabalho remota do Windows. A ideia que o
localhost especificado poderia ser qualquer outro endereo que o servidor possa
se comunicar, alm dele mesmo, incluindo um host disponvel na internet, uma
vez que o objetivo acessar um outro servidor, passando pelo tnel criado pelo
SSH.
As coisas comeam a ficar mais interessantes quando nos deparamos com
situaes como a seguinte: um computador, que se encontra atrs de NAT, seja
de um simples routeador caseiro ou dentro da rede de uma grande empresa ou
universidade, que possui apenas um IP privado (como 10.0.0.x ou 192.168.0.x),
portanto, inacessvel atravs da internet, poderia se beneficiar dos tneis providos
pelo SSH para ser acessado externamente? A resposta, como voc j deve ter
imaginado, sim! Da mesma forma como abrimos uma porta local para acessar o
servidor atravs do tnel, possvel abrir uma porta remota, para que a partir do
servidor possamos acessar o cliente.
Nem sempre possvel utilizar a abordagem de se conectar a um servidor e em
seguida acessar, de forma indireta, uma mquina presente na rede interna. E se
voc no tiver acesso a este servidor? No meu caso, onde o servidor era o meu
prprio routeador, o processo foi simples. Mas e se o meu routeador no tivesse
um servidor SSH? Eu teria de recorrer a servios (muito bons) como o LogMeIn e
Teamviewer, que possuem uma abordagem parecida, onde todo o trfego passa
pelos servidores deles, ou simplesmente, utilizar o recurso de porta remota do
SSH. A sintaxe praticamente idntica utilizada para se abrir uma porta local:
$ ssh -R 5901:localhost:5901 usuario@<ip-do-servidor>
Como voc pode ver, s muda o parmetro, que agora passa a ser -R. No Putty,
a mudana equivalente, bastando escolher a opo Remote:
Pode no parecer to prtico, mas veja alguns dos problemas que resolvemos e
benefcios que obtivemos com esta abordagem.
Powered by Jekyll