martes, 18 de septiembre de 2007

Internet : La red de Redes


Si le llaman la red de redes es por algo y estoy convencido que la mayoría de la gente lo asocia con el internet explorer. Y que en internet lo único que hay son paginas web. Y se olvidan que internet son un montón de ordenadores conectados entre si con un protocolo en común "internet protcol" IP. Que nos aporta esto??? el poder identificar los ordenadores en la red y poder acceder a ellos. Y esto para que sirve ?? pues para permitir a los programas que tenemos en nuestro ordenador hablar con otros programas de otros ordenadores, con esto quiero decir que puedan localizar al programa con el que se quiere hablar.

Dado que lo que se hace es dar la posibilidad de localizar un ordenador en la red para que hablen dos programas entre si, aquí es donde aparecen los conceptos de cliente y servidor. Donde el servidor es un programa que espera a que le hablen, le pregunten,.... y el cliente es el programa que hace las preguntas,... Un servidor web es un programa que espera que le pidan paginas web y el "internet explorer" , "firefox",... son clientes que le piden al servidor una pagina especifica. En este post no voy a explicar como montar un servidor web ni configurarlo (todo se andará), pero aprovechando el ejemplo del post : Trankilo pero Expectante, donde se explicaba como obtener la ip publica con la que se conectaba el router de una tipica red LAN casera. Voy a explicar como tener a nuestro ordenador localizado en la red y poder acceder a él desde cualquier ordenador que tenga internet. Seguidamente daré las pautas mínimas para montar un servidor de ftp y scp en nuestra maquina con Ubuntu y de esta manera tendremos acceso a los archivos de nuestra maquina desde cualquier sitio con internet. También servirá para poder enviarlos ficheros a nuestro ordenador.

#!/usr/bin/expect

set ipaddr [lindex ${argv} 0]
set usr [lindex ${argv} 1]
set pwd [lindex ${argv} 2]

spawn telnet ${ipaddr}

set timeout 600

expect -nocase "Login: " {
sleep 1
send "${usr}\r"
sleep 1
} timeout {
send_user "ERROR: Timeout intentando copia SCP"
exit 1
}



set timeout 600

expect -nocase "Password: " {
sleep 1
send "${pwd}\r"
sleep 1
} timeout {
send_user "ERROR: Timeout intentando copia SCP"
exit 1
}


send -- "ip list interfaces\r"
sleep 3
send -- "user logout\r"


interact
Nota : RECORDAR que esto es para un router especifico, "Xavi 7868r". En este script se ha modificado un poco para que pueda aceptar parámetros. Si combinamos este script en expect con este otro en bash. conseguimos que se nos mande a una dirección de correo electrónico nuestra IP pública.
#/bin/bash
expect -f Obtener.Ip.Publica 192.168.1.1 1234 1234 | grep "ppp-0" > ip.publica
mail -s "jeje" direccion@gmail.com < ip.publica

192.168.1.1 ip del router
1234 usuario del router
1234 password del router
"jeje" asunto del mail que se envia
Este script lo que hace es ejecutar el script de expect y guardar en el fichero "ip.publica" la ip publica de nuestro router y con el programa mail enviarlo a una dir de correo electrónico. Ahora ya tenemos 2 scripts que nos permiten enviar nuestra Ip a dirección de correo electrónico. Ahora lo que nos falta para que este todo perfecto es que esta tarea se repita o que se realice cuando nos cambie la ip del router. Lo de enviar la ip cuando cambie os lo dejo para vosotros (el comando diff de bash compara ficheros). Ahora lo que queda es configurar el cron o el icron para que realice la tarea de consulta de ip pública y el envío de mail a dir de correo si miráis el post : El tiempo es Oro viene explicado como configurar el cron y el icron para que realicen estas tareas.

Con esto siempre que estemos en un equipo con internet, podremos consultar nuestra cuenta de correo y ver cual es la ip de nuestro equipo. La finalidad de todo esto es poder cojer o enviar ficheros para nuestro equipo. Para ello habrá que instalar con un servidor que nos permita envío y la recepción de ficheros. La opción mas fácil es usar SCP pero windows no da soporte por defecto para este protocolo. Ubuntu lo trae por defecto. Hay que activar el servicio del ssh y configurar el fichero /etc/shh. Para los casos que no tengamos la disponibilidad de usar scp podemos montar un servidor de ftp. Ya que windows y el internet explorer trae un cliente de ftp por defecto. Para instalar un servidor de ftp basta ejecutar la siguiente linea de comandos.

