You are on page 1of 13

NETinVM - Una red en una mquina virtual

Una herramienta para la enseanza y el aprendizaje de SSOO, redes y seguridad


Autores: Carlos Prez y David Prez

Fecha:

11 de julio de 2013

Contenido

Introduccin Descripcin de NETinVM Trabajando con NETinVM o Puesta en marcha inicial o Puesta en marcha completa o Ejemplo de uso: capturar una conexin HTTP Una descripcin ms detallada o Almacenamiento en las mquinas UML o Configuracin de las mquinas UML Ejercicios de ejemplo

Introduccin
NETinVM es una imagen de mquina virtual VMware que permite trabajar como si uno dispusiera de una red de computadores a su disposicin. De esta forma, NETinVM se puede utilizar para el aprendizaje de SSOO y redes, incluyendo aspectos tan relevantes como la seguridad de sistemas y redes. Al mismo tiempo, NETinVM, al ser una imagen de VMware permite que un profesor la utilice como base para la realizacin de ejercicios dirigidos, para demostraciones en clase que pueden despus ser reproducidas por los alumnos tanto en un laboratorio docente como en un porttil y, por lo tanto, en su casa, la biblioteca... Es por esto que presentamos NETinVM como una herramienta adecuada para la enseanza.

Descripcin de NETinVM
NETinVM es una imagen de mquina virtual VMware que contiene, preparadas para ejecutarse, una serie de mquinas virtuales User-mode Linux (UML). Al ponerlas en marcha, las mquinas virtuales UML forman una red de computadores. De ah el nombre NETinVM, que es la abreviatura deNETwork in Virtual Machine (red en una mquina virtual). A la red virtual as formada la hemos denominado 'example.net' y, de hecho, los nombres cualificados de las mquinas son del tipo 'base.example.net', 'fw.example.net'... Todas las mquinas virtuales utilizan el sistema operativo Linux. La mquina virtual VMware recibe el nombre 'base' y ejecuta la versin 10.3 de openSUSE. Las mquinas User-mode Linux usan la versin 4 de Debian y reciben nombres diferentes en funcin de su ubicacin en la red virtual, ya que estn agrupadas en tres subredes, que desempean el papel de las redes corporativa, perimtrica y externa de una organizacin. Estas redes reciben en NETinVM los nombres 'int' (por red interna), 'dmz' (por DMZ o zona desmilitarizada, que suele usarse como sinnimo de red perimtrica) y 'ext' (por red externa). Una de las mquinas UML, 'fw', conecta entre s las tres redes permitiendo la comunicacin y el filtrado de paquetes. Las dems UMLs tienen una nica interfaz de red conectada a la red que les da nombre:
int<X>

UMLs conectadas a la red interna. <X> puede tomar los valores de 'a' a 'f', ambos inclusive. Estas mquinas slo ofrecen el servicio SSH.
dmz<X>

UMLs conectadas a la red perimtrica (DMZ). Pensadas como nodos bastin. En esta red hay dos mquinas con alias:
ext<X>

'dmza' tiene el alias 'www.example.net' y ofrece los servicios HTTP y HTTPS. 'dmzb' tiene el alias 'ftp.example.net' y ofrece FTP.

UMLs conectadas a la red externa de la organizacin (por ejemplo, el equivalente de 'Internet'). Como una imagen vale ms que mil palabras, la siguiente figura muestra NETinVM con todas las mquinas virtuales en ejecucin.

Vista general de NETinVM. El documento example-net.pdf permite observar los detalles de la figura. En la imagen estn representados todos los elementos a los que se ha hecho referencia anteriormente con sus direcciones IP y ethernet. Para la asignacin de direcciones se han seguido las siguientes reglas:

La red externa es la 0, la perimtrica es la 1 y la interna es la 2. Las direcciones IP son 10.5.red.mquina, donde red es 0, 1 2 y mquina es 10 para 'exta', 'dmza' e 'inta', 11 para las 'b' y as sucesivamente hasta 15 para las 'f'. Las mscaras de red son de 24 bits (255.255.255.0). Las direcciones ethernet son CA:FE:00:00:0<RED>:0<MAQUINA>, donde <RED> es 0, 1 2 y <MAQUINA> es a, b, c, d, e f. Las interfaces de 'fw' tienen asignado el nmero 254 para IP y FE para ethernet. Las interfaces de 'base' tienen asignado el nmero 1 para IP.

