tuneles ssh y algo mas
TRANSCRIPT
-
\\\\\\\\\\\\ CURSO orientacin HACKER ////////////// //////////// By DarKh|s.exe (n+1) \\\\\\\\\\\\\\
http://www.cursohacker.com
Disclamer: NO se asume ninguna responsabilidad debida al mal empleo de la informacin aqu contenida, puesto que este texto
solamente tiene fines educativos y en ningn caso pretende incitar a nadie a cometer ningn delito ya sea informtico o de otra ndole.
Tneles SSH y algo ms
En este manual explicaremos como crear tneles seguros, utilizando
SSH, lo que nos ser muy til en varias oportunidades. Veremos la
creacin de tneles inversos seguros, lo que llamamos un tnel ssh
pero de conexin inversa, y como es de costumbre, un caso prctico,
en dnde mostraremos una conexin inversa segura para
administracin remota veloz.
En primer lugar que es un tnel? un tnel en informtica es
encapsular un protocolo de red dentro de otro protocolo, de esta
forma tendremos por ejemplo el protocolo ethernet encapsulado en
PPP, el protocolo PPPoE que realiza esta encapsulacin se utiliza para
proveer conexiones de banda ancha en servicios de cablemdem y
xDSL.
Otro caso de tnel o tunelizacin, es cuando tenemos un
servicio/protocolo inseguro como por ejemplo ftp o SMB, si queremos
utilizar estos servicios mediante un medio inseguro como lo es
Internet o redes locales, tenemos dos opciones para asegurar esas
conexiones, una es utilizar protocolos alternativos que ya cuenten con
una capa de seguridad, por ejemplo sftp, pero en SMB (netbios) no
contamos con ello, en ambos casos para asegurar la conexin y no
tener que cambiar los protocolos y servidores es crear un tnel
seguro, por ejemplo un tnel con la seguridad de ssh.
-
De esa forma tendremos protocolos inseguros viajando de forma
encriptada por tneles seguros, es como si en vez de viajar en auto
hasta cierto punto, llevramos el coche en tren (que sera el medio
seguro) y as evitarnos atascos, y accidentes que son ms frecuentes
en
carreteras que en vas de tren.
El encapsulamiento de los paquetes en este caso se da, colocando el
paquete que se quiere transmitir dentro del campo datos y de forma
encriptada en un nuevo paquete.
Tambin un tnel nos permite evadir restricciones de firewalls, por
ejemplo si en una red interna bloquean ciertos puertos, podemos
evadir ese bloqueo utilizando tneles, ya deben estar pensando en
como conectarse al MSN en su red utilizando est tcnica, y claro que
se puede! En los ejemplos ms adelante veremos como tnelizar
conexiones y podrn hacer eso y muchas otras cosas!
Para quienes an no saben sobre SSH, les comento que, adems de
un programa, es un protocolo. Ambos se utilizan para acceder a
servicios y dispositivos remotos a travs de la red. Pudiendo as
-
tomar control remoto de dispositivos, bsicamente como si fuera el
protocolo telnet pero la comunicacin en SSH es encriptada,
utilizando claves asimtricas.
Ahora ya saben sobre tneles y SSH, pero que es una conexin
inversa?
Cuando utilizamos internet diariamente, en general utilizamos
conexiones directas, ya que quien establece la conexin es el cliente
hacia el servidor.
Por ejemplo al abrir una pgina web en nuestro navegador, nosotros
(el cliente) establecemos la conexin directamente con el servidor, y
el servidor responde. En caso de conexin inversa quien establece la
conexin primaria es el servidor, el cual se conecta a nosotros.
Recordemos, que en la conexin directa, si se realiza a travs de
Internet, el servidor debe estar accesible en la red, as el cliente
utilizando una direccin IP pblica o un nombre de dominio pueda
acceder.
El servidor puede estar conectado directamente a Internet y el mismo
tener la direccin IP pblica, pero tambin, y como es muy comn, el
servidor se encuentre en una red privada y se conecte a Internet a
travs de uno o varios routers, entonces uno de estos dispositivos de
ruteo (los routers) tendr la direccin IP pblica que sirve en
Internet.
Entonces en ese caso, al realizar la conexin a la direccin IP pblica
nos estaremos contactando con el router y no con el servidor, para
poder acceder al servidor habr que redireccionar puertos o bien
crear una conexin inversa.
Para dejarles claro, las conexiones inversas, se dan al revs, es decir,
el servidor se conecta al cliente, y as se establece la conexin.
Si tenemos el servidor en una red privada y el mismo sale a Internet
mediante un router, tendremos dos opciones para acceder a el desde
la red externa, una, la fcil, es redireccionar puertos en el router, la
otra es crear un tnel inverso, en el cual acta un servidor SSH
accesible desde Internet (desde dnde nos queremos conectar), y
desde el servidor (al cual nos queremos conectar) se crea el tnel
inverso. Es confuso pero ya lo veremos prctica y grficamente para
su salud mental ;)
-
Resumiendo, usaremos tneles seguros ssh para evadir bloqueos de
firewall, as cmo para acceder a servicios desde Internet de forma
segura, solamente con un servidor SSH.
Veamos un ejemplo
La situacin es la siguiente; Tenemos la computadora del trabajo, la
cual tiene un servidor SSH para control remoto, queremos acceder a
la misma pero se encuentra "firewalled", es decir, inaccesible desde
Internet directamente. Por varias razones no se pueden redirigir
puertos en el gateway, y el firewall del mismo permite trfico
entrante y saliente por cualquier puerto, es decir que no tiene
bloqueos, es permisivo.
Por otro lado tenemos en casa un PC, desde la cual queremos
conectarnos y establecer conexin con el servidor SSH del trabajo,
como este no se encuentra accesible desde Internet la solucin es
crear un tnel ssh inverso, veamos que hay que hacer:
En Casa instalaremos un servidor SSH, el cual debe ser accedido
desde Internet directamente, definiremos un usuario para que se
pueda conectar, en este manual lo llamaremos usuario_casa. Desde
el trabajo deberemos poder establecer conexin con el servidor SSH
-
de Casa utilizando un cliente SSH, pero no viceversa ya que la PC-
Trabajo no es accesible desde Internet.
Acto seguido crearemos nuestra bendita solucin, que es el tnel ssh
inverso:
En sistemas tipo Unix (GNU / BSDs) teniendo un cliente ssh, en lnea
de comandos la sintaxis sera del siguiente modo (los campos
encerrados con smbolos de mayor y menor < > deben ser cambiados
por sus correspondientes):
root@trabajo:~# ssh -l -R :localhost: -f -N
Si no queda claro, el comando a ejecutar en el PC del trabajo como
usuario root, exactamente sera:
root@trabajo:~# ssh -l usuario_casa -R 22000:localhost:22 -f -N
dominio_casa.org
Ese comando lo que hace es conectarse al servidor ssh de Casa, el
cual puede accederse a travs del nombre de dominio
"dominio_casa.org" (en caso de no tener nombre de dominio
colocaramos la direccin IP, o utilizar servicios como no-ip), en ese
PC se abrir el puerto 22000 que al conectarse ser redirigido al
puerto 22 del "localhost" que en este caso (como ejecutamos el
comando en PC-Trabajo) ser el propio sistema del trabajo.
Luego de ejecutado se pedirn los datos de autenticacin para el
usuario ingresado (usuario_casa). A continuacin en PC-Casa si
realizamos la conexin con un cliente ssh al puerto local 22000 y
gracias al tnel inverso, se realizar la redireccin y nos estaremos
conectando con el PC del trabajo que era nuestro objetivo.
Ejecutaremos en este caso un cliente ssh ya que queremos acceder al
servidor ssh del trabajo, pero si fuera otro el servicio que tuviera la
PC-Trabajo corriendo deberemos utilizar un cliente acorde al servicio.
Entonces en PC-Casa para conectarnos al servidor SSH del trabajo
quedara as el comando:
usuario_casa@casa:~$ ssh -p 22000 usuario_trabajo@localhost
El usuario_trabajo es el usuario con el cual queremos loguearnos en
el PC del trabajo, y la conexin se hace al puerto 22000 del localhost,
-
es decir, del propio PC hogareo (casa), ya que cuando creamos el
tnel hicimos que se abra este puerto dedicado exclusivamente para
la redireccin y tnel inverso.
Veamos el caso con grficos:
-
Cuando se establece conexin por primera vez con un host a travs
de ssh, se pide una comprobacin de fingerprint (huella digital), como
se puede ver en el establecimiento del tnel ssh desde PC-Trabajo,
hay que aceptar para continuar.
SSH dispone de diversos mtodos de autenticacin, no solamente con
usuario y contrasea, sino que tambin se puede utilizando firmas
digitales, es todo un mundo.
Ya que saben lo que se necesita y como crear el tnel ssh, veremos
un par de casos prcticos, el primero es sobre control remoto
utilizando NX, y el otro es evadir bloqueos de firewall en una red.
NX administracin remota
Dentro de los sistemas de control remoto con soporte para interfaz
grfica, el que ha reinado por aos es VNC (Virtual Network
Computing) que utiliza el protocolo RFB, estos sistemas son inseguros
y su comportamiento hace que sean lentos y su uso algo exasperante
cuando intentamos controlar remotamente un sistema utilizando
interfaz grfica, an as con un ancho de banda aceptable.
-
NX es muy superior, NX es equivalente a decir rapidez, porque
realmente es un sistema muy veloz comparado con sus alternativas,
adems de que de por s es mucho ms seguro ya que utiliza ssh y
todo lo que ello conlleva.
Es posible utilizar NX hasta con viejos modems y conexiones con
ancho de banda nfimo para el da de hoy, con transmisiones de 56
Kbps, teniendo una usabilidad aceptable, que sera imposible con
otras alternativas. NX comprime y cachea directamente el protocolo
X11. Esto permite tener clientes livianos (tambin llamados clientes
tontos) en una red, para ahorrar costos, entre otras utilidades.
Los resultados de utilizar NX para control remoto son excelentes,
tanto en calidad de imagen como en velocidad y seguridad, es por
ello que vamos a explicar como usar NX y adems hacerlo para que
funcione en una conexin inversa a travs de un tnel ssh, para que
el servidor que se encuentra en una red privada pueda contactarse
con un cliente en Internet.
Instalaremos tanto el servidor como el cliente en sistema GNU/Linux,
utilizando los productos gratuitos de NoMachine
(http://www.nomachine.com/). Los servidores solamente se
encuentran disponibles para sistemas GNU/Linux, sin embargo los
clientes estn disponibles tanto para GNU/Linux, como para Windows,
Solaris y Mac OS X.
Adems NX proporciona soporte para sonido remoto, cosa que hemos
probado y funciona de maravillas!
Para comenzar, vamos a http://www.nomachine.com/download.php y
nos descargamos el NX Free Edition for Linux, el cual es el servidor
para GNU/Linux, NX de NoMachine es un software propietario, en
caso de que quieran uno software libre pueden probar FreeNX
(http://developer.berlios.de/projects/freenx/).
-
En la pgina de descargas de NX Free Edition for Linux (la que se
muestra en la anterior imagen) deberemos seleccionar el paquete a
descargar, segn nuestra distribucin y arquitectura de computador,
como estamos utilizando un derivado de Debian en versin de 64
bits, seleccionamos el paquete "NX Free Edition for Linux DEB -
x86_64"
Para otros sistemas, segn el caso, se utilizar un paquete RPM
(Derivados de Red Hat, SuSe, Fedora), o bien el paquete genrico
TAR.
-
Es necesario descargar los tres paquetes; client, node y server,
despus cada uno de ellos se debe instalar en el sistema siguiendo un
orden predefinido.
Luego de descargados los paquetes, instalaremos los mismos en el
sistema, utilizando la lnea de comandos, entonces en una consola y
estando en el directorio dnde estn los archivos, ejecutamos los
siguientes:
-
usuario@mint:~$ sudo dpkg -i nxclient_3.3.0-6_x86_64.deb
usuario@mint:~$ sudo dpkg -i nxnode_3.3.0-17_x86_64.deb
usuario@mint:~$ sudo dpkg -i nxserver_3.3.0-22_x86_64.deb
NX requiere de un servidor ssh, por tanto deberemos tener uno
instalado, por ejemplo podemos instalarlo con el comando sudo
aptitude install ssh o bien grficamente con su gestor de paquetes
preferido.
Al tener instalado los tres paquetes de NX descargados, tendremos el
cliente y el servidor listo para funcionar, si acabamos de instalar todo
y el servidor ssh, estar todo listo para conectarse, el cliente lo
vamos a ejecutar en entorno grfico, ejecutando /usr/NX/bin/nxclient
abriremos el asistente de conexin:
Le damos siguiente, para continuar.
-
En el segundo paso, deberemos definir un nombre para la sesin a
configurar, en nuestro caso la llamaremos con un nombre poco
original; "Prueba1". Luego en "Host" definiremos la direccin IP o
nombre de host al cual conectarse, recordemos que si establecimos
un tnel ssh inverso, nosotros tendremos el puerto abierto que nos
redireccionar al servidor, por tanto en este ltimo caso haremos la
conexin al localhost.
En "Port" colocaremos el puerto dnde escuche el servidor ssh en el
host definido. En la barra de abajo seleccionaremos el tipo de
conexin, desde la de menor ancho de banda a la izquierda, a la de
mayor ancho de banda a la derecha. En las conexiones ms lentas el
cacheo es mayor.
A continuacin se debe seleccionar el tipo de conexin, NX soporta
conexiones para administracin remota no solo con el protocolo NX,
sino que tambin soporta RDP (comnmente conocido por el
escritorio remoto de Windows) y VNC, el tipo de conexin a realizar lo
definimos en el primer men desplegable. Una opcin interesante y
curiosa es la de "shadow" lo que permite esta opcin es controlar
remotamente una sesin grfica ya existente en el servidor, es decir
-
si en el servidor alguien est conectado usando el entorno grfico
podremos controlar su escritorio, y el otro podr ver todo lo que
hacemos en vivo, es como si fuera una conexin espejo o bien una
conexin "sombra", en dnde en ambos lados es la misma.
En la prxima, en dnde por defecto est "KDE" definiremos el
entorno de escritorio que utilizaremos, ya conocern sobre KDE y
GNOME...
En el men desplegable, dnde por defecto est "Available area" se
configura la resolucin o tamao de la pantalla que se mostrar al
conectarse. La ltima opcin "Disable encryption of all traffic" no es
nada recomendable habilitarla, ya que elimina la seguridad
proveniente de el cifrado de las conexiones.
Y eso es todo lo que se necesita para la configuracin de conexin en
el cliente, ya por ltimo, nos da un resumen de la conexin que
vamos a realizar. Las ltimas dos opciones son "Create shortcut on
desktop" la cual crear un acceso directo para conectarse a esta
sesin definida.
S tildamos la opcin "Show the Advanced Configuration dialog" nos
mostrar las configuraciones avanzadas.
-
Al terminar nos aparecer la ventana de conexin:
All definimos el nombre de usuario y contrasea para la sesin
seleccionada, recordemos que la sesin contiene los datos de host,
puerto, tipo de conexin, etc. Todas esas configuraciones que
podemos acceder a travs del botn "Configure..."
Como NX funciona a travs de SSH, podremos en el servidor definir
una cuenta sin contrasea, o con contrasea trivial y que la
autenticacin se realice de forma segura, utilizando las claves
pblicas y privadas.
-
El cliente es igual en cualquiera de los sistemas operativos en los que
est soportado, existe y est disponible para todos, la extensa y de
muy buena calidad documentacin sobre NX de NoMachine, pueden
ver opciones avanzadas de configuracin del servidor entre otras
cosas en el siguiente enlace:
http://www.nomachine.com/documents.php
Podemos acceder a la configuracin de la conexin y otras
configuraciones avanzadas, a travs del botn "Configure..."
Como pueden observar podemos cambiar la configuracin de la
sesin, el host, el puerto, el tipo de conexin y sistema operativo
remoto. As como tambin definir la clave privada de la conexin ssh
en el botn "Key...", por defecto vienen un par de claves, que si
queremos ms seguridad es muy recomendable cambiarlas, o sea,
generar nuevas claves pblica y privadas y distribuirlas de forma
segura a quienes se vayan a conectar.
-
En la pestaa "Advanced" se puede configurar que la conexin se
realice a travs de un proxy HTTP, tambin all se define la cantidad
de espacio para el cache, como deben saber la memoria cache es una
memoria de acceso rpido, en este caso all se almacenan los iconos
y dems flujos del ambiente grfico. Esto permite la reutilizacin de
la informacin transferida entre el cliente y el servidor.
Adems, como comentaba, la informacin transferida es comprimida,
lo que lo hace an ms rpido, todo est hecho para que sea un
protocolo de administracin remota, realmente usable y seguro.
En la pestaa "Services" podemos habilitar el protocolo SMB
(conocido como el Compartir archivos e impresoras en Windows) y
el protocolo CUPS para impresin remota, si se habilita la opcin
"Enable multimedia support" se podr escuchar el audio del equipo
remoto, con muy buena calidad.
-
Evadiendo bloqueos de firewall en redes internas
Est tcnica nos permitir navegar por sitios de Internet que se
encuentren regulados en la red interna, por ejemplo si nos bloquean
el acceso a servicios de correo electrnico en nuestro trabajo (gmail,
hotmail, yahoo, alumnoz...). Tambin en ciertas escuelas o
universidades se realizan bloqueos similares, que son fcilmente
evadibles con la tcnica que pasaremos a explicar, la cual se basa en
tneles ssh!
Tambin, y como hemos comentado, esta tcnica nos permitir
utilizar servicios que tenemos bloqueados, por ejemplo si en nuestra
red solamente tenemos salida por el puerto 80 y con esto no poder
acceder normalmente a servidores de correo, mensajera instantnea,
redes p2p, u otros servicios, podremos, utilizando tneles ssh, tener
conexiones seguras y utilizar cualquier servicio que queramos!
O sea, que para evadir todos esos "poco tiles" bloqueos,
utilizaremos tneles ssh, veamos cmo:
En primer lugar, en la red que tenemos restricciones, debemos
determinar que tipo de bloqueo tenemos, es decir, saber si tenemos
bloqueado puertos, por cuales puertos podemos acceder ?, ya
que por esos puertos en los cuales tenemos va libre de acceso es
dnde crearemos el tnel ssh.
-
La idea es que desde un pc dentro de la red con restricciones, crear
un tnel ssh, el cual se conectar a un servidor ssh configurado por
nosotros que tendr un proxy, por ejemplo para acceder a sitios
restringidos utilizaremos un web proxy o un proxy SOCKS.
De nuevo
-
usaremos la PC de casa, en la cual tendremos un servidor ssh
configurado para que escuche en el puerto por el cual queremos
acceder desde la red bloqueada, es decir si en la red con restricciones
podemos pasar por el puerto 80, configuraremos el servidor ssh para
que escuche en el puerto 80.
Necesitaremos un cliente ssh para establecer el tnel en la PC del
trabajo/escuela, el cual ser el sistema que est dentro de la red
privada y est bloqueado por el firewall. En sistemas tipo Unix
podremos utilizar el cliente ssh de lnea de comandos, en sistemas
Windows utilizaremos putty.
En el cliente web (navegador) del trabajo se deber configurar en la
seccin proxys la direccin y puertos correspondientes, lo veremos
paso a paso y con imgenes:
El proceso es extremadamente sencillo, utilizaremos el cliente ssh de
lnea de comandos en GNU/Linux, para establecer sesin con el
servidor ssh remoto de la PC hogarea (en casa) y as abriremos un
puerto local en la PC bloqueada (trabajo), en el cual todas las
conexiones al mismo pasarn a travs del tnel ssh y sern
redirigidos al sistema de casa el cual resolver que hacer (de forma
muy mgica ;).
La sintaxis del comando es la siguiente:
ssh -D -p
@
Entonces vamos a abrir el puerto 7331 local en el PC del trabajo,
nuestro servidor ssh escucha en el puerto 80, ya que es el nico
puerto por el cual podemos salir, gracias al firewall de nuestra red
que nos bloquea todo menos ese bendito puerto ;)
Desde el PC-trabajo nos conectamos con el comando ssh -D 7331 -p
80 usuario_casa@dominio_casa.org
-
usuario_casa es un usuario de nuestra PC hogarea con el cual
podemos establecer conexin ssh, luego dominio_casa.org
simplemente es el nombre de dominio con el cual identificamos al PC
de casa, obviamente ;), pero bien puede ir all la direccin IP del host
remoto.
Y como apreciamos luego de ejecutar netstat -nat en la PC-trabajo
vemos que se abri el puerto 7331 escuchando localmente, ahora
vamos a nuestro navegador que en este caso mostraremos la
configuracin en Mozilla Firefox que es un muy buen navegador web
multiplataforma.
Vamos al men Editar > Preferencias (en la versin para Windows es
en Herramientas > Opciones), en la ventana que aparezca vamos a la
pestaa/opcin Avanzado:
-
All
nos
diri
gi
mo
s a
la
pes
ta
a
Re
d
y
lue
go
en
Co
ne
xin hacemos click en Configuracin, espero hayan llegado hasta la
siguiente ventana:
-
Es en ella dnde se debe seleccionar la opcin Configuracin manual
de proxy all definiremos en Servidor SOCKS; localhost y en puerto
7331 que es el puerto abierto en nuestra mquina local, igual que en
la anterior imagen, obviamente si configuran otro puerto ser otro
nmero.
Ahora cuando usen el navegador se estarn conectando a travs del
tnel ssh de forma segura y sin restricciones ! Felicitaciones ! ;)
Una ltima nota para Firefox, es que las resoluciones de nombre se
seguirn resolviendo localmente, es decir, con la configuracin que
tenamos, pero si tenemos restricciones tambin en ese sentido,
debemos hacer pasar la peticin de resolucin de nombre a travs del
tnel y con socks, entonces accederemos desde el navegador a la
direccin about:config y vamos hasta la clave
network.proxy.socks_remote_dns la cual la asignaremos en true.
-
En otros navegadores web, la configuracin es muy similar, no
tendrn problemas.
Como decamos, este mismo procedimiento se puede hacer con otros
servicios, como el de msn que ser muy til para quienes quieran
utilizarlo en lugares dnde est restringido.
Actualmente funciona, pero como Micro$oft cambia a menudo el
protocolo puede que no funcione. Luego de tener el tnel ssh creado,
lo que hay que hacer en el cliente de msn que utilicen es configurar el
servidor SOCKS para el localhost y el puerto que hayan abierto para
la redireccin.
En el cliente aMSN vamos a el men Cuenta > Preferencias >
Conexin y all lo configuramos como pueden apreciar:
En Windows Live Messenger 2009, el camino es el siguiente:
-
Vamos a Opciones > Conexin > Configuraciones avanzadas, y all
configuramos SOCKS, como ya saben ;)
-
Podremos conectar varios clientes al mismo tiempo para que usen el
tnel ssh, por ejemplo podemos tener amule, firefox, aMSN todos
usando el tnel al mismo tiempo pasando por el mismo puerto y
traspasando los bloqueos que nos quisieron imponer en la red !
Todos los procedimientos explicados en este manual, se pueden realizar en sistemas operativos tipo Unix (GNU, BSDs), as como en
versiones de Windows superiores a 95, utilizando programas como copssh o tectia (servidores ssh) y putty (cliente ssh que crea tneles
ssh de manera verstil).
Para esta ltima prctica, en putty, deberemos ir a la seccin
Connection > SSH > Tunnels, all en Source port se coloca el puerto a abrir localmente y se activa la opcin Dynamic, luego se hace click en el botn Add y creamos la conexin con los datos de host y puerto en la seccin Session y listo:
En caso de tener problemas de conexin, con los tneles, deben
comprobar en el archivo de configuracin del servidor SSH, que estn
las siguientes lneas:
AllowTcpForwarding yes
GatewayPorts yes
TCPKeepAlive yes
-
En general estn por defecto, pero si no les llega a funcionar,
comprueben eso.
Ahora s, ms libertades ;) Que lo disfruten, hagan uso y abuso !
0d1n
FIN DEL MANUAL Tneles SSH y algo ms Autor: 0d1n
Fecha ltima revisin: 15/06/2008
Elaborada con material ofrecido por autores Annimos y elaboracin propia. El presente material se promueve con fines completamente
educativos, por lo que el Autor no se responsabiliza de malos usos o de usos de terceros. Esta prohibida la reproduccin parcial o total del
material aqu contenido sin expresa autorizacin de cursohacker.com.