Professional Documents
Culture Documents
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'.
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:
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.
1. Se lanza 'wireshark' en 'base' y se le configura para que capture el trfico de la red perimtrica (interfaz 'tap1').
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).
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).
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.