Adems de las redes y mquinas descritas previamente, en la figura tambin aparece el ordenador en el que se ejecuta NETinVM, etiquetado como

'ORDENADOR REAL' y la red virtual 'vmnet8' caracterstica de VMware Player, que proporciona (opcionalmente) conectividad entre las redes de NETinVM y el mundo exterior. Al arrancar, todas las mquinas virtuales UML obtienen su configuracin de red de 'base', que ofrece los servicios DHCP y DNS a todas las redes a travs de las interfaces 'tap0', 'tap1' y 'tap2'. El encaminamiento se produce de la siguiente forma:

La pasarela por defecto para las redes interna y perimtrica (mquinas 'int<X>' y 'dmz<X>') es 'fw' (concretamente la direccin de 'fw' en la correspondiente subred). 'fw' tiene como pasarela por defecto a 'base' (concretamente la direccin de 'base' en la red externa). Las mquinas de la red externa ('ext<X>') tienen a 'base' (su direccin en la red externa) como pasarela por defecto y a 'fw' (su direccin en la red externa) como pasarela para acceder a las redes perimtrica e interna. 'fw' aplica NAT (SNAT, Masquerading) a todo el trfico proveniente de las redes interna y perimtrica que va a salir por su interfaz de la red externa, de modo que dichos paquetes salen a la red externa con direccin IP 10.0.254 como direccin IP origen.

Por tanto, el trfico entre las mquinas de las tres redes siempre circula a travs de 'fw', mientras que el trfico hacia fuera de la mquina virtual VMware atraviesa 'fw' si y slo si proviene de las redes interna o perimtrica. En cualquier caso, ese trfico hacia el mundo exterior sale a travs de 'base', que a su vez, como 'fw', tambin tiene activado el reenvo IP y NAT. La comunicacin entre 'base' y cualquier mquina UML, en cualquiera de los dos sentidos, se realiza directamente, sin pasar por 'fw' (siempre que se utilice la IP de 'base' correspondiente a la red de la mquina UML de que se trate). Esta configuracin resulta conveniente, pues permite el acceso desde 'base' a todas las mquinas UML usando SSH independientemente de la configuracin del filtrado de paquetes en 'fw'. Como nota adicional ntese que la configuracin de SNAT en 'fw' descrita anteriormente es necesaria para que las respuestas a las conexiones salientes hacia Internet originadas en las redes interna y perimtrica vuelvan a travs de 'fw' y no sean enviadas por 'base' directamente a las mquinas UML a travs de tap1 o tap2 sin pasar por 'fw'.

Trabajando con NETinVM

Puesta en marcha inicial


Para poner en marcha NETinVM simplemente hay que descargarse la imagen VMware, descomprimirla y ejecutarla con el programa VMware Player, que puede obtenerse de forma gratuita de VMware. Una vez arrancada la imagen VMware se tiene en marcha base.example.net, que ofrece el escritorio (KDE) del usuario unp (el nombre proviene de abreviar "usuario no privilegiado"). Su contrasea, al igual que la del usuario administrador (root) es: "4xcinco=veinte". Aunque base se ejecuta conectada al commutador virtual de VMware (vmnet8), que utiliza NAT, el cortafuegos est activo y solamente permite conexiones entrantes desde el exterior (interfaz eth0) al puerto 22 (SSH). Las interfaces tap0, tap1 y tap2 se consideran internas y el trfico a travs de ellas no tiene restriccin alguna. La idea es que base sea el escritorio en el que trabajar y por eso est instalada OpenOffice.org y otras herramientas habituales de ofimtica. Tambin est pensada para poder monitorizar el funcionamiento de las redes internas (a travs de tap0, tap1 y tap2) y por eso tiene instaladas aplicaciones como wireshark, tcpdump o nmap.

Puesta en marcha completa


La orden uml_run_all.sh es la palabra mgica que pone en marcha casi toda la capacidad de NETinVM. En concreto, lanza los siguientes elementos:

los conmutadores virtuales para las redes externa, perimtrica e interna las mquinas virtuales UML fw, exta, inta, dmza y dmzb

