miércoles, 19 de junio de 2013

Manual de instalación, configuración y uso de VNX:

Tras una buena pelea entre unas cuantas distribuciones linux y la herramienta, he conseguido realizar un manual básico de la herramienta VNX, la cual ya expliqué mi primer contacto con ella aquí.

Para comenzar, este manual está elaborado y probado en las distribuciones Ubuntu, Lubuntu y Mint; aunque, ahora sí, puedo extrapolar a cualquier distribución basada en Ubuntu.


Manual de instalación y configuración:

1. Habilitar el servicio de virtualización en la BIOS.

2. Tener actualizado Linux y demás.


3. Instalar las librerias necesarias:


4. Modificar el fichero /etc/libvirt/qemu.conf sustituyendo las líneas:


5. Reiniciar el servicio libvirt:


6. Instalar VNX, versión 2.0b.2270-201209171149, con fecha 17-9-2012 (es la que he probado en todos):


*Establecer el directorio correspondiente donde se descargó para descomprimirlo y para ejecutar el instalador.

7. Copiar o mover el siguiente fichero:


8. Instalar dinamips y dynagen:


9. Crear el fichero que se usará como demonio, /etc/init.d/dynamips :


10. Dar permisos de ejecución al demonio dynamips


Hasta aquí llegaría la instalación y configuración de VNX, como se puede observar es bastante equivalente con la página de instalación proporcionada por la UPM.


Manual de uso:

Para probar si realmente funciona la herramienta queda todavía:

1. Descargar los sistemas de ficheros con la siguiente sentencia o desde la web:


2.Descomprimirlo:


3. Crear un enlace simbólico, que se usará en los ficheros xml para referenciarlos:



4. En el directorio /usr/share/vnx/example se crearán los ficheros xml que representan los escenarios de red. Para probar vienen creados ya unos, como el simple_ubuntu.xml que usaremos para probar que todo funciona correctamente. Para ello ejecutaremos una a una las siguientes ordenes:


*Por cierto motivo seguramente de configuración es necesario realizar la ejecución desde privilegios totales que proporciona “sudo su” y no solo con “sudo vnx...”.

Y tras ésto, debería arrancarse una máquina virtual con ubuntu.

Otros comandos útiles:
- Para apagar el escenario y preservar los cambios:

sudo vnx -f simple_ubuntu.xml -v --shutdown
- Para apagar y eliminar el escenario:
sudo vnx -f simple_ubuntu.xml -v --destroy

Para crear un escenario se pueden observar los escenarios ejemplos que vienen en la carpeta o el escenario ejemplo de la web que es más completo, pinchando aquí.

Para cualquier información adicional y complementaria de esta potente herramienta de virtualización, puede seguir por aquí.

Gracias por vuestra paciencia, pero esta ausencia ha sido por el periodo de exámenes/prácticas.

domingo, 31 de marzo de 2013

Primeros pasos, primeros obstáculos (II)



El segundo proyecto que no he conseguido terminar de hacer funcionar es el de realizar un primer firewall interno con iptables para hacer más seguro nuestro ordenador.

Proyecto Firewall Básico - Para proteger la propia máquina:

Para comenzar lo primero es saber la teoría que tiene iptables.

1. Y la mejor manera de entender la teoría es leerte bibliografía que hay en internet como son:
Otro secundario:

2. Aun así, voy a contar un poco en general como se estructura.
Iptables se compone de 3 tablas principales (y una menos "importante" llamada RAW, para configurar excepciones en el seguimiento de paquetes) y cada tabla tiene unas cadenas definidas para cada acción a realizar:
  • Filter(Por defecto):Filtrado de paquetes. 
    • INPUT: Filtrado de paquetes que llegan al firewall. 
    • OUTPUT: Filtrado de los paquetes de salida. 
    • FORWARD: Permite el paso de paquetes a otra dirección del firewall.
  • Nat: Enrutamiento de direcciones de red. 
    • PREROUTING: Chequea la dirección de red antes de reenviarla. 
    • OUTPUT: Interpretación de las direcciones de Red de los paquetes que salen del firewall. 
    • POSTROUTING: Tratamiento de la dirección IP después del enrutado. 
  • Mangle: Modificación de las cabeceras de TCP.
    • PREROUTING 
    • POSTROUTING 
    • INPUT 
    • OUTPUT 
    • FORWARD

3. Todas estas tablas tienen un orden dentro flujo de los paquetes por el firewall, visualizar aquí.

4. Y luego existen acciones definidas como aceptar (ACCEPT), rechazar sin notificación (DROP), rechazar con notificación a través de ICMP (REJECT), enmascaramiento de la dirección IP origen de forma dinámica (MASQUERADE), enmascaramiento de la dirección IP destino (DNAT) y enmascaramiento de la dirección IP origen de forma estática (SNAT).

5. En general, hay dos mentalidades para hacer un firewall, que el filtrado por defecto sea aceptar (ACCEPT) e ir filtrando lo que no quieres bloqueando una a una las reglas; o denegar por defecto (DROP) e ir abriendo mediante las reglas las conexiones o servicios que deseas permitir o habilitar.

6. Las reglas pueden tener diferentes estados como son nuevo(NEW), establecido(ESTABLISHED), relacionado(RELATED) o invalido(INVALID).

7. Es necesario establecer los servicios con su puerto, por lo que mediante la wikipedia podemos obtener una tabla básica con la lista de puertos (privados) ya definidos.

8. Un par de órdenes muy útiles son:
- iptables -nvL  (Que muestra el listado detallado de las reglas establecidas)
- iptables-save > copia.bkp (Vuelca todas las reglas de iptables al fichero copia.bkp)
- iptables-restore copia.bkp (Restaura el back-up de reglas de iptables)

9. Forma de generar el firewall a partir de un shell script: 
  1. Generar un shell script con VIM (o Nano o VI) y guardarlo como fw.sh
  2. Darle permisos de ejecución al fichero:  sudo chmod u+x fw.sh  o también,  sudo chmod 744 fw.sh 
  3. Realizar la ejecución del shell script: sudo sh fw.sh

El shell script establecido para generar el firewall es:


En conclusión, los problemas en este proyecto han sido:
  • El primer problema que he tenido y como siempre el más tonto: cuidado con los "copy-paste" entre editores (especialmente pdf,doc,..) pues te pueden meter caracteres con formatos que la shell rechaza y te puedes tirar bastante tiempo pensando dónde estás fallando cuando el código esta "perfectamente".
  • El siguiente problema ha sido la de enfocar el firewall de la propia máquina a bloqueo por defecto (DROP) todas las tablas. Lo que no conseguía siquiera hacer que internet fuera. Pero es posible que esto tenga que ver por realizar todas las pruebas en una máquina virtual con un livecd (de la distribución bugtraq, la cual me está gustando cada vez más), ya que puede perder el enlace de internet del SSOO principal con la máquina virtual al manipular el firewall, supongo claro.
Cuando tenga tiempo, realizaré uno basado en aceptar por defecto e ir cerrando los que no queramos, además de un firewall susodicho dentro de una red, donde las reglas vendrán establecidas mediante el paso (FORWARD) de paquetes entre dos redes. Para esto último, necesitaría tener VNX.

Primeros pasos, primeros obstáculos (I)



Buenas, disculpad tanta espera, pero la cosa no ha ido todo lo bien que pensaba, además de que el tiempo escasea por la de cosas que me han salido.

Como bien he dicho, he intentado hacer dos "proyectos" pero no han terminado de salir. El primero fue instalar, configurar e intentar que funcionase la aplicación VNX la cual sería mi herramienta principal para simular redes de manera virtual donde establecería las defensas y ataques de forma segura.

Proyecto VNX:

VNX (Virtual Networks over linuX) es una herramienta de virtualización de código abierto diseñada para ayudar a construir bancos de pruebas virtuales de red de forma automática. Para ello permite definir e implementar de forma automática escenarios de red de las máquinas virtuales interconectadas a raíz de una topología definida por el usuario.
Esta herramienta la desarrolló el Departamento de Ingenieros de Sistemas Telemáticos (DIT) de la Universidad Politécnica de Madrid (UPM).

Bueno pues este proyecto tenía como objetivo preparar VNX (instalación, configuración y manual básico) y de cómo usarla, ya que en la asignatura de Seguridad observé el amplio potencial de dicha herramienta.

Lo primero que me puse a pensar si instalar VNX en Linux Mint 14.1 podría causarme algún problema, ya que la instalación iba sobre Ubuntu y aunque Mint está basado en Ubuntu, nunca se sabe que cosas cambian en uno respecto al otro, pero me decidí a intentarlo y probar suerte.

La primera manera que probé fue seguir la guía que te ofrecen ellos.
Realizando la instalación y configuración que ellos te guían.
1. Poner el soporte de virtualización en la BIOS de forma habilitada.
2. Actualizar todo antes de instalar algo.
3. Instalar una riestra de paquetes y librerias para libvirt.
4. Editar el fichero siguiente de la manera que te especifican:
         -/etc/libvirt/qemu.conf
5. Instalar VNX. Ejecutando el Script que te proporcionan.
6. Crear el fichero de configuración de VNX con el comando mv que te especifican.
7. Coger los filesystem que ya tenía guardados, realizarles los enlaces simbólicos y probar los xml de ejemplos.
8. Ejecutar vnx desde el fichero /usr/share/vnx/example/,
sudo vnx -f simple_ubuntu.xml -v --create

Como era de esperar, no iba a tirar a la primera. Lo que sí, recordé que el profesor aconsejó que le había funcionado con una versión anterior, que no lo hiciéramos con la última. Lo cual, me llevo a decirme, tengo una máquina virtual hecha por él (aunque tardé siglo y medio en acordarme de la password de la máquina, suerte que la blackboard sigue enlazado el curso, pero ya está apuntada), donde todo funciona, vamos a ver que ha hecho él (mirar el historial de usuario y root, y los ficheros de configuración). Lo que me llevo a realizar de nuevo todo el proceso una vez más con la versión vnx-2.0b y seguir sus pasos. Esto realmente me permitió quitarme errores raros, pero seguía sin tirar bien. Entre las nuevas cosas, está la de instalar dynamips y dynagen, y crear el demonio dynamips (que también te lo pone en la guía de instalación) "/etc/init.d/dynamips", observar la configuracion de todos los ficheros de configuracion que se hacen referencia:
- /etc/vnx.conf (que es igual que /usr/share/vnx/etc/vnx.conf.sample)
- /etc/libvirt/qemu.conf
- /etc/libvirt/libvirt.conf
- /etc/libvirt/libvirtd.conf

En conclusión, el problema en definitiva es que a la hora de crear el escenario no levanta las maquinas virtuales por algún problema de la libreria "libvirt". Especificamente, este:


Lo que no entiendo es que deniegue el permiso cuando lo hago bajo sudo (root).

Me he seguido leyendo sobre la librería, pero no consigo sacar en claro. No sé si me falta modificar algún fichero de configuración o instalar algo.

Como siguiente opción tenía la de realizar todo esto sobre una máquina virtual de Ubuntu y si ahí sí tira el motivo sería el SO, y ya decidiría si meterme Ubuntu. A lo muy malo tiraré de la máquina virtual que si funciona, pero será un lio y bastante incómodo, limitado y lento.