SafeChildren Banner

Havoc Oracle Solaris Experts

lunes, 10 de mayo de 2010

Redirección de puertos utilizando SSH

Introducción
En esta ocasión vamos a ver Cómo podemos redireccionar puertos utilizando SSH. Lo primero que nos preguntamos es, ¿para qué? Bueno, la verdad es que para mucho, pero principalmente es para securizar protocolos inseguros por definición.

Me explico un poco mejor, si tenemos un servicio -por ejemplo POP3- cuyo protocolo no se diseñó con la seguridad en mente, y por lo tanto la transmisión de datos se hace en "texto plano" -si, es cierto que puedo poner SSL sobre POP3, pero vamos a imaginar que no- así que lo que hacemos es:

Establecer una conexión segura a través de SSH y luego, hacer que en esa conexión segura, se produzca un redirección de puertos.

OpenSSH
Fuente: http://www.e-ghost.deusto.es/docs/articulo.ssh.html

Básicamente el formato del comando es el siguiente:
ssh -L puertoLocal:host_a_resolver:puertoRemoto usuario@host

  • Puerto Local: Hace referencia al <puerto local> en el que nuestro SSH escuchará. Si ponemos un puerto inferior a 1024, deberemos ejecutar el comando como <root>
  • Host a Resolver: Hace referencia al <nombre dns> que nuestro "servidor" remoto resolverá
  • Puerto Remoto: Puerto al que nuestro "servidor" se conectará
Además, debemos tener la opción <AllowTcpForwarding> a <yes> en el archivo de configuración de Solaris </etc/ssh/sshd_config>

Veamos un ejemplo para tenerlo más claro. Supongamos que tenemos un servidos que tiene un servicio POP3, pero no tiene SSL y queremos "conectarnos de forma segura". A este servidor <mx1.test.com> podemos acceder mediante ssh

Desde una máquina remota <en nuestro caso será Makito>, haremos que el puerto 9000 sea un tunel al puerto 110 del servidor de correo, por ejemplo:
makito:~ itily$ ssh -L 9000:localhost:110 user@mx1.test.com
Abrimos otro terminal y comprobamos que ahora tenemos el puerto 9000 a la escucha
makito:~ itily$ netstat -an|grep 9000
tcp4       0      0  127.0.0.1.9000         *.*                    LISTEN
tcp6       0      0  ::1.9000               *.*                    LISTEN
tcp6       0      0  ::1.51434              ::1.9000               TIME_WAIT
Y si nos conectamos con un simple telnet podemos ver, que realmente nos hemos conectado al servidor de correo POP3

makito:~ itily$ telnet localhost 9000
Trying ::1...
Connected to localhost.
Escape character is '^]'.
+OK <70008.1273507610@mx1.test.com>
^]
telnet> quit
Connection closed.
Vale, tal vez ahora no os parezca algo muy potente, pero ... vamos a ver algo que os puede interesar. 

Conectar a MemCached de forma segura
Ya hemos visto Cómo Instalar MemCached en Solaris, pues bien, MemCached utiliza un protocolo ASCII, o binario, pero en ningún caso utiliza control de acceso y menos encriptación. Así que, no debemos permitir el acceso a ningún host que no sea realmente el que debe acceder para almacenar/leer datos. 

Pero qué sucede con los Sistemas de Monitorización como Nagios? Bien, la verdad es que podemos habilitar Procedimientos para la monitorización de sistemas con Nagios de forma segura pero, también podemos hacer un tunel con ssh para poder lanzar estadísticas, no?

Si yo ejecuto el siguiente comando -asumiendo que mi Servidor de MemCached está en el puerto 11211 a la escucha-
makito:~ itily$ ssh -L 9001:localhost:11211 memcached.test.com
Y desde otro terminal
makito:~ itily$ telnet localhost 9001
Trying ::1...
Connected to localhost.
Escape character is '^]'.
stats
STAT pid 19155
STAT uptime 1153381
STAT time 1273509365
STAT version 1.4.5
STAT pointer_size 32
...
END
quit
Connection closed by foreign host.
Conclusiones
Puede que nos interese conocer el sistema de PortForwarding de ssh para situaciones donde necesitemos una conexión segura, pero o bien el protocolo o la configuración no nos lo permite.

Referencias

No hay comentarios:

Publicar un comentario