Aunque NETinVM est preparada para que se puedan ejecutar seis mquinas virtuales por red (de la a 'a' la 'f'), con estas cuatro es posible desarrollar un amplio abanico de actividades (y, lgicamente, cuantas menos UMLs haya en marcha menos cargado estar el sistema). Cada mquina UML arranca en un escritorio virtual diferente:

exta en el 2 fw en el 4 dmza en el 5 dmzb en el 6 inta en el 8

En cada escritorio se pueden identificar los siguientes elementos, que tambin se muestran en la figura:

una xterm que contiene los mensajes de lo que sera la consola del computador que est arrancando una konsole (aparece al final del proceso de arranque) que permite conectarse directamente a la UML (es el equivalente de una terminal directamente conectada al computador) dos konsoles ms pero minimizadas (aparecen a continuacin de la primera); tambin terminales virtuales

Vista del escritorio 2 una vez ha arrancado exta. Una vez arrancan todas las mquinas virtuales UML es posible localizarlas de forma sencilla utilizando la lista de ventanas de KDE, que es posible obtener presionando el botn central del ratn o apretando la combinacin de teclas 'Alt-F5'. El resultado debera ser similar al de la figura.

Lista de ventanas tras haber arrancado las UMLs.

Ejemplo de uso: capturar una conexin HTTP


Como ejemplo de la utilizacin de NETinVM para la enseanza y el aprendizaje, a continuacin se describe cmo capturar el trfico de una conexin HTTP. Una vez puesta en marcha completamente NETinVM usando el guin 'uml_run_all.sh', es tan sencillo como si fuera un sistema real. Vamos a capturar el trfico de una conexin HTTP desde 'exta' a 'www.example.net', suponiendo que estamos interesados en comprobar el trfico en la red perimtrica. Nota Ntese que 'base' tiene acceso tanto a la red externa (a travs de 'tap0') como a la perimtrica (a travs de 'tap1'). Por lo tanto podemos capturar cualquiera de los dos lados de la conversacin (o los dos).

1. Se lanza 'wireshark' en 'base' y se le configura para que capture el trfico de la red perimtrica (interfaz 'tap1').

2. Entramos en la terminal de 'exta' (escritorio 2) y tecleamos:


3. $ wget www.example.com

4. Volvemos al 'wireshark' y detenemos la captura. Seguramente se parecer a la siguiente figura, en la que se puede observar la sesin HTTP establecida entre exta (10.5.0.10) y dmza (www.example.com, 10.5.1.10).

Una descripcin ms detallada


Almacenamiento en las mquinas UML
Para ahorrar espacio, todas las mquinas UML (todas, incluyendo 'fw') utilizan la misma imagen bsica del sistema de ficheros raz, alojada en el fichero '/home/unp/uml/data/uml_root_fs' de 'base'. Como este sistema de ficheros incluye una instalacin bastante completa de Debian 4.0, ocupa unos 500 MB, tal y como puede verse aqu:
unp@base:~> ls -lsh /home/unp/uml/data/uml_root_fs 593M -rw-r--r-- 1 unp users 1,0G dic 7 23:58 /home/unp/uml/data/uml_root_fs unp@base:~>

El tamao mximo de este sistema de ficheros es de 1 GB, lo que deja suficiente espacio a las mquinas UML para alojar programas y datos temporales (403 MB disponibles en /dev/ubda):
exta:~# df -h S.ficheros /dev/ubda tmpfs tmpfs tmpfs none none none exta:~# Tamao Usado 992M 549M 62M 0 62M 0 768M 0 12G 4,1G 12G 4,1G 12G 4,1G Disp Uso% Montado en 403M 58% / 62M 0% /lib/init/rw 62M 0% /dev/shm 768M 0% /tmp 6,5G 39% /mnt/tmp 6,5G 39% /mnt/config 6,5G 39% /mnt/data

Adems, las mquinas UML disponen de 4,1 GB adicionales en 'base', accesibles bien por red (ej: scp), bien mediante el directorio '/mnt/tmp', montado automticamente en todas las mquinas UML y que establece una correspondencia con el directorio '/home/unp/uml/mntdirs/tmp' de 'base' (ver 'TODO'). Los cambios que cada UML hace en su sistema de ficheros raz se almacena en el fichero '/home/unp/uml/machines/machine/cow' de base (sustituir 'machine' por el nombre de la mquina) utilizando el mecanismo de copia en escritura disponible en UML. Lgicamente, el tamao realmente ocupado por este fichero depender de los cambios realizados, pero si uno se limita a arrancar la mquina y cambiar pequeas cosas de la configuracin, ocupa realmente poco:
unp@base:~> ls -lsh /home/unp/uml/machines/exta/cow 6,0M -rw-r--r-- 1 unp users 1,1G feb 7 18:26 /home/unp/uml/machines/exta/cow unp@base:~>

Ntese que el tamao que realmente ocupa 'cow' es 6,0 MB (y no 1,1 GB), pues es un fichero disperso (sparse file). Finalmente, aunque no es espacio de almacenamiento, las mquinas UML disponen de 256 MB de espacio de intercambio (swap) que se almacena en el fichero '/home/unp/uml/machines/machine/swap' de 'base' y que, al menos que se produzca paginacin, apenas ocupa espacio en 'base':
unp@base:~> ls -lsh /home/unp/uml/machines/exta/swap 16K -rw-r--r-- 1 unp users 256M ene 31 13:04 /home/unp/uml/machines/exta/swap unp@base:~>

Nuevamente es conveniente resaltar que el tamao que realmente ocupa 'swap' es 6,0 MB (y no 1,1 GB), pues tambin es un fichero disperso (sparse file).

Configuracin de las mquinas UML


Que todas las mquinas UML compartan el mismo sistema de ficheros raz, al que llamaremos "sistema de ficheros de referencia" (SFR) es muy positivo, por varios motivos: 1. Ahorra espacio. Efectivamente, usando copia en escritura se pueden tener funcionando 19 mquinas UML ocupando poco ms de 0'5 GB de 'base'. 2. Simplifica el uso. Actualizar todas las mquinas con los ltimos parches de seguridad o aadir un paquete a todas ellas simplemente requiere hacerlo en una de ellas. (Ver TODO). 3. Simplifica el uso. Todas las UML son similares y tienen el mismo software instalado. Sin embargo, para no perder estas ventajas es necesario que las mquinas se puedan adaptar a desempear diferentes papeles. Por ejemplo, 'fw' tiene tres interfaces de red y realiza filtrado de paquetes, 'dmza' ofrece servicio HTTP y HTTPS, 'exta' slo ofrece SSH... El mecanismo de configuracin de las mquinas es el siguiente:

El fichero '/etc/fstab' del sistema de ficheros de referencia (SFR) contiene entradas para que las UML monten los subdirectorios 'config' y 'data' de '/home/unp/uml/mntdirs' de 'base' en los directorios del mismo nombre de '/mnt' en la UML, como se puede ver a continuacin:
exta:~# mount | egrep 'config|data' none on /mnt/config type hostfs (ro,uml/mntdirs/config) none on /mnt/data type hostfs (ro,uml/mntdirs/data) exta:~#

El guin '/etc/init.d/configure_uml_machine.sh', presente en el SFR, comprueba si existe el guin '/mnt/config/bin/configure.sh' y, si es ejecutable, lo ejecuta. El guin 'configure.sh' realiza los siguientes pasos: 1. Comprueba si la UML ya ha sido configurada. Si es as, termina. 2. La marca como configurada. 3. Aplica la configuracin por defecto (si existe, enseguida se detalla). 4. Aplica la configuracin especfica de la red (si existe, enseguida se detalla). 5. Aplica la configuracin especfica de la mquina (si existe, enseguida se detalla). De esta forma es posible cambiar la configuracin de todas las UML, de las UML de una red y de una mquina en concreto. La configuracin (ya sea por defecto, de la red o de la mquina) tiene a su vez dos pasos: 6. Habilitar servicios: lista de nombres de guiones para '/etc/init.d'. Los guiones pueden existir en Debian (por ejemplo, 'apache') o pueden estar alojados en el subdirectorio 'init.d' del directorio donde est el fichero con la lista. (Detalles ms adelante). 'configure.sh' usa 'update-rc.d' para cambiar permanentemente la configuracin de la mquina UML. (Ntese que la configuracin no se realiza en cada arranque). 7. Ejecutar rdenes: para todas aquellas modificaciones que no encajan bien en la abstraccin de servicio. (En la configuracin actual no ha sido necesario usarlo). Por lo tanto, la configuracin de las mquinas UML depende exclusivamente de una serie de ficheros alojados en el directorio '/home/unp/uml/mntdirs/config' de base, y puede ser modificada sin arrancar ninguna mquina UML y sin necesidad de convertirse en el administrador de 'base'. La estructura de directorios es la siguiente: bin Directorio con 'configure.sh'. no es necesario modificarlo. templates Plantillas para la creacin del resto de los directorios. default