$ sudo apt-get install vsftpd
Para configurar este servidor de ftp hay que editar este fichero de configuración : /etc/vsftpd.conf las opciones que nos permite son las siguientes :
anonymous_enable Si el valor de esta directiva es YES cualquier usuario se puede conectar al servidor dando el nombre de usuario anonymous o ftp. Por razones de seguridad se debe poner NO (anonymous_enable=NO)
local_enable
Esta línea indica que si se permite o no el acceso de usuarios locales a sus respectivas carpetas privadas. Si se permite el acceso habría que poner local_enable=YES (local_enable=NO en caso contrario).
chroot_local_user Permite enjaular a los usuarios dentro de su propio directorio personal. Si en el fichero de configuración aparece chroot_local_user=NO, entonces el usuario tiene acceso a todo el sistema de archivos, en función de los permisos asignados. Cuando un usuario local se conecta y en el fichero de configuración aparece chroot_local_user=YES, entonces enjaulamos a los usuarios dentro de su propio directorio personal, sin posibilidad de acceder a todo el sistema de ficheros. Se mejora por tanto la seguridad.
write_enable Con esta directiva se puede permitir o denegar la subida de ficheros al servidor FTP. Si se permite que los usuarios suban archivos al servidor FTP habría que poner write_enable=YES.
local_umask
Se pueden establecer los permisos con los que quedará el archivo al subirlo al servidor FTP. local_umask=022 indicará que los permisos de los archivos serán 644, es decir, lectura y escritura para el propietario del fichero, y sólo lectura para el grupo y los demás.
anon_upload_enable Esta directiva indica si los usuarios anónimos pueden cargar archivos en el servidor. anon_upload_enable=YES permite que los usuarios anónimos puedan subir ficheros.
anon_mkdir_write_enable Si esta directiva tiene el valor YES se permitirá la creación de directorios en el servidor.
ftpd_banner Con esta directiva se puede mostrar un mensaje de bienvenida cuando un usuario se conecte al servidor FTP. ftpd_banner=?Bienvenido a mi servidor FTP?. anon_max_rate Se utiliza para limitar la tasa de transferencia a usuarios anónimos. En el siguiente ejemplo se limita la tasa de transferencia a los usuarios anónimos a 10Kb/s: anon_max_rate=1024
local_max_rate Se utiliza para limitar la tasa de transferencia en bytes por segundo a los usuarios locales del servidor. En el siguiente ejemplo se limita la tasa de transferencia a 10Kb/s: local_max_rate=1024
max_clients Indica el número máximo de cliente que podrán conectarse simultáneamente al servidor. En el siguiente ejemplo son 5: max_clients=5
Para iniciar parar o reiniciar el servidor de ftp usar :
# sudo /etc/init.d/vsftpd {start|restart|stop}

Ahora si lo que queremos es usar el scp o el ssh, necesitaremos instalarnos un servidor de ssh. Para ello más de lo mismo :

# sudo apt-get install openssh-server
Así instalamos el servidor y para configurarlo en /etc/ igualito que el servidor de ftp distintas opciones pero más de mismo. Si la maquina que estamos usando tiene linux (la que no es la nuestra) y queremos acceder a nuestro equipo de casa. Lo tenemos ya todo de serie. Con estos comandos ya podemos subir / bajar / controlar nuestro equipo remotamente. Para ello :

# ssh ip // abrimos una sesion en nuestro equipo
# ftp ip // abrimos una sesión de ftp para subir o bajar ficheros
# scp ip // abrimos una sesión de scp para subir o bajar ficheros
Donde la ip es la que leemos de nuestra cuenta de correo. Advertencia si estamos detrás de un router abra que direccionar los puertos a nuestra maquina. Para ello hay que modificar los parámetros de NAT del router. Donde hay que especificar los puertos del router externos los direccione a nuestra IP local de la maquina a tal puerto. Por defecto el ftp usa el puerto 21 y el ssh el 22. Esto se puede configurar a gusto de cada uno. En los ficheros de configuración de los servidores.

Si por el contrario estamos trabajando con Windows necesitaremos de unos programas para poder abrir estas sesiones contra nuestra maquina para ello descargarse estos programas que son libres y gratuitos :

ssh : usar el putty
scp : usar el winSCP
ftp : usar Filezilla
Alá pos ya tenemos acceso a nuestro equipo de casa y tenemos la posibilidad de lanzar comandos desde la consola en nuestra maquina de casa(ssh) y de subir y bajar ficheros a nuestro equipo de casa gracias al servidor de (ftp y scp). Ya no tenemos que cargar con nuestra pinza de usb, cd, dvds u medios de almacenamiento para transportar nuestros datos. Lo único que necesitamos es una conexión a internet.

Para los que no quieran tener el equipo de casa siempre encendido. Existe una forma de encenderlo remotamente. Para ello la tarjeta de red que usemos y nuestra placa base ha de tener la característica de WOL (wake on lan). También es necesario un programa externo que nos permita enviar a nuestra maquina un Magic Packet, para que encienda el equipo. Pero esto os lo dejo a vosotros para que investigues algo.


No hay comentarios: