jueves, 11 de junio de 2009

Scripts con netsh para distintas configuraciones de red

Vi por la red distintos comandos netsh para modificar la ip, la puerta de enlace, los DNS, etc.
Sin embargo es posible que con solo recordar dos comandos podamos hacer scripts que modifiquen cualquier parametro modificable con netsh.
Lo primero que hay que hacer es configurar la red a nuestro gusto. Luego ejecutamos el siguiente comando:

netsh -c interface dump > red1.conf

Podemos tener las configuraciones que querramos, red2.conf, etc.
Cuando necesitemos utilizar una configuracion ejecutamos:

netsh -f red1.conf

Lamentablemente aun no encontre cómo resguardar la configuracion de ICS (Conexion compartida a internet)

Ejemplo de tunneling ssh: cliente pop3 seguro

Pop3 es un protocolo inseguro. Esto es: la transferencia de datos, comenzando por el usuario y contraseña, hasta la ultima palabra del contenido del mensaje, son todos enviados en texto plano, con lo que un intruso podria interceptar la informacion sin problemas.
Una solucion es utilizar otro protocolo, otra solucion es utilizar Tunneling ssh, lo cual implica pocos cambios en el cliente y el servidor.
No me voy a explayar en el concepto de tunneling, eso esta muy bien explicado en wikipedia. Me voy a remitir a un ejemplo y luego a explicar el funcionamiento.
Voy a suponer que el servicio sshd esta instalado en el servidor que corre tambien el servicio pop3.
En un terminal linux ejecutamos el siguiente comando:


ssh -f -L 10110:localhost:110 usuario@mailserver.com sleep 60

Eso deja a ssh "escuchando" localmente en el puerto 10110. Todas las consultas al puerto 10110 seran captadas por ssh y luego enviadas al servidor mailserver.com al puerto 110 (pop3)

El parametro fundamental es -L y le indica a ssh que implemente el tunneling. El parametro -f pone a ssh en segundo plano liberando la consola, y el parametro sleep 60 indica a ssh que espere 60 segundos antes de finalizar.
El tiempo de espera en el que ssh permanece escuchando puede verificarse con:
ps -e | grep ssh
.

El formato usuario@mailserver.com es una forma de indicar el usuario y servidor en donde se encuentra tanto el servicio pop3 como el sshd. Usuario es un usuario de sistema aceptado por ssh, no confundir con el usuario de correo, aunque podria ser el mismo.
Podria indicarse tambien asi:

ssh -f -L 10110:localhost:110 mailserver.com -l usuario sleep 60

A partir de ese momento ssh estara escuchando por 60 segundos hasta que se inicie una sesion pop3. Una vez iniciada esa sesion, el contador continua pero ssh sigue activo hasta que se cierre la conexion con el servidor de correo.
La forma de iniciar una sesion pop3 podria ser la siguiente:

telnet localhost 10110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
Trying 127.
user usuariodecorreo
+OK Password required.
pass contraseña
+OK logged in.
quit
+OK Bye-bye.

O sea que se inicia una sesion conectando a un servidor local en el puerto 10110.
El puerto 10110 es arbitrario, podria ser 42300, incluso el mismo 110. Solo hay que tener cuidado de no "pisar" puertos ya utilizados. Si quisieramos utilizar el puerto 110, tendriamos antes que detener el servicio pop local, si lo hubiera. Otro concepto importante es que, a menos que seamos root, no es posible utilizar, por ejemplo, el puerto 800 pues solo esta permitido a root utilizar puertos menores que 1025.
Es interesante notar que en este ejemplo estan en juego tres puertos: el 10110 que escucha localmente, el 110 que es el puerto encapsulado por ssh y el puerto 22 (el propio ssh) que es el puerto que transportará (enmascarando) las consultas pop.

Un experimento interesante si tenemos acceso al servidor, es controlar el trafico mediante el comando tcpdump.
Si nos conectamos via telnet desde el cliente 192.168.1.126 podemos verificar que efectivamente el texto es plano sin el tunneling y esta encriptado cuando utilizamos tunneling.
Este experimento tambien deja ver que el unico puerto que podria ver un firewall es el correspondiente a ssh. De donde se desprende otro uso que podria darse a la tecnica de tunneling.
El comando en el servidor seria:

tcpdump -A host 192.168.1.126

Ahora que ya conocemos el funcionamiento, podriamos ensayar las caracteristicas de tunneling que trae incorporadas putty para windows y configurar Outlook Express para hacer de pop3 un cliente mas seguro.

Un paso mas
Decia mas arriba que el parametro -L 10110:localhost:110 deja escuchando a ssh localmente en el puerto 10110. Pero qué pasaria si quisiera conectarme remotamente a ese servidor que escucha en el puerto 10110? La respuesta es que la solicitud seria rechazada ya que solo escucha localmente. Para que acepte tambien consultas externas hay que inidicarselo con un parametro opcional y aqui es conveniente hacer un man ssh.
El comando que deja a ssh escuchando en el puerto 10110 accesible desde una red local es, suponiendo que la ip de la pc en cuestion es 192.168.1.126:

ssh -f -L 192.168.1.126:10110:localhost:110 mailserver.com sleep 60