Saturday, 4 July 2009

Conectando una máquina virtual a un router en Dynamips

Me gusta usar Dynamips porque es una herramienta que permite practicar comandos y realizar laboratorios con un presupuesto MUY bajo. A veces es necesario tener uno o varios hosts desde los cuales probar una que otra configuración, verificar una lista de acceso, etc.
He usado un programita llamado VirtualPC Simulator (nombrado en una entrada anterior de este blog), el cual es muy útil y versátil. Si desean, lo pueden conseguir acá.
Si embargo, este tipo de programas es muy limitado. Sólo permite hacer ping, traceroute, y entre sus últimas funcionalidades, permite adquirir dirección por medio de un servidor DCHP.
La idea es tener un sistema operativo corriendo como tal, con el objetivo de no solo hacer ping y trace, sino también poder hacer pruebas de acceso web y conectividad en otros programas y protocolos.

Para describir un poco mi sistema, les cuento que uso un laptop Dell Inspiron 6000, ya un poco viejito, pero todavía funcional. Como habrán leído, me aburrí de WIndows, entonces cambié mi disco duro por uno más grande y tengo instalado FC9.

1. Creación de interfaz TAP en linux.
La interfaz TAP en linux es usada para craear un puente (bridge) entre un sistema y otro. Nuestro objetivo es crear un link entre nuestro router y la máquina virtual.

Para crear la interfaz TAP, se procede así:


[root@luiskr lab2_security_U_configs]# /usr/sbin/tunctl -u evilcat
Set 'tap0' persistent and owned by uid 500

[root@luiskr lab2_security_U_configs]# /sbin/ifconfig tap0 up

[root@luiskr lab2_security_U_configs]#


Los comando anteriores nos crean una interfaz TAP llamada TAP0, la cual fue creada por el usuario evilcat; luego habilitamos administrativamente la interfaz colocándola en modo UP.

Al usar el comando ifconfig, vemos que la interfaz fue creada. Aclaro que no se debe configurar dirección IP, porque ésta se pone ya en la VM (Virtual Machine)


[root@luiskr lab2_security_U_configs]# /sbin/ifconfig

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:4338 errors:0 dropped:0 overruns:0 frame:0 TX packets:4338 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:218400 (213.2 KiB) TX bytes:218400 (213.2 KiB)

tap0 Link encap:Ethernet HWaddr AE:F9:8E:21:03:88
inet6 addr: fe80::acf9:8eff:fe21:388/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:6 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)


2. Estableciendo el link en Dynamips
Ayudados por GNS3, el cual permite de forma gráfica realizar las conexiones, podemos crar la topología del laboratorio a implementar, muy sencillo, ya que sólo me interesa exponer cómo conectar la VM contra el router. Éste se muestra a continuación:

La nube va a simbolizar el host que vamos a conectar. Haciendo click-derecho sobre la nube, podemos acceder a las opciones de configuración.


Ahí vamos a establecer el nexo con nuestra recién creada interfaz tap0. Nos situamos en el tab llamado NIO TAP, y escribimos el nombre de nuestra interfaz, tap0. Hacemos click en Add.

Al hacer esto, ya queda creada:

y guardamos. Ya por este lado estamos listos.

3. Configuración de la máquina virtual.
Para ejecutar máquinas virtuales uso VirtualBox, el cual tiene un excelente desempeño. A la hora de realizar este tipo de procedimientos, el mayor inconveniente es el procesamiento: esto porque Dynamips consume muchos ciclos de reloj (hay que configurar el parámetro Idlepc) y la ejecución de la VM también demanda memoria. Por esto, dediqué tiempo para encontrar una imagen de un sistema operativo que no demandara casi memoria y procesamiento. Obviamente pensé en una distribución Linux, y se llama DSL (Damn Small Linux), la cual tiene todo lo necesario en un footprint pequeño, de aproximadamente 50 megas. Éste se puede descargar de acá.

En VirtualBox, creamos la máquina virtual. Cuando tengamos listo el perfil, lo que hay que tener en cuenta es la configuración de la tarjeta de red. Ésta se debe poner como aparece en la figura, para que la VM use la interfaz tap0.


DSL no requiere instalación, simplemente se puede configurar para que la VM use la imagen para iniciar.

Ya al iniciar la VM, aparece la ventana de inicio de DSL, simplemente presionaos enter para continuar:


y al terminar el proceso, nos queda un escritorio de Linux:


Para poder configurar la red, hacemos click derecho sobre el escritorio, y buscamos el menú que se muestra en la figura:


procedemos ahora a configurar la red. Insertamos las IPs dirrecpondientes para nuestro sistema:



para confirmar, escribimos /sbin/ipconfig y nos muestra que la interfaz eth0 ya está configurada.



4. Configuración del router
Ya con la configuración lista en nuestro host, podemos configurar el router en Dynamips y así tratar de establecer la comunicación.

La interfaz en el router está configurada de la siguiente forma:


Hay que tener en cuenta la configuración que ud tenga en su firewall. Por mi parte, yo uso Linux, y la configuración de IPTables que tengo debe permitir tráfico telnet e ICMP.

5. Probar conectividad
Este es el ping del router a la máquina virtual


Éste es el ping de la Máquina virtual al router:


Habilitando el servidor http del router, es posible acceder por web desde la máquina virtual hacia el router:

He ahí la importancia de tener un sistema operativo desde el cual permita probar varios tipos de tráfico hacia la red que se está probando.

Friday, 3 July 2009

IPTables as a tool to avoid ads

Recently I opted to terminate my relationship with MS Window$. I wiped out my hard disk and I installed FC9. While using Windows, I used Avast to filter URLs so I do not get nasty ads while surfing the internet. I just wanted to access to my favourite websites without surveys, flight promotions, 'you are a winner' banners, and so on.
I chose to use IPTables because it is a firewall that is coded inside the Linux kernel, really powerful. I just need... to learn to use it. A basic (basic indeed) guide to do it is explained below.

1. Components:

IPtables works at layer 3 and 4 of the OSI model. It is a stateful firewall, that is organized as follows:
  • Tables: IPtables uses 3 default tables: Mangle (permits to modify packet parameters such as ToS and TTL); NAT (Allows to change IP addresses and ports); and Filter (used to filter packets)
  • Chains: Are contained in each table, and allows to specify the firewall policy rule.
  • Rules: Each chain has rules. You create rules to filter traffic.
So, tables contain Chains, Chains contains rules. Easy.

The most used table in IPTables is the Filter table. This table has 3 default chains:
  • Input: this chain analyzes all incoming traffic to our host
  • Forward: used when the destination of the packet is not out host, so the packet is forwarded
  • Output: packets use this chain when they are leaving our host.
In order to filter undesired URLs, we will use the Input chain, because we want to prevent our system to receive packets from a website. Sometimes the output chain will be used too, because sometimes there are pop-ups that try to access a defined URL. Packets won't leave our host if they are filtered on the Output chain.

2. Configuring rules:

Rules are as Access Control Lists (Cisco jargon) used to filter traffic. Rules must include:
  • Name of the chain
  • What to do to with the rule on the defined chain ( Append, Insert, Replace, Delete)
  • Name of the table (if using the filter table, it is not neccesary to mention it)
  • Specify layer 3 source and/or destination IP addresses.
  • Optionaly, specify layer 4 protocol or port.
  • Action (jump or target): Accept, drop, deny, reject or log the match.
For example: Block source IP 192.168.1.30 from communicating with our host:
the rule should be written as follows:

iptables -A INPUT -s 192.168.1.30 -j DROP

3. What to filter?

Ok. Now we know the basics on how to write rules. We are going to find an ad we want to filter from showing on our browser. I like to search for subtitles in a very nice webpage called opensubtiles.

as you may see, there is a banner at left, and a pop-up appeared.
In order to know the ip addresses that are accesed to bring that information, I use Wireshark (you can also use TCPDump, for example).
Wireshark must be capturing packets while opening the webpage.
When finished, I cool stategy is to order the captured packets by protocol. Our host in order to access information from the internet, must do a DNS query to find the IP address of the server it wants to pull information from.


see anything undesirable? You see that the host must resolve opensubtitles.org but it is also resolving strange URLs such as s7.addthis.com, widgets.amung.us, ads.identads.com, etc.
Wireshark also provides the IP address of those undesired domains, 200.12.180.4. We can also use nslookup to do this:

[evilcat@luiskr Desktop]$ nslookup
> widgets.amung.us
Server: 200.12.180.4
Address: 200.12.180.4#53

Non-authoritative answer:
Name: widgets.amung.us
Address: 67.202.94.94
> ads.identads.com
Server: 200.12.180.4
Address: 200.12.180.4#53

Non-authoritative answer:
Name: ads.identads.com
Address: 77.247.177.150
>

Now, we are ready to build and test wour rules!

4. Building and applying the rules.

I would like to share with you my filter table. You can get to know how your filter table is configured using the command /sbin/iptables -L -v

[root@luiskr evilcat]# /sbin/iptables -L -v
Chain INPUT (policy DROP 11840 packets, 967K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:vnc-server
666 153K ACCEPT tcp -- any any anywhere anywhere tcp spt:msnp
0 0 ACCEPT tcp -- any any anywhere anywhere tcp spt:xmpp-client
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:13111
10488 12M ACCEPT tcp -- any any anywhere anywhere state RELATED,ESTABLISHED
274 58045 ACCEPT all -- any any anywhere anywhere state ESTABLISHED

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 10018 packets, 1544K bytes)
pkts bytes target prot opt in out source destination
[root@luiskr evilcat]#


My INPUT chain has a default policy of drop (so if the packet does not match any criteria it is discarded). Also I permit access to some services in my PC, such as VNC server, Messgener, GTalk, a port-forwaring option for Bittorrent and established TCP sessions.

We are going to insert rules to filter those IP addresses from getting to our host.

/sbin/iptables -I INPUT 5 -p tcp -s 67.202.94.94 -j REJECT
/sbin/iptables -I INPUT 5 -p tcp -s 77.247.177.150 -j REJECT
/sbin/iptables -I INPUT 5 -p tcp -s 200.12.180.4 -j REJECT

The command states that the rule is going to be inserted in position number 5, It is going to match TCP, source address X and is going to reject the packet.

Lets list our rules so we get to know how are the finally configured:

[root@luiskr evilcat]# /sbin/iptables -L -v --line-numbers -n
Chain INPUT (policy DROP 37845 packets, 3030K bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:5900
2 1232 263K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:1863
3 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:5222
4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:13111
5 0 0 REJECT tcp -- * * 200.12.180.4 0.0.0.0/0 reject-with icmp-port-unreachable
6 0 0 REJECT tcp -- * * 77.247.177.150 0.0.0.0/0 reject-with icmp-port-unreachable
7 0 0 REJECT tcp -- * * 67.202.94.94 0.0.0.0/0 reject-with icmp-port-unreachable
8 17247 17M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
9 767 156K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 18285 packets, 3872K bytes)
num pkts bytes target prot opt in out source destination
[root@luiskr evilcat]#

5. Testing!

We are ready to test.... lets roll! Proceed to reload the webpage: This is the result I get:



This is a clean webpage, no advertisement around.
Of course, you know advertisement varies from country to country, the ads you get from your location may differ, so do the URLs your host pull those from.


I hope you find this useful and helps you to filter undesired Internet traffic





Wednesday, 1 July 2009

Emulando redes con Dynamips

1. Introducción
Dynamips es un software que sirve para emular el funcionamiento de routers marca Cisco. El
software fue escrito por Christophe Fillot. Es capaz de emular routers de las gamas 1700, 2600, 3600, 3700 y 7200 a partir de una imagen de IOS que se debe conseguir de Cisco. Dynamips se basa en Dynagen, el cual es un front-end de modo texto. Sirve para poder construir las redes virtuales. Dynagen se caracteriza por:
• Usar un archivo de texto simple y fác
il de entender para especificar la configuración de los routers
• Usa una sintaxis simple para conectar los elementos de la red.
• Puede trabajar en modo cliente/servidor, con lo que puede configurar equipos en varias máquinas que trabajan con Dynamips.
• Provee de un CLI para gestionar dispositivos (encenderlos, apagarlos, reiniciarlos,
suspenderlos)

2. Ventajas
Dynamips es muy útil para:

• Perder el miedo de
ingresar comandos en un IOS, el cual es idéntico al que se encuentra en routers reales de una red en producción.
• Experimentar y probar características de un IOS
• Crear laboratorios de prueba para experimentar configuraciones con el objetivo de llevarlas
luego a redes en producción.
• Entrenamiento de personal y medición de habilidades. Es bueno aclarar que un emulador nunca podrá reemplazar un router real.

3. Consideraciones de riesgo en el host en donde se ejecuta Dynamips
Hay algunas consideraciones a tener en cuenta en lo que respecta al uso d
e la memoria y al uso del procesador. En lo que respecta a la memoria, Dynamips usa lo justo: la cantidad de RAM que usted especifique que va a usar su enrutador virtual será la RAM que el computador use, adicionando 64 MB para hacer caché de las transacciones JIT. Por lo regular será menos la cantidad de memoria usada debido a que Dynamips se apoya en archivos temporales en disco para simular la memoria virtual del router. Sobre el uso de CPU, Dynamips la explota totalmente, esto debido a que se emulan absolutamente todas las instrucciones que se ejecutan dentro de la CPU virtual del enrutador. Cuando el router inicia, no es posible para la máquina saber cuándo el router virtual está en estado idle, por lo que la máquina ejecuta todas las rutinas que se hacen cuando el router está idle. Se recomienda ejecutar el comando ‘idlepc’ (que se verá próximamente) con el objetivo que la máquina se dé cuenta de cuáles rutinas son las que corresponden cuando el router está en idle y se baje la prioridad de las mismas, con lo que el consumo de CPU baja ostensiblemente.

4. Instalación:
Dynamips puede ser ejecutado en Linux o en Windows.
Para Windows, debemos tener en cuenta que la librería WinpCap debe estar previamente in
stalada, se puede obtener de forma gratuita del siguiente link: http://www.winpcap.org/ Winpcap lo que provee es la capacidad de poder enlazar las interfaces virtuales de los routers con interfaces físicas. Igualmente, ofrece la capacidad de capturar datos.



La instalación de Winpcap no tiene nada del otro mundo, simplemente es ejecutar el instalador y
hacer click en ‘next’ o ‘I agree’ según sea el caso con el fin de completar la instalación.
Luego de esto, se debe instalar el programa, el cual se puede bajar de la siguiente ubicación:
http://sourceforge.net/project/showfiles.php?group_id=160317


En la ventana siguiente, hacemos click en ‘Next’

Aceptamos los términos de la licencia GNU

Luego, nos pide solicitar que insertemos el nombre de la carpeta del menú inicio donde va a quedar instalado el programa. El programa instala y queda listo para ser ejecutado

Ya podemos ir a ‘Mi Escritorio’ en donde aparecen varios accesos directos de las utilidades de las cuales consta el programa.

La carpeta llamada ‘Dynagen Sample labs’ contiene ejemplos de redes montadas con Dynamips. Se pueden usar como referencia a la hora de mirar cómo se puede configurar una red que contenga una nube Frame Relay, un switch Ethernet, un PIX, entre otros. ‘Dynamips Server’ es la consola principal de Dynamips, en donde podemos hacer gestión de la red que vamos a simular.
‘Network Device List’ es en script que nos muestra las interfaces que tiene la máquina
conectada. ‘Pemu server’ es un emulador de firewalls Cisco PIX, por ahora no se entra en detalles sobre esto.

Es importante tener en cuenta que en la ruta c:\Archivos de Programa\Dynamips\images\ se deben
copiar los archivos .bin que corresponden a las imágenes de los IOS que se vayan a utilizar en los
equipos de la red a emular. Dynamips no distribuye IOSs.


Un elemento de red importante dentro de una red son los hosts. Los host nos sirven como punto de
prueba para verificar que el laboratorio que se está emulando está funcionando bien.
Existe un programa (no viene con la instalación de Dynamips) que me permite emular hasta 9
hosts y conectarlos de forma virtual a cualquier interfaz de los elementos de la red que se va a
simular.
El programa se llama Virtual PC Simulator, no requiere instalación y se puede bajar en el URL:
http://www.freecode.com.cn/doku.php?id=wiki:vpcs
Esta utilidad no requiere instalación.
Al descomprimir el archivo que se baja de la página, el archivo de interés es el que se llama
startup.vpc, el cual establece las direcciones IP de los PCs a ser emulados, su default Gateway y
su máscara de subred.
A través de un ejemplo se explicará cómo se realiza la simulación de un laboratorio en Dynamips.
Se usará el laboratorio que viene en la instalación de Dynamips que se llama ‘simple1.net’, el cual
está ubicado en c:\Archivos de Programa\Dynamips\sample_labs\simple1\
Este laboratorio conecta dos enrutadores Cisco 7200 entre si.

El Archivo simple1.net tiene la siguiente estructura:


1 . encabezado que da a entender que los elementos de red a emular se pondrán a corren en
la máquina local.
2. Establece una instancia de un router 7200, el cual tiene una imagen llamada c7200.bin y
que está ubicada en la ruta mostrada
3. especifica parámetros físicos del enrutador. En este caso, especifica el tipo de NPE
(network Processing Engine) y la cantidad de memoria RAM que tiene el enrutador.
4. Crea el router que se llama R1 (éste no se relaciona en ningún momento con el hostname)
y especifica que se conectará la interfaz serial 1/0 con la interfaz S1/0 del router R2, el cual
es definido en la parte 5
5. Define el router llamado R2. Debido a que la interfaz S1/0 ya está conectada por lo
especificado en el punto 4, no es necesario especificarlo de nuevo.

Tenemos el archivo de configuración listo, podemos proceder a correr el entorno de emulación.
Ejecutamos el Dynamips Server (ubicado como acceso directo en el escritorio)
Nos saldrá una pantalla similar a esta:


Ya acá en este punto podemos ejecutar el archivo Simple1.net, haciendo doble click en él.
Nos aparece en la pantalla una consola que nos servirá para gestionar la red que se está
emulando.


Desde ese prompt se pueden ejecutar comandos. Con el comando Help podemos ver otros comandos que se pueden ejecutar.


Por ejemplo, para verlo los elementos que están en la red los podemos listar con el comando list


Ahí vemos que tenemos 2 enrutadores, que son de la familia Cisco 7200, están en ejecución.Ya podemos proceder a ingresar por ellos en modo consola. Esto se consigue con el comando console /all. El atributo /all permite extender el comando console a todos los enrutadores que están en ejecución
En consecuencia se abren 2 ventanas con la consola en las cuales se puede observar que el sistema empieza a bootear el equipo y a descomprimir el IOS, tal como lo hace un router real.
Tal como ilustra la figura, el procesamiento de la CPU del equipo en el que corre Dynamips se incrementa tan pronto se ponen a correr los enrutadores.

Eso pone en riesgo la estabilidad del equipo y la rapidez en la respuesta a los comandos que uno
inserta en el enrutador. Para solucionar esto, debemos establecer un valor de parámetro para la
opción de configuración idlepc. Esto se hace de la consola de Dynagen. Se usa el comando idlepc
get R1 (en este caso para el enrutador R1)
Este comando hace un análisis del ser de instrucciones en ejecución por parte de emulador.
Detecta qué comandos se ejecutan cuando el enrutador está en idle, con el fin de optimizar
procesamiento)
Cuando la consola termina de hacer el análisis, saca unos valores potenciales que podrían
seleccionarse para bajar el nivel de procesamiento.
En este caso, salió lo siguiente:

Esto nos indica que un valor potencial de idlepc es el 1 y el 6. Seleccionamos el 6.
Este mismo proceso se hace para el router 2.
Tan pronto elegimos el valor de idlepc para R2, el procesamiento cae inmediatamente.


Es importante decir que estos valores idlepc funcionan para esta configuración. Por lo tanto si hay
un cambio de topología (se añade otro equipo, por ejemplo) este proceso se debe hacer de nuevo.
Los valores que arroja luego de ejecutar el comando idlepc get R1 o R2 se deben escribir en el
archivo de configurtación simple1.net con el objetivo que la próxima vez que se ejecute la
topología, ésta ya cargue por default estos parámetros y este proceso no sea necesario de
realizarlo de nuevo.
El archivo de configuración simple1.net quedaría asi:


Los valores no necesariamente dan iguales, como en este caso.
Ya dentro del enrutador, podemos proceder a usar el CLI para configurar el equipo de la manera
más conveniente.

Y verificamos que haya conectividad entre los enrutadores


A partir de esto, se pueden hacer diseños más complejos e investigar cómo se pueden conectar
interfases físicas (reales) a algún router

5. Referencias:
Dynamips Homepage: http://dynagen.org/tutorial.htm
Cisco 7200 simulator http://www.ipflow.utc.fr/blog/
Vrtual PC Simulator http://www.freecode.com.cn/doku.php?id=wiki:vpcs

Welcome to my Blog

Hello!
this will be the space in which I will share my thoughts and insights about networking, operating systems, virtualization and network security. I am an Electronic Engineer, CCNA, Security+ and I am seeking to become a CCNP and CEH.
Your views and opinions are welcome!