ssh- redirecionamento de portas no ssh

Upload: diegosmaia

Post on 06-Mar-2016

60 views

Category:

Documents


0 download

DESCRIPTION

ssh- Redirecionamento de portas no SSH

TRANSCRIPT

  • 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@

    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

    Myhro Blog

    About Archives

  • 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@

    Como voc pode ver, s muda o parmetro, que agora passa a ser -R. No Putty,

    a mudana equivalente, bastando escolher a opo Remote:

  • A partir de agora, qualquer conexo realizada no servidor na porta 5901 passar a

    redirecionar para a porta 5901 do cliente, enquanto o tnel permanecer ativo.

    muito importante salientar que, neste caso, a situao se inverte, pois o localhost

    aqui corresponde ao cliente qual se conectou ao servidor. Isto significa duas

    coisas diferentes: o servidor no necessariamente estar ouvindo a porta 5901

    apenas na interface de rede local, conforme explicarei adiante, e o servio qual se

    deseja acessar no cliente no precisa estar disponvel na rede interna, muito

    menos na internet, uma vez que o tnel se refere a sua interface local (127.0.0.1).

    Leia novamente este pargrafo caso a situao ainda no esteja clara - isto pode

    lhe poupar muitas dores de cabea, futuramente, ao se perguntar porque o tnel

    no est funcionando como deveria.

    O detalhe que mais torna a situao dos tneis reversos, estes com a utilizao da

    porta remota, confusos a questo da visibilidade da porta que foi aberta. Por

    padro, ao se realizar a criao deste tnel, o servidor SSH permitir conexes na

    porta remota apenas na interface de rede local. at mesmo uma questo de

    segurana, uma vez que nem sempre quando a inteno se conectar a uma

    mquina atrs de NAT, o desejo de torn-la disponvel globalmente na internet.

    Voc poderia acess-la apenas a partir do servidor qual estabeleceu a conexo

    SSH, e no a partir de conexes externas realizadas ao mesmo servidor. fcil

    conferir isso com o auxlio do comando netstat:

    [root@squeeze:~]# netstat -tap | grep 5901 | tr -s ' 'tcp 0 0 localhost:5901 *:* LISTEN 2910/4

    Os parmetros -tap listam todos os sockets TCP abertos em todas as interfaces

    rede, o grep filtra somente a porta que queremos e o tr com o parmetro -s

    remove os espaos desnecessrios. Perceba que o servidor est aceitando

    conexes apenas na interface de rede localhost (127.0.0.1). H duas formas de

    contornar isto: a forma segura e a no to segura. A segunda consiste em tornar

  • disponveis globalmente estes sockets abertos pelo SSH, adicionando a opo

    GatewayPorts yes no arquivo de configurao do servidor SSH (no Debian o

    /etc/ssh/sshd_config) e em seguida reiniciando-o. Ao realizar novamente a

    conexo, veja como fica a porta aberta:

    [root@squeeze:~]# netstat -tap | grep 5901 | tr -s ' 'tcp 0 0 *:5901 *:* LISTEN 2996/4tcp6 0 0 [::]:5901 [::]:* LISTEN 2996/4

    Agora o socket est disponvel no apenas em todas as interfaces, como em

    ambos os protocolos IPv4 e IPv6. Sendo assim, voc poderia, por exemplo, a

    partir de uma terceira mquina no envolvida no processo de criao do tnel,

    acessar o VNC disponvel na mquina cliente, se conectando ao **:1**". Esta

    possibilidade muito interessante, no apenas porque possibilita o acesso a um

    computador antes inacessvel via internet, mas pelo fato de que no nos interessa

    o IP do mesmo. Com um servidor com um IP fixo, voc no precisaria se

    preocupar com diversos clientes com IPs dinmicos (mutveis), pois todos

    estariam acessveis a partir de um ponto central.

    Por ltimo, vamos forma segura de se acessar esta mquina. Ao invs de tornar

    a porta disponvel na internet, muito mais seguro, e at mesmo mais simples por

    no tornar necessria a mudana na configurao do servidor SSH, utilizarmos

    uma porta local na outra ponta, aliando as duas tcnicas de tunelamento. A partir

    da terceira mquina, basta utilizar o mesmo comando que seria necessrio para

    se conectar a uma sesso do VNC disponvel no servidor. Afinal, por mais que o

    servio em si no esteja rodando l, a porta est disponvel, e atravs do tnel

    podemos acess-la mesmo se esta estiver restrita a interface local.

    $ ssh -L 5901:localhost:5901 usuario@

    Da mesma forma, a partir do cliente VNC voc se conectaria ao endereo

    localhost:1. A nica diferena que desta vez a conexo passaria por dois

    tneis:

    terceira-mquina -> servidorservidor -> mquina-cliente

    Pode no parecer to prtico, mas veja alguns dos problemas que resolvemos e

    benefcios que obtivemos com esta abordagem.

  • Copyright 2015 - Tiago Ilieve Powered by Jekyll

    A nica porta aberta para a internet, levando em conta os trs computadores,

    a porta do servidor SSH.

    possvel se conectar a mquinas que antes estariam inacessveis.

    No necessrio se preocupar com o IP voltil das mquinas envolvidas

    (levando em conta que o servidor tenha um IP fixo ou pelo menos um servio

    de DNS dinmico configurado).

    Um protocolo inseguro como o VNC foi encapsulado em tneis seguros com a

    reconhecida criptografia do SSH.

    Sua nica preocupao consiste em estabelecer os tneis e recri-los em

    caso de perdas de conexo, o que pode ser feito automaticamente com

    ferramentas gratuitas como o Tunnelier.

    O processo pode no ser to simples, a princpio, mas a segurana e flexibilidade

    trazidas podem valer muito mais a pena do que simplesmente abrir uma porta no

    modem. A internet hoje uma selva. No deixe a segurana de lado apenas

    porque nunca aconteceu com voc.

    Referncias:

    Howto use SSH local and remote port forwarding