Configuracin por defecto, aplicable a todas las UML. network_{ext,dmz,int} Configuracin para las redes externa ('ext'), perimtrica ('dmz') e interna ('int'). machine Configuracin especfica para la mquina 'machine'. La estructura de todos los directorios de configuracin es siempre la misma, tomaremos 'fw' como ejemplo: fw/services_to_enable.sh Lista de servicios a habilitar en la UML. El servicio puede ser un guin que exista en '/etc/init.d' en el SFR (como 'apache' o 'vsftpd') o puede ser un guin que est alojado en 'fw/init.d' (como 'add_ips.sh'). Si existe 'fw/init.d/guin' (sustituir guin por lo que corresponda), entonces durante la configuracin se crea un enlace simblico en '/etc/init.d' con el mismo nombre y que apunta a '/mnt/config/fw/init.d/guin'. (Si tambin exista '/etc/init.d/guin', antes de crear el enlace se renombra el original como '/etc/init.d/guin.replaced'). fw/init.d Directorio que contiene los guiones a aadir (ver punto anterior). fw/commands_to_run.sh rdenes a ejecutar durante la configuracin. Este guin es simplemente ejecutado por 'configure.sh', as que hay libertad total. Eso s, hay que recordar que no son rdenes que se ejecuten cada vez que arranca la mquina UML, sino slo durante la configuracin (una vez). Para que se ejecuten siempre, 'commands_to_run.sh' deber aadir las rdenes a un fichero de arranque de la UML (pero en muchos casos es mejor aadir un servicio, como 'add_ips.sh', por ejemplo). Despus de esta explicacin, el lector puede preguntarse si la configuracin no se ha hecho demasiado compleja. Seguramente sea posible simplificar el

proceso, pero antes hay que tener en cuenta las ventajas que aporta el sistema actual: 1. Se puede cambiar la configuracin completamente sin necesidad de poner en marcha ninguna mquina virtual. Esto incluye el propio proceso de configuracin, ya que el sistema de ficheros de las UML slo busca 'configure.sh' (que est almacenado en 'base') y lo ejecuta. 2. Como la configuracin slo se realiza una vez por mquina virtual, los cambios tienen que quedar reflejados en su sistema de ficheros. Por ejemplo, si se aade un servicio en 'fw', cuando uno lista el contenido de los directorios '/etc/rc<X>.d' (<X> es el nivel de ejecucin), all estn los enlaces que uno puede esperar. 3. Es posible guardar configuraciones diferentes para diferentes ejercicios en directorios 'config.ej1' o en ficheros 'config_ej1.tar.gz', por ejemplo, y comenzar cada ejercicio con mquinas limpias y configuradas de la manera apropiada. La principal alternativa, que vimos en el proyecto Netkit [*], en la que bsicamente se ejecutan rdenes externas cada vez que arranca una UML no nos parece tan educativo. El motivo es que si cada vez que arranca la UML hay rdenes que se ejecutan sin seguir la estructura propia de Debian, entonces se rompe la ilusin de estar trabajando sobre una mquina real. Es cierto que para algunas actividades esto no tendr importancia, pero como plataforma para experimentar y aprender, preferimos la solucin que hemos elegido.
[*] Netkit nos parece un gran proyecto. No lo hemos usado porque no se ajustaba exactamente a lo que desebamos. Nosotros queramos tener una red concreta con IPs, MACs, nombres de mquinas, etc. que fueran fciles de recordar, tanto para aprender como para ensear.

Ejercicios de ejemplo
En los documentos siguientes se plantean algunos ejemplos de ejercicios que pueden realizarse sobre NETinVM. Barrido de puertos con nmap Realizar un barrido de puertos sobre "www.example.net" desde "exta.example.net".
View document source. Generated on: 2013-07-11 08:16 UTC. Generated by Docutils from reStructuredText source.

You might also like