Seguridad informática - Introducción a NETinVM

14 de noviembre de 2018

Contenido

Advertencia

Esta práctica es voluntaria. No obstante, se recomienda su realización antes de la primera sesión de laboratorio, ya que hacerla puede ayudar a entender mejor las actividades de laboratorio y, sobre todo, ayudará a hacerlas en menos tiempo. Además, también resulta útil para reproducir las "demos" que se hagan en clase de teoría, y para hacer los ejercicios prácticos voluntarios que se propongan.

Introducción

NETinVM es una imagen de máquina virtual VMware que permite trabajar como si uno dispusiera de una red de computadores a su disposición. 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 realización de ejercicios dirigidos, para demostraciones en clase que pueden después ser reproducidas por los alumnos tanto en un laboratorio docente como en un portátil y, por lo tanto, en su casa, la biblioteca... Es por esto que se presenta NETinVM como una herramienta adecuada para la enseñanza y el aprendizaje.

Objetivo de la práctica

Introducir la máquina virtual NETinVM y sus características, especialmente aquellas que se van a utilizar a lo largo del curso.

Descripción de NETinVM

NETinVM es una imagen de máquina virtual VMware que contiene, preparadas para ejecutarse, una serie de máquinas virtuales Kernel Virtual Machine (KVM). Al ponerlas en marcha, las máquinas virtuales KVM forman una red de computadores. De ahí el nombre NETinVM, que es la abreviatura de NETwork in Virtual Machine (red en una máquina virtual). A la red virtual así formada la hemos denominado 'example.net' y, de hecho, los nombres cualificados de las máquinas son del tipo 'base.example.net', 'fw.example.net'...

Todas las máquinas virtuales utilizan el sistema operativo Linux. La máquina virtual VMware recibe el nombre 'base' y ejecuta la versión 9 de Debian. Las máquinas Kernel Virtual Machine también usan la versión 9 de Debian y reciben nombres diferentes en función de su ubicación en la red virtual, ya que están agrupadas en tres subredes, que desempeñan el papel de las redes corporativa, perimétrica y externa de una organización. Estas redes reciben en NETinVM los nombres 'int' (por red interna), 'dmz' (por DMZ o zona desmilitarizada, que suele usarse como sinónimo de red perimétrica) y 'ext' (por red externa).

Una de las máquinas KVM, 'fw', conecta entre sí las tres redes permitiendo la comunicación y el filtrado de paquetes. Las demás KVMs tienen una única interfaz de red conectada a la red que les da nombre:

int<X>

KVMs conectadas a la red interna. <X> puede tomar los valores de 'a' a 'f', ambos inclusive. Estas máquinas sólo ofrecen el servicio SSH.

dmz<X>

KVMs conectadas a la red perimétrica (DMZ). Pensadas como nodos bastión. En esta red hay dos máquinas con alias:

  • 'dmza' tiene el alias 'www.example.net' y ofrece los servicios HTTP y HTTPS.

  • 'dmzb' tiene el alias 'ftp.example.net' y ofrece el servicio FTP.

ext<X>

KVMs conectadas a la red externa de la organización (por ejemplo, el equivalente de 'Internet').

Como una imagen vale más que mil palabras, a continuación se muestra la visión lógica de las redes de NETinVM.

|netinvm| logic vision

Diagrama de las redes de NETinVM.

Y en la siguiente figura se muestra una visión más detallada de la estructura de NETinVM con todas las máquinas virtuales en ejecución.

|netinvm| overview

Vista general de NETinVM. El documento example-net.pdf permite observar los detalles de la figura.

En la imagen están representados todos los elementos a los que se ha hecho referencia anteriormente con sus direcciones IP y ethernet correspondientes. Para la asignación de direcciones se han seguido las siguientes reglas:

Además de las redes y máquinas descritas previamente, en la figura también aparece el ordenador en el que se ejecuta NETinVM, etiquetado como 'ORDENADOR REAL' y la red virtual 'vmnet8' característica de VMware Player, que proporciona (opcionalmente) conectividad entre las redes de NETinVM y el mundo exterior.

Al arrancar, todas las máquinas virtuales KVM obtienen su configuración de red de 'base', que ofrece los servicios DHCP y DNS a todas las redes a través de las interfaces 'virbr-ext', 'virbr-dmz' y 'virbr-int'.

El encaminamiento se produce de la siguiente forma:

Por tanto, el tráfico entre las máquinas de las tres redes siempre circula a través de 'fw', mientras que el tráfico hacia fuera de la máquina virtual VMware atraviesa 'fw' si y sólo si proviene de las redes interna o perimétrica. En cualquier caso, ese tráfico hacia el mundo exterior sale a través de 'base', que a su vez, como 'fw', también tiene activado el reenvío IP y, además, realiza NAT.

La comunicación entre 'base' y cualquier máquina KVM, 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 máquina KVM de que se trate). Esta configuración resulta conveniente, pues permite el acceso desde 'base' a todas las máquinas KVM usando SSH independientemente de la configuración del filtrado de paquetes en 'fw'.

Como nota adicional, 'base' tiene algunas reglas de encaminamiento adicionales que permiten que las respuestas a las conexiones salientes hacia Internet originadas en las redes interna y perimétrica vuelvan a través de 'fw' y no sean enviadas por 'base' directamente a las máquinas KVM a través de virbr-dmz o virbr-int sin pasar por 'fw'.

Comenzando a trabajar con NETinVM

La idea es que base sea el escritorio en el que trabajar y por eso está instalada LibreOffice y otras herramientas habituales de ofimática. También está pensada para poder monitorizar el funcionamiento de las redes internas (a través de los puertos espejo mirror-ext, mirror-dmz y mirror-int) y por eso tiene instaladas aplicaciones como wireshark, tcpdump o nmap.

Actividad 1: Puesta en marcha inicial

Para poner en marcha NETinVM simplemente hay que descargarse la imagen VMware, descomprimirla y ejecutarla con el programa VMware Workstation Player, que puede obtenerse de forma gratuita de VMware. Además, los alumnos de la UVEG pueden usar el programa comercial VMware Workstation Pro (accesible a través de https://software.uv.es), que tiene características como la gestión de instantáneas (snapshots) que pueden ser muy útiles.

Acción

Ejecutar la máquina virtual VMware.

Una vez arrancada la imagen VMware se tiene en marcha base.example.net, que ofrece el escritorio (KDE) del usuario user1 (usuario no privilegiado). Su contraseña, al igual que la del usuario administrador (root) es: "You can change me.", y está almacenada en el fichero "passwords.txt", accesible desde el escritorio. La imagen siguiente muestra el resultado esperado.

|netinvm| inicio

Vista de base recién arrancada.

Como puede verse (bandera americana en la barra de control de KDE), la configuración de teclado por defecto es "inglés americano". Por tanto, se recomienda cambiar a teclado español. Para ello es suficiente con hacer clic en la bandera (parte inferior derecha) para que aparezca la bandera de España.

Acción

Cambiar la configuración del teclado a "español".

Actividad 2: Familiarizarse con el entorno KDE

Puesto que base incluye un escritorio KDE estándar, cualquier guía de uso de KDE es aplicable a NETinVM. La documentación oficial de KDE, incluyendo guías y tutoriales está disponible en "KDE UserBase". (Aunque el sitio principal está en inglés, también se pueden seleccionar otros idiomas).

En particular, será necesario saber realizar las siguientes acciones:

  • Ejecutar aplicaciones utilizando el menú principal (parte izquierda de la barra de control de KDE).

  • Ejecutar aplicaciones usando la caja de diálogo "Ejecutar orden" (se obtiene con Alt-F2).

  • Desplazarse por los 8 escritorios virtuales.

A continuación se destacan algunos aspectos útiles de la configuración de KDE en NETinVM:

  • Se han definido atajos de teclado para lanzar las aplicaciones más utilizadas:

    Atajo

    Aplicación ejecutada

    Win-k

    terminal (Konsole)

    Win-f

    navegador web (Firefox)

    Win-e

    explorador de archivos (Dolphin)

    Win-t

    editor de textos (Kwrite)

    Win-w

    lista de ventanas

  • Se han definido atajos de teclado para trabajar con ventanas y escritorios, donde "flecha" quiere decir una de las flechas de dirección:

    Atajo

    Acción

    Win-flecha

    Cambiar al escritorio superior/inferior/izquierdo/derecho.

    Win-mayúsculas-flecha

    Cambiar ventana al escritorio superior/inferior/izquierdo/derecho.

    Win-Ctrl-arriba

    Maximizar la ventana

    Win-Ctrl-abajo

    Minimizar la ventana

    Win-Ctrl-izquierda

    Hacer que la ventana ocupe la mitad izquierda de la pantalla.

    Win-Ctrl-derecha

    Hacer que la ventana ocupe la mitad derecha de la pantalla.

    Win-Alt-flecha

    Desplazar la ventana hacia arriba/abajo/izquierda/derecha.

  • Se ha añadido un icono a la barra de control (inmediatamente a la derecha del menú principal) que muestra la lista de todas las ventanas agrupadas por escritorio. Se puede invocar directamente usando el atajo "Win-w".

  • Se ha incluido la contraseña del administrador y del usuario no privilegiado en el portapapeles (aplicación Klipper), (accesible a través de un icono que representa a unas tijeras y que aparece en la parte derecha de barra de control de KDE o, alternativamente, mediante la combinación de teclas Ctrl-Alt-v).

  • También se ha incluido la contraseña en el fichero "passwords.txt", accesible desde el escritorio.

Acciones

  1. Usando el atajo de teclado correspondiente, lanzar Firefox escritorio 1.

  2. Usando los atajos de teclado correspondientes, lanzar una terminal, el explorador de archivos y un editor de textos en el escritorio 2.

  3. Usando el atajo de teclado correspondiente, mostrar la lista de ventanas abiertas.

  4. Convertirse en administrador ejecutando la orden su - en el terminal insertando la contraseña almacenada en el portapapeles.

  5. Cerrar las aplicaciones.

Actividad 3: Puesta en marcha completa

Aunque el control real de las máquinas KVM se realiza mediante guiones del intérprete de órdenes, en las versiones recientes de NETinVM se ha preparado, para realizar las tareas más comunes, una vista de carpeta etiquetada "KVM machines" que permite la gestión gráfica del entorno. A continuación se muestra dicha interfaz.

|netinvm| panel de control

Vista de la interfaz gráfica para el control de las KVM.

Como cabe esperar, haciendo clic en el icono "Run all" (o, alternativamente, ejecutando la orden netinvm_run_all pone en marcha casi toda la capacidad de NETinVM. En concreto, lanza los siguientes elementos:

  • los conmutadores virtuales para las redes externa, perimétrica e interna

  • las máquinas virtuales KVM fw, exta, inta, dmza y dmzb

Aunque NETinVM está preparada para que se puedan ejecutar seis máquinas virtuales por red (de la 'a' a la 'f'), con estas cinco es posible desarrollar un amplio abanico de actividades (y, lógicamente, cuantas menos KVMs haya en marcha menos cargado estará el sistema).

Cada máquina KVM 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 también se muestran en la figura:

  • una terminal xfce4-terminal (el diálogo de entrada -login- aparece al final del proceso de arranque) que permite conectarse directamente a la KVM (es el equivalente de una terminal directamente conectada al computador)

  • dos xfce4-terminal más pero minimizadas; también terminales virtuales

exta

Vista del escritorio 2 una vez ha arrancado exta.

Acción

Poner en marcha las máquinas KVM.

Nótese que, comenzando en esta versión de NETinVM, se han añadido unas notificaciones que indican:

  • El comienzo del proceso de puesta en marcha.

  • El comienzo del arranque de cada una de las máquinas KVM.

  • La finalización del proceso de arranque, aunque todavía pueden transcurrir algunos segundos hasta que las KVM muestren el diálogo de entrada (login) en las terminales.

Una vez arrancan todas las máquinas virtuales KVM es posible localizarlas de forma sencilla utilizando la lista de ventanas de KDE, accesible con el atajo de teclado 'Win-w' o el icono correspondiente de la barra de control, tal y como se explica en el apartado Actividad 2: Familiarizarse con el entorno KDE. Si solamente se tienen abiertas las ventanas de las KVMs, el resultado debería ser similar al de la figura.

|netinvm| overview

Lista de ventanas tras haber arrancado las KVMs.

Hay que tener en cuenta que en caso de cambiar el tamaño de una de las terminales, es necesario presionar "INTRO" o ejecutar la orden resize en ese mismo terminal, para que el intérprete de órdenes correspondiente detecte el cambio, pues no lo hace automáticamente.

Acciones

  1. Entrar en las máquinas inta y exta, usando el usuario y la contraseña del administrador.

  2. Cambiar el tamaño de una de las terminales.

  3. Ejecutar la orden resize o, simplemente, presionar "INTRO".

  4. Comprobar que se ha actualizado el tamaño de la terminal. (Ejecutar, por ejemplo, "man resize" y comprobar que se usa todo el espacio disponible en la terminal).

Actividad 4: Parada de las máquinas KVM

Parar las máquinas KVM es tan sencillo como hacer clic en el icono "Shutdown All" disponible en el escritorio (si no está accesible directamente, es posible mostrarlo directamente con la combinación de teclas 'Ctrl-F12'). Alternativamente, también es posible detener las máquinas ejecutando la orden netivm_shutdown_all. Con ambos métodos se hace una parada ordenada de los servicios en cada una de las KVM. Irán apareciendo notificaciones a medida que se vayan parando las máquinas y, al final, aparece la notificación "All shut down".

Acción

Parar todas las máquinas KVM.

Actividad 5: Puesta en marcha selectiva

En algunas actividades es necesario arrancar solamente una máquina KVM. Para ello se usa la orden netinvm_run. Esta orden debe ser ejecutada por el usuario "user1" y espera un único argumento: el nombre de la máquina virtual KVM a ejecutar. Además, se puede especificar el escritorio virtual en el que deben aparecer las ventanas con la opción '-d' (por defecto se usa el escritorio actual). Algunos ejemplos son:

netinvm_run exta

Ejecutar exta en el escritorio actual.

netinvm_run fw

Ejecutar fw en el escritorio actual.

netinvm_run -d 7 dmzc

Ejecutar dmzc en el escritorio 7.

Aunque éstas con las opciones básicas, netinvm_run permite usar opciones adicionales como '-E', que evita que se abran ventanas extra (las que por defecto aparecen minimizadas), o '-C', que hace que no se abra ninguna.

Acciones

  1. Ejecutar extf en el escritorio 3.

  2. Detener todas las máquinas KVM.

Nota

Las máquinas de las redes interna (int) y perimétrica (dmz) necesitan que esté ejecutándose fw para poder acceder fuera de su red.

Actividad 6: Puesta en marcha de un cierto conjunto de KVMs

En algunas actividades puede ser necesario ejecutar más (o menos) máquinas que las incluidas en "Run all". Aunque se pueden lanzar las máquinas desde la línea de órdenes, tal y como se explica en Actividad 5: Puesta en marcha selectiva, es más cómodo usar un guión que lo haga. Para ello se ha preparado el guión netinvm_run_my_machines. Este guión puede ser editado cómodamente simplemente haciendo clic en "Configure my machines", en el escritorio.

Acción

Abrir el guión netinvm_run_my_machines utilizando el icono correspondiente del escritorio.

Como puede observarse, el guión está bien comentado, por lo que resulta sencillo incluir o eliminar máquinas simplemente comentando o descomentando líneas. Por defecto, el guión pone en marcha las máquinas fw, y exta.

Acción

Modificar el guión para que no lance la máquina fw y, en cambio, lance extb en el escritorio 3, y extf en el 4. (Es importante acordarse de guardar los cambios para que tengan efecto).

Para lanzar este guión, simplemente es necesario hacer clic en el icono "Run my machines". Alternativamente, se puede ejecutar la orden netinvm_run_my_machines.

Acción

  1. Poner en marcha la configuración del guión netinvm_run_my_machines.

  2. Comprobar que se han puesto en marcha las máquinas solicitadas y que las terminales están en los escritorios especificados. (Sugerencia: usar Win-W o Ctrl-F8).

  3. Detener todas las máquinas KVM.

Actividad 7: Otros casos de puesta en marcha y parada de máquinas

  • Se pueden combinar diversos métodos de puesta en marcha. Por ejemplo, se lanza la configuración estándar con "Run all" y luego se lanza extb para una tarea concreta usando netinvm_run extb.

  • "Shutdown all" para todas las máquinas KVM, independientemente de cómo hayan sido lanzadas. En el ejemplo anterior, "Shutdown all" también pararía extb (y no solamente las puestas en marcha por "Run all", o "Run my machines").

  • Se puede parar una máquina entrando en ella como root y ejecutando el típico "shutdown -h now".

  • Se puede rearrancar una máquina entrando en ella como root y ejecutando el típico "shutdown -r now". (Aviso: en esta versión, rearrancar la máquina hace que se quede en pausa, por lo que se recomienda en su lugar parar la máquina y volver a ponerla en marcha. En caso de que que se quede en pausa será necesario forzar el apagado de la máquina, por ejemplo 'exta', mediante la orden "virsh destroy exta", que debe ser ejecutada como "user1" en 'base').

Acciones

  1. Lanzar las máquinas con "Run all".

  2. Lanzar extc.

  3. Rearrancar exta. (Este curso pararla y volver a ponerla en marcha, por el problema indicado).

  4. Pararlas todas.

Actividad 8: Realizar copias de seguridad de las KVMs

NETinVM dispone de un mecanismo de copia de seguridad para capturar el estado de toda la red. Para ello es suficiente con hacer clic en el icono "Backup KVM machines". Eso sí, para realizarla es necesario haber apagado previamente todas las máquinas KVM. Las copias se depositan en el directorio "/home/user1/netinvm/backups" usando como nombre el prefijo "kvm_machines" y añadiéndole el año, el mes, el día del mes, la hora, los minutos y los segundos.

La copia se guarda como un fichero tar comprimido con gzip, y suele ocupar solamente unos pocos KB o, como mucho, MB, ya que las máquinas utilizan copia en escritura y , por eso, la copias de seguridad solamente incluye las modificaciones realizadas en cada máquina sobre el sistema de ficheros de referencia.

Acciones

  1. Arrancar las máquinas con "Run all".

  2. Entrar como administrador en inta.

  3. Crear un fichero de texto denominado "prueba-ok.txt", que servirá para comprobar más tarde que hemos vuelto a este estado. (En un caso real esto sería haber configurado correctamente un equipo, o el estado antes de hacer una prueba que puede salir mal).

  4. Parar todas las máquinas.

  5. Crear una copia de seguridad.

Actividad 9: Restaurar copias de seguridad de las KVMs

Para restaurar una copia de seguridad simplemente es necesario hacer clic en el icono "Restore KVM machines". (Nuevamente las máquinas KVM deben estar apagadas). La restauración muestra un diálogo de selección de ficheros para que se indique la copia que se desea restaurar y, a continuación, destruye el estado actual para sustituirlo por el contenido en la copia.

Acciones

  1. Arrancar las máquinas con "Run all".

  2. Entrar como administrador en inta.

  3. Crear un fichero de texto denominado "prueba-fallida.txt", que servirá para comprobar que es posible volver atrás. (En un caso real, esto sería un borrado accidental, un cambio de permisos incorrecto...).

  4. Parar todas las máquinas.

  5. Restaurar la copia de seguridad realizada en Actividad 8: Realizar copias de seguridad de las KVMs.

  6. Lanzar de nuevo las máquinas con "Run all".

  7. Comprobar que existe el fichero "prueba-ok.txt".

  8. Comprobar que no existe el fichero "prueba-fallida.txt"

Sugerencia

Puede ser interesante renombrar los ficheros de copia de seguridad añadiendo una explicación de lo que contiene. Por ejemplo, el fichero de la copia de Actividad 8: Realizar copias de seguridad de las KVMs, si tuviera el nombre "kvm_machines_2014-10-02_22-53.tar.gz", podría ser renombrado para que fuera "kvm_machines_2014-10-02_22-53_prueba-ok.tar.gz". Así quedaría más claro lo que contiene.

Las copias de seguridad así obtenidas pueden trasladarse de una copia de NETinVM a otra, siempre que ambas sean de la misma versión.

Actividad 10: Intercambiar ficheros con base y entre las KVMs

La forma más sencilla de intercambiar información entre las KVMs y base, así como las KVM entre sí, es utilizar la carpeta compartida "shared". Efectivamente, la carpeta "/srv/netinvm/shared" de base está disponible en todas las KVM a través de la trayectoria "/mnt/shared".

No obstante, por comodidad, se han creado enlaces simbólicos denominados "shared" en los directorios iniciales de todos los usuarios, tanto en base como en las KVM. Por tanto, por ejemplo, esta carpeta compartida también resulta accesible como "/home/user1/shared", tanto en base como en las KVM.

Acciones

  1. Si no están en marcha, arrancar las máquinas KVM con "Run all".

  2. Usando el editor de textos en base, como "user1", crear un fichero (sea "base.txt") en la carpeta compartida.

  3. Entrar como "root" en exta.

  4. Listar el contenido de la carpeta compartida y comprobar que existe el fichero "base.txt" y que es posible acceder a su contenido.

  5. Crear un fichero "exta.txt".

  6. Entrar como "root" en inta.

  7. Listar el contenido de la carpeta compartida y comprobar que existen los ficheros "base.txt" y "exta.txt", y que es posible acceder a su contenido.

Nota

Las máquinas KVM se ejecutan como procesos del usuario "user1" en base. Por ese motivo, aunque un fichero se cree como "root" en exta, aparecerá como de user1 en base.

Trabajando con las redes de NETinVM

Las redes de NETinVM están bien descritas en el apartado Descripción de NETinVM, por lo que este apartado es básicamente práctico.

Actividad 11: Conectarse a las máquinas KVM desde base

La forma más sencilla es usar las terminales, que son equivalentes al acceso físico al sistema y, por tanto, no generan ningún tráfico de red.

No obstante, en la configuración por defecto, todas las KVM ofrecen el servicio SSH y permiten el acceso mediante contraseña. Por tanto, desde base es posible conectarse por SSH a cualquiera de las KVM, tanto como "user1" como como "root". Este servicio es accesible desde base incluso aunque se detenga "fw" o se cambien sus reglas de filtrado, ya que base está conectada directamente a las tres redes de NETinVM (ext, dmz e int).

Acción

  1. Si no están en marcha, arrancar las máquinas KVM con "Run all".

  2. Usando SSH, conectarse desde base a exta.

Actividad 12: Comprobar la conectividad entre KVMs

Para entender la interconexión entre KVMs será necesario, probablemente, releer el apartado Descripción de NETinVM. Resumiendo brevemente, las reglas son las siguientes:

  • Las máquinas de la red interna pueden conectarse a las máquinas de la red externa.

  • Las máquinas de la red externa no pueden conectarse a las de la red interna.

  • Las máquinas de la red perimétrica no aceptan conexiones, salvo para los servicios previstos:

    • dmza.example.net, www.example.net: HTTP y HTTPS

    • dmzb.example.net, ftp.example.net: FTP

  • Las máquinas de la red perimétrica no pueden conectarse a las KVMs de la red interna.

Acciones

  1. Desde inta:

    • Comprobar que es posible conectarse por SSH a exta.

    • Comprobar que no es posible conectarse por SSH a dmza.

  2. Desde exta:

    • Comprobar que no es posible conectarse por SSH a inta.

    • Comprobar que no es posible conectarse por SSH a dmza.

  3. Desde dmza:

    • Comprobar que no es posible conectarse por SSH a inta.

    • Comprobar que es posible conectarse por SSH a exta.

Actividad 13: Capturar tráfico e interpretarlo

Para crear las redes de NETinVM se utiliza openvswith, que permite crear switches virtuales. Por tanto, analizar el tráfico en NETinVM es igual a hacerlo en sistemas reales, con la ventaja añadida de que el único tráfico que se observa es el de las KVM activas y base. Al igual que en un caso real, se han creado puertos espejo (mirror) que permiten observar todo el tráfico que atraviesa el switch. Estos puertos son, respectivamente, mirror-ext, mirror-dmz y mirror-int.

Para esta actividad se empleará la utilidad gráfica wireshark, que puede lanzarse tanto desde Kicker (Alt-F2) como desde el menú de inicio. Aunque capturar trazas suele ser una actividad privilegiada, "wireshark" ha sido configurado para que el usuario "user1" pueda utilizarla sin necesidad de convertirse en administrador.

Acciones

  1. En base, lanzar Wireshark.

  2. Seleccionar las interfaces mirror-ext, mirror-dmz y mirror-int para la captura.

    interfaces de red en wireshark
  3. Iniciar la captura.

  4. Desde exta, ejecutar la orden "ping -c 1 base.example.net" para enviar un "ICMP echo request".

  5. Parar la captura. (Debe obtenerse algo similar a la siguiente imagen).

    captura con wireshark
  6. Comprobar que:

    • exta ha enviado un paquete "ICMP echo request".

    • exta ha recibido la respuesta correspondiente.

    (Lógicamente puede haber tráfico adicional de los protocolos ARP y DNS).

Actividad 14: Comprobar los servicios ofrecidos por una KVM

La forma de listar los servicios, configuración de red o conexiones establecidas se hace igual en las KVM que en cualquier otra máquina con Debian. Para ello se utilizan las herramientas del paquete iproute2 (ip, ss), más potentes y mejor mantenidas que las tradicionales netstat, ifconfig o route (incluidas en el paquete net-tools).

Por ejemplo, para listar las interfaces de red y sus direcciones:

root@exta:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether ca:fe:00:00:00:0a brd ff:ff:ff:ff:ff:ff
    inet 10.5.0.10/24 brd 10.5.0.255 scope global eth0
    valid_lft forever preferred_lft forever
    inet6 fe80::c8fe:ff:fe00:a/64 scope link
    valid_lft forever preferred_lft forever
root@exta:~#

Para comprobar los servicios TCP que ofrece una máquina:

root@exta:~# ss --listen --tcp
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port
LISTEN     0      128                     *:ssh                      *:*
root@exta:~#

Para ver las conexiones TCP establecidas:

root@exta:~# ss --tcp
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port
ESTAB      0      0               10.5.0.10:ssh               10.5.0.1:42610
root@exta:~#

O la configuración de encaminamiento:

root@exta:~# ip route
default via 10.5.0.1 dev eth0
10.5.0.0/24 dev eth0  proto kernel  scope link  src 10.5.0.10
10.5.1.0/24 via 10.5.0.254 dev eth0
10.5.2.0/24 via 10.5.0.254 dev eth0
root@exta:~#

Acciones

  1. Conectarse mediante la terminal a dmza como "root".

  2. Averiguar los servicios ofrecidos.

  3. Comprobar que su IP es 10.5.1.10.

  4. Comprobar que la pasarela por defecto es 10.5.1.254, que es la IP de "fw" en la red perimétrica.

  5. Conectarse desde base a dmza usando SSH.

  6. Listar las conexiones TCP establecidas.

  7. Identificar la conexión SSH.

Actividad 15: Realizar barridos de puertos

Una de las ventajas de utilizar un entorno privado como NETinVM es poder probar técnicas y programas que no sería seguro, ni ético, ni legal, probar en Internet. Un ejemplo es la posibilidad de explorar las posibilidades de una herramienta de reconocimiento de redes como nmap.

Acciones

  1. Ejecutar la orden "nmap www.example.net" desde exta.

  2. Comprobar que:

    • nmap detecta correctamente que los únicos puertos no filtrados son el 80 (HTTP) y el 443 (HTTPS).

    • nmap detecta correctamente que el puerto 80 está abierto y el 443 cerrado.

  3. Ejecutar la orden "nmap www.example.net" desde base.

  4. Comprobar que:

    • nmap finaliza mucho más rápidamente. ¿Por qué?

    • nmap detecta correctamente que los únicos puertos abiertos son el 22 (SSH) y el 80 (HTTP)

  5. Justificar por qué los resultados de las dos ejecuciones son diferentes.

Sacando partido de KVM

Aunque la versión de NETinVM basada en KVM ha sido diseñada para ofrecer una interfaz similar a la de versiones anteriores, NETinVM utiliza la interfaz proporcionada por libvirt. Gracias a esto, es posible usar NETinVM para aprender sobre virtualización usando recursos en línea. Por ejemplo:

La interfaz de libvirt facilita la creación de aplicaciones que permitan gestionar máquinas virtuales. En esta introducción se presenta virt-manager, una aplicación gráfica que complementa muy bien la interfaz propia de NETinVM. Además de esta aplicación, se recomienda familiarizarse con virsh, un intérprete de órdenes muy potente que permite gestionar máquinas virtuales desde la línea de órdenes y generar guiones con mucha facilidad.

Actividad 16: Poner en marcha "virt-manager"

Puesto que virt-manager es una aplicación gráfica, la forma más sencilla de ponerla en marcha es mediante el menú de inicio. De hecho, en NETinVM ha sido añadida a las aplicaciones favoritas ("Virtual Machine Manager"). Alternativamente, puede lanzarse desde la línea de órdenes usando el programa virt-manager.

Acciones

  1. Lanzar virt-manager

Al ponerlo en marcha, virt-manager se conecta al gestor de máquinas local y debe mostrar una lista con las máquinas de NETinVM. Como puede observarse en la figura, virt-manager muestra el estado de las diferentes máquinas ("Shutoff" significa, lógicamente, apagadas). Si se ponen en marchar las máquinas usando, por ejemplo, el icono "Run all", se observará cómo, efectivamente, el estado de las máquinas cambia a medida que se ponen en marcha.

Acciones

  1. Ejecutar "Run all".

  2. Comprobar que todas las máquinas de NETinVM que deberían haber arrancado aparecen como "Running" en virt-manager.

lista de máquinas virtuales en VMM

virt-manager tras haber ejecutado "Run all".

Actividad 17: Acceder a la interfaz gráfica de las máquinas KVM

Una de las posibilidades más interesantes de virt-manager es poder conectarse a la consola gráfica de las máquinas KVM. En efecto, aunque NETinVM proporciona un cómodo acceso en modo texto, para algunas actividades es interesante poder trabajar en las máquinas KVM usando un entorno gráfico. Acceder a la consola de las KVM es tan sencillo como hacer doble clic sobre su icono en virt-manager. Si únicamente se muestra una pantalla negra, basta con presionar INTRO en la ventana para que aparezca el diálogo de entrada, como en la figura.

consola VMM de inta

La consola gráfica de "inta" tras haber presionado INTRO.

Como puede observarse, por defecto no está activo el entorno gráfico. Esto es deliberado, para evitar el consumo de recursos (memoria y CPU) que se produciría si todas las KVM arrancaran por defecto en modo gráfico. Poner en marcha el entorno gráfico es tan sencillo como ejecutar la orden "startx" como "user1". El resultado, tras ajustar el tamaño de la ventana usando "View > Resize to VM", debe ser similar al de la figura.

LXDE en inta

El entorno gráfico LXDE en "inta".

Acciones

  1. Acceder a la consola gráfica de "inta".

  2. Entrar como "user1".

  3. Ejecutar "startx".

  4. Comprobar que se pone en marcha el entorno gráfico LXDE.

  5. En el menú "View" de la ventana que contiene el escritorio gráfico de "inta", seleccionar "Resize to VM".

El entorno gráfico LXDE tiene la ventaja de consumir pocos recursos y por eso ha sido elegido para las KVM. Su funcionamiento es bastante similar al KDE de "base". En particular, se recomienda cambiar el idioma del teclado (haciendo clic en la bandera americana). Lanzar aplicaciones es ingualmente sencillo, especialmente para el navegador web Firefox, el gestor de archivos y la terminal, que tienen lanzadores en el panel principal (parte inferior). En la siguiente figura se muestra NETinVM con el entorno gráfico LXDE en marcha en "inta" y con varias aplicaciones en marcha.

|netinvm| en LXDE en inta

NETinVM y el entorno gráfico LXDE en "inta" con varias aplicaciones en marcha.

Una característica interesante del visor de virt-manager es que simplemente proporciona una vista del entorno gráfico y que, por tanto, puede ser cerrado sin afectar a las aplicaciones gráficas que se estén ejecutando. Si posteriormente se vuelve a lanzar el visor, se conectará a la consola gráfica y mostrará el contenido que tenga en ese momento. Pero lo mejor, sin duda, es probarlo.

Acciones

  1. En el LXDE de "inta", ejecutar el navegador web y conectarse a alguna página (por ejemplo, a http://www.example.net).

  2. Lanzar otras aplicaciones y familiarizarse con LXDE.

  3. Cerrar la ventana del visor (la que tiene como título "inta Virtual Machine").

  4. Volver a lanzar el visor usando virt-manager.

  5. Comprobar que la consola gráfica sigue con el mismo contenido que tenía.

  6. Realizar pruebas adicionales, si se desea.

Nota

La utilidad "virt-viewer".

Si no se necesita usar "virt-manager", una forma más rápida de acceder a la consola gráfica de una máquina KVM es usar el programa "virt-viewer". Por ejemplo, para conectarse a la consola gráfica de inta se usaría la orden "virt-viewer inta".

Actividad 18: Comprender algunos resultados quizá inesperados de NETinVM y virt-manager

Aunque NETinVM y virt-manager ambos usan libvirt, al usar ambos de forma conjunta pueden obtenerse resultados que quizá no sean los esperados. Por ejemplo, usando virt-manager es posible parar, rearrancar, y poner en marcha las máquinas virtuales KVM de NETinVM:

Apagado (el comportamiento es el que cabría esperar)

La forma correcta de apagar una máquina KVM desde virt-manager es usando la entrada "Shut Down" del menú contextual. Esta entrada ofrece a su vez la opción "Shut Down", que es la que se debe utilizar. Seleccionando esta opción se observará que la máquina cambia en virt-manager al estado "Shutoff" y que las ventanas asociadas a dicha máquina también desaparecen. (Por ejemplo, para "dmzb" serían las ventanas del escritorio 6 con título "dmzb - console1", "dmzb - console2" y "dmzb - console3".

Aviso: si se usa la opción "Force Off" se realiza un apagado forzoso, similar al que se obtiene al desenchufar de la red eléctrica a una máquina física. Por tanto, se corre el riesgo de perder información y/o de que se corrompan los sistemas de ficheros de la máquina KVM.

Rearranque (el comportamiento es el que cabría esperar)

Si se selecciona la opción "Reboot" de la entrada "Shut Down" del menú contextual de una máquina en virt-manager se puede observar (en la consola gráfica) que la máquina hace un rearranque similar al de una máquina física y que, como cabría esperar, la pantalla de inicio vuelve a aparecer tras el arranque. las ventanas asociadas a la máquina virtual correspondiente no desaparecen, sino que, como la consola gráfica, vuelven a mostrar el diálogo de inicio

Aviso: si se usa la opción "Force Reset" se simula la acción de presionar el botón de reset de una máquina física. Por tanto, se corre el riesgo de perder información y/o de que se corrompan los sistemas de ficheros de la máquina KVM.

Ejecución (necesita una explicación)

Si se pone en marcha una máquina KVM usando la opción "Run" del menú contextual de virt-manager, se observará que:

  • la máquina arranca y ofrece el diálogo de entrada en la consola gráfica

  • no se crean las consolas de texto que se crean al usar "Run all" y "Run my machines" de NETinVM

Lo más sencillo es poner en marcha las máquinas KVM usando siempre el programa "netinvm_run" (ver Actividad 5: Puesta en marcha selectiva).

Alternativamente, es posible conectarse a las consolas de texto usando la orden netinvm_console, que permite acceder a estas consolas en cualquier momento, una vez la máquina KVM está corriendo. Por ejemplo:

netinvm_console inta

Conectarse a la consola 1 de "inta" y mostrar la ventana en el escritorio actual.

netinvm_console inta 1

Conectarse a la consola 1 de "inta" y mostrar la ventana en el escritorio actual.

netinvm_console inta 2

Conectarse a la consola 2 de "inta" y mostrar la ventana en el escritorio actual.

netinvm_console -d 8 inta 3

Conectarse a la consola 3 de "inta" y mostrar la ventana en el escritorio 8.

Nótese que puede ser necesario presionar INTRO para que aparezca el diágolo de entrada en la consola.