curso maquinas virtuales y seguridad de redes

45
Curso de “M´ aquinas Virtuales y Seguridad de Redes” CUADERNILLO DE PR ´ ACTICAS Pedro Pablo G´omez Mart´ ın Septiembre 2010

Upload: yousdv

Post on 21-Dec-2015

227 views

Category:

Documents


1 download

DESCRIPTION

Curso Maquinas Virtuales y Seguridad de Redes

TRANSCRIPT

Page 1: Curso Maquinas Virtuales y Seguridad de Redes

Curso de “Maquinas Virtuales ySeguridad de Redes”

CUADERNILLO DE PRACTICAS

Pedro Pablo Gomez Martın

Septiembre 2010

Page 2: Curso Maquinas Virtuales y Seguridad de Redes
Page 3: Curso Maquinas Virtuales y Seguridad de Redes

Tema 1

Maquinas virtuales

Practica 1.1: Instalar Debian en VMWare

El primer paso que daremos sera instalar una maquina virtual en VMWare con Debian. Us-amos el asistente de creacion de maquinas virtuales en modo “personalizado” para seleccionarDebian.vmdk como nombre para el fichero de disco duro, y ademas pedimos que nos lo trocee envarios ficheros, en lugar de utilizar solamente uno. En la configuracion de la red seleccionamos“NAT”.

Practica 1.2: Configuracion de la red en Debian

En Debian la configuracion de la red esta en los ficheros /etc/network/interfaces (IP,mascara y puerta de enlace) y /etc/resolv.conf (servidores de nombre).

Analiza la configuracion actual (predefinida tras la instalacion).

Para averiguar la configuracion actual del sistema se utiliza ifconfig (sin parametros). Analizala salida de su ejecucion, y comparala con la configuracion original anterior. ¿Tiene sentido elresultado? ¿Coincide con la de tus companeros?

Para deshabilitar un interfaz de red se utiliza ifdown interfaz. Deshabilita eth0 y vuelve aejecutar ifconfig.

Para habilitar un interfaz de red se utiliza ifup interfaz. Habilita eth0 y vuelve a ejecutarifconfig. ¿Que pueden significar las lineas que aparecen?

Para realizar una configuracion estatica de una tarjeta de red se utiliza un esquema como elsiguiente en /etc/network/interfaces:

3

Page 4: Curso Maquinas Virtuales y Seguridad de Redes

4

iface eth0 inet staticaddress 192.168.1.2netmask 255.255.255.0gateway 192.168.1.1

Configura en Debian una IP fija diferente que encaje en la red de la IP recibida de maneraautomatica.

Cuando cambies la configuracion, es preferible deshabilitar la tarjeta de red antes de modificarel fichero, y volverla a habilitar despues. Tambien pueden hacerse ambas cosas despues de habercambiado el fichero, pero pueden surgir problemas si la configuracion original era por DHCP.

La pareja de comandos ifup e ifdown son “de alto nivel”. La configuracion “de bajo nivel”se realiza con ifconfig y route. Modifica de nuevo la IP de Debian por otra valida dentrodel segmento, usando solo ifconfig (puedes ayudarte con la pagina del maual). ¿Que ocurre sireinicias (con reboot) Debian tras conseguirlo?

Practica 1.3: Modelos de red en VMWare

La configuracion realizada en Debian es a nivel software para el sistema operativo huesped.Pero, ¿que pasa con el hardware? ¿Donde esta “conectada” la tarjeta de red realmente? Eso lodetermina VMWare, y nos proporciona varias opciones.

Al crear la maquina virtual de Debian seleccionamos “NAT” en la configuracion. Eso lo pode-mos cambiar en cualquier momento (incluso “en caliente” con la maquina virtual lanzada) porotras opciones:

Bridged: la tarjeta de red del huesped se mapea directa-mente a la red fısica del anfitrion. Cualquier cosa que elhuesped envıe a su tarjeta de red sera por tanto enviada(sin modificacion) por la tarjeta de red fısica. En condi-ciones normales, una tarjeta de red configurada en modoBridged debera recibir una IP dentro del segmento de redal que pertenezca el anfitrion.

Máquina virtual

Red física (bridge)

Router del aula

Anfitrión

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 5: Curso Maquinas Virtuales y Seguridad de Redes

Tema 1: Maquinas virtuales 5

Máquina virtual

Red física

Router del aula

Anfitrión

VMWare haciendo NAT y servidor DHCP

NAT: la tarjeta de red del huesped se conecta a un “seg-mento de red virtual” de VMWare. A ese segmentohay “conectado” un dispositivo (tambien gestionado porVMWare) que hace de servidor DNS para el, y ademasde puerta de enlace. Para eso, hace NAT (traduccion au-tomatica de direcciones) utilizando la IP del anfitrion. Encondiciones normales, las tarjetas de red configuradas conconexion NAT se configuraran en el sistema operativo in-vitado como dinamicas para recibir una IP del servidorDHCP de VMWare, y conseguiran acceso a la red fısicadel aula gracias a la traduccion de direcciones, saliendo conla IP del propio anfitrion.

LAN segment: la tarjeta de red del invitado se conecta aun “segmento de red virtual” creado por VMWare, al queno hay nada mas conectado (salvo, quiza, otras maquinasvirtuales). Esta opcion solo estara disponible en grupos(team), y el segmento sera privado al grupo, de manera quesi crearamos dos grupos, cada uno podrıa tener sus propiossegmentos de red independientes.

Máquina virtual

Red física

Router del aula

Anfitrión

LAN-1

Host only: es similar a la anterior, pero el segmento de red es compartido por todas las maquinasvirtuales y grupos creados. Ademas, conectado a el hay un servidor DHCP controlado por VMWare(aunque esta vez no hay ningun router que de salida).

Con la configuracion actual, ¿tienes salida a Internet?

Configura la tarjeta de red de Debian en VMWare conectada en modo puente (bridged).¿Tienes salida a Internet ahora? ¿Como lo solucionarıas?

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 6: Curso Maquinas Virtuales y Seguridad de Redes

6

Practica 1.4: Creacion de un grupo

Nuestro “laboratorio virtual” tendra dos Debian y un Ubuntu. El primer paso es crear un grupode VMWare. Crea un grupo llamado RedLinux e incluyele como “maquina virtual existente” alDebian instalado previamente. Crea un segmento de red privado llamado LAN 1.

Anade una nueva maquina virtual llamada “Debian Cliente” mediante clonacion de una ante-rior.

Anade una nueva maquina virtual llamada “Ubuntu”. Una vez realizada, sustituye los ficherosdel disco duro (.vmdk) por los proporcionados en el material. Practica a configurar la red enUbuntu. En este caso, utiliza la herramienta grafica.

Utiliza ifconfig para comprobar el efecto de los cambios.�

Practica 1.5: Anadiendo hardware: debian servidor

Para el laboratorio virtual, querremos que Debian Servidor haga de router. Para eso necesitados tarjetas de red. Apaga Debian Servidor, anade una tarjeta de red, y vuelve a lanzarlo. ¿Aparececonfigurada la nueva tarjeta de red?

Practica 1.6: Configurar el laboratorio virtual

La configuracion que vamos a usar durante todo el curso con las tres maquinas virtuales es lamostrada en la figura 1.1.

En ella, Debian Servidor tiene su primera tarjeta de red conectada en modo bridged, es decir“conectada” directamente a la red fısica del aula, por lo que es necesario proporcionarle una IP queno colisione con las del resto de ordenadores del aula, y tampoco con los Debian Servidor de todoslos alumnos. Ademas, en algunos momentos, querremos que las maquinas virtuales “internas”(Debian cliente y Ubuntu) de un alumno se conecten con las de otro, por lo que tampoco queremoscolisiones con las IPs internas.

Para que todo resulte facil, lo mejor es utilizar un convenio. Las aulas suelen tener IPs deltipo 192.168.x.0/24. Ası, un alumno tendra, por ejemplo, la IP 192.168.x.207, y otro tendra192.168.x.212. Dado que el numero de maquinas en el aula es reducido, lo que haremos sera queel Debian Servidor de cada alumno tenga la misma IP que su ordenador fısico, restando 100 alultimo byte (192.168.x.107 y 192.168.x.112 en el ejemplo). Obviamente, es necesario adaptaresto a cada aula, pero es una forma bastante sencilla de evitar problemas.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 7: Curso Maquinas Virtuales y Seguridad de Redes

Tema 1: Maquinas virtuales 7

Debian Servidor

Debian Cliente Ubuntu

LAN-1 (Virtual)

Red física (bridge)

Router del aula

Máquinas virtuales

Figura 1.1: Laboratorio virtual

Por otro lado, cada alumno es dueno de una nueva red, la red interna creada con el segmento dered LAN-1 en VMWare. Para evitar conflictos, asignaremos a dicho segmento la red 10.0.n.0/24,donde n es el ultimo byte de la IP del ordenador fısico menos 200. Ası, en los ejemplos anteriores,asignarıamos 10.0.7.0/24 y 10.0.12.0/24. De nuevo, esta idea habra que adaptarla a cadacontexto.

Una vez elegida la red IP del segmento, hay que asignar IPs a las maquinas. Como sera lapuerta de enlace, asignaremos la primera IP a la segunda tarjeta de red de Debian Servidor, lasiguiente a Debian Cliente, y la tercera a Ubuntu.

A modo de ejemplo, si el ordenador de un alumno tiene la IP 192.168.24.201, la asignacionde IPs debera ser la mostrada en la figura 1.2.

Para hacer esto, es necesario dos cosas:

• Configurar VMWare para crear las conexiones “fısicas”. En el mundo real, serıa similar a“colocar los cables” para conseguir las conexiones de la figura.

• Configurar las maquinas para asignar las IPs, es decir realizar la “configuracion software” delos Linux de las tres maquinas virtuales. Una fuente de informacion muy completa sobre estopuede encontrarse en http://www.debian.org/doc/manuals/reference/ch-gateway.es.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 8: Curso Maquinas Virtuales y Seguridad de Redes

8

Debian Servidor

Debian Cliente Ubuntu

LAN-1 (10.0.1.0/24)

Red física (192.168.24.0/24)

Router del aula

Máquinas virtuales

.1

.2 .3

.101 IP del anfitrión:192.168.24.201

.100

Figura 1.2: Laboratorio virtual con IPs

html, al menos las secciones 10.1, 10.6.1 y 10.4.1. En la 10.7 nos hablan de alias (interesanteen clase para agilizar cambios en la configuracion) y en la 10.2.1 nos explican la forma debajo nivel de la configuracion, tambien interesante en algunos momentos. La seccion 10.3.1cuenta como cambiar el nombre de la maquina (para diferenciar Debian Servidor y DebianCliente si se clonan).

Practica 1.7: Baterıa de pruebas 1: red basicaVamos a hacer diferentes ping entre las maquinas. Esto permite comprobar que todo esta bien

configurado. Es interesante conseguir que los alumnos entiendan todas estas pruebas y sean capacesde hacerlas ellos mismos cuando tengan problemas, para evitarnos seguir resolviendo problemastriviales durante todo el ano.

Se asume que inicialmente la configuracion de la red virtual es la mostrada en la figura 1.2.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 9: Curso Maquinas Virtuales y Seguridad de Redes

Tema 1: Maquinas virtuales 9

Antes de hacer los ping y probarlos, intenta anticipar el resultado.

Ping a realizar ¿Funciona?Desde Debian Cliente a la eth1 de Debian ServidorDesde el anfitrion (Windows) a eth0 de Debian ServidorDesde el anfitrion (Windows) a eth1 de Debian Servidor¿Por que y como lo arreglarıas?

Desde el anfitrion (Windows) a Debian cliente¿Por que?

Desde Debian Cliente a eth0 de Debian Servidor¿Por que?

Desde Debian Cliente a alguna IP externa (por ejemplo puerta de enlace del aula)¿Por que?

Practica 1.8: Baterıa de pruebas 2: todos en NATColocamos las tres tarjetas eth0 en modo NAT y con configuracion dinamica (recuerda cambiar

la “configuracion hardware” en VMWare, y la “configuracion software” cambiando las IPs a DHCPen los Linux).. Miramos las IPs asignadas por el servidor DHCP de VMWare y comenzamos conlos ping.

Ping a realizar ¿Funciona?Entre las diferentes maquinasDesde cualquiera de las maquinas, al router del aulaDesde el anfitrion (Windows) a cualquier ordenador¿Por que?

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 10: Curso Maquinas Virtuales y Seguridad de Redes

10

Practica 1.9: Baterıa de pruebas 3: encaminamiento y NAT

Debian Servidor

Debian Cliente Kubuntu

LAN-1 (Virtual)

Máquinas virtuales

Debian Servidor

Debian Cliente Kubuntu

LAN-1 (Virtual)

Máquinas virtuales

Debian Servidor

Debian Cliente Kubuntu

LAN-1 (Virtual)

Máquinas virtuales

Red física (bridge)

Router del aula

...

... ...

Alumno 1 Alumno 2 Alumno 3

Figura 1.3: Laboratorio virtual

Vamos a volver a la configuracion inicial de la red. De nuevo, recuerda establecer la configu-racion fısica y la logica. Algunos de los pings que hicimos en la primera prueba, no funcionaronporque Debian servidor no esta encaminando, lo que hace que los ordenadores de la red interna nopuedan conectarse a Internet. Hacer que un Linux encamine es cuestion de una linea:

# echo 1 > /proc/sys/net/ipv4/ip_forward

(para desactivarlo, escribimos un 0).Introduce dicha linea en Debian Servidor, y luego haz la siguiente baterıa de pruebas (algunas

son las mismas que en el primer bloque). Como siempre, intenta anticiparte a las respuestas (queno esten ya rellenas). Te puede servir como refencia la figura 1.3 siguiente, que muestra el esquemade la red considerando las maquinas virtuales de varios alumnos:

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 11: Curso Maquinas Virtuales y Seguridad de Redes

Tema 1: Maquinas virtuales 11

Ping a realizar ¿Funciona?Desde el anfitrion (Windows) a eth0 de Debian ServidorDesde el anfitrion (Windows) a Debian clienteDesde Debian cliente al anfitrionDesde el anfitrion al Debian servidor de un companeroDesde Debian servidor al Debian servidor de un companeroDesde Debian servidor al Debian cliente de un companero No¿Por que?

¿Como se soluciona?

Desde Debian cliente al Debian cliente de un companero distinto No¿Por que?

¿Como se soluciona?

Desde Debian cliente a “Internet” (puerta de enlace, google, ...) No¿Por que?

¿Como se soluciona?

Pon a Debian Servidor con eth0 en modo NAT y repite la prueba anterior¿Por que?

Si no es posible reconfigurar los routers del instituto para que conozcan nuestra red interna,entonces la unica opcion es que el ultimo que sı la conozca haga NAT. Por ejemplo, si nuestrorouter del aula es un Linux o un Windows y hemos anadido las rutas, podemos configurarlo (comoprofesores) para que haga NAT y ası no marear a los alumnos.

En otro caso, sera Debian Servidor quien tenga que hacer NAT. Ası las IPs de la red privadade cada alumno nunca se pondran en la red fısica, y todo funcionara. Para eso, en Debian Servidorescribimos una linea magica:

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Al igual que la activacion del encaminamiento IP, esta orden no es persistente; sera necesarioejecutarla cada vez que lancemos Debian Servidor (o crear un script de arranque automatico).

Si queremos desactivar de nuevo el NAT:

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 12: Curso Maquinas Virtuales y Seguridad de Redes

12

# iptables -t nat -F

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 13: Curso Maquinas Virtuales y Seguridad de Redes

Tema 2

Cortafuegos

Practica 2.1: Instalacion de demoniosPara poder hacer pruebas con el cortafuegos, vamos a instalar en Debian Servidor dos “demo-

nios” (servicios) que se queden escuchando en puertos TCP. En concreto, instalaremos el servidorde Telnet (puerto 23) y el servidor Web Apache (puerto 80).

# apt-get install telnetd apache2

En Debian, el demonio de Telnet se lanza a traves del “superdemonio de Internet” inetd (enconcreto, la version realizada originalmente para OpenBSD, openbsd-inetd). El instalador deTelnet se “olvida” reiniciar inetd, por lo que tendremos que hacerlo manualmente:

# /etc/init.d/openbsd-inetd restart

Comprueba que la instalacion se ha realizado bien conectandote desde el anfitrion con el nave-gador a la IP de Debian Servidor (veras la pagina predefinida de Apache). Conectate tambienpor telnet (si el anfitrion no tiene el cliente de telnet prueba desde Debian Cliente o Ubuntu).Comprueba tambien desde Ubuntu que te puedes conectar al servidor Web usando un navegador.

Practica 2.2: Analizando una conexion TCPVamos a analizar una conexion de TCP.

• Instala en Ubuntu Wireshark :

# apt-get install wireshark

13

Page 14: Curso Maquinas Virtuales y Seguridad de Redes

14

• Lanza Wireshark y ponlo a escuchar.

• Desde Debian Cliente, haz ping a un destino cualquiera (por ejemplo www.wikipedia.com).

• Deten el ping, la captura en Wireshark, y analiza el trafico que ves.

• Desde Debian Cliente, conectate por telnet a Debian Servidor (con el usuario alumno). Luegodesconectate con exit

• Analiza el trafico que ves. Comprueba la existencia de los tres segmentos de conexion, losde cierre, y utiliza el seguimiento de la conexion proporcionado por Wireshark para vercomodamente la comunicacion.

¿Notas a nivel de coste en ancho de banda alguna diferencia entre TCP y UDP?�

Practica 2.3: Comprobacion de puertos abiertosPara saber que puertos TCP tienen un proceso a la escucha usamos:

# netstat -tlnp

• -t : TCP

• -l : listen (escucha)

• -n : numerico, para que nos indique el numero de puerto en lugar del nombre del servicio(extraıdo de /etc/services). Esta opcion es opcional.

• -p : process, para que nos indique el PID del proceso que esta a la escucha, y su nombre.Solo funciona si somos root. Esta opcion es opcional.

Comprueba en Debian Servidor que puertos estan de telnet y de apache estan a la escucha, yque coinciden con los procesos esperados (esta inetd en lugar de telnetd).

Practica 2.4: Comprobacion de los puertos abiertos en remotoInstala en Debian Cliente nmap:

# apt-get install nmap

Usalo para realizar un escaneo de puertos de Debian Servidor y averiguar que puertos TCPtiene abiertos. ¿Coincide el resultado?

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 15: Curso Maquinas Virtuales y Seguridad de Redes

Tema 2: Cortafuegos 15

Resumen de los parametros de iptables

Comandos basicos de iptablesOpcion Descripcion-F | --flush [<cadena>] Vacıa la cadena, o todas si no se especi-

fica ninguna-P | --policy <cadena> <politica> Establece la polıtica por defecto para la

cadena (es decir la accion realizada pordefecto si no se aplica ninguna regla), porejemplo ACCEPT o DROP

-L | --list [<cadena>] [--line-numbers] Lista las reglas de la cadena o de todaslas cadenas

-A | --append <cadena> <regla> Anade una regla nueva al final de la ca-dena

-I | --insert <cadena> <regla> Inserta una regla al principio de la ca-dena

-R | --replace <cadena> <num regla> <regla> Sustituye una regla anterior por otranueva

-D | --delete <cadena> <num regla> Borra una regla

Comandos basicos sobre reglas en iptablesOpcion Descripcion-i [!] [<interfaz>] Especifica el interfaz de red de entrada del paquete (lo,

eth0, etcetera). Solo encaja para las cadenas INPUTy FORWARD. Si no se especifica interfaz, entonces indica“todos” (o sea, que para eso no pongas nada ;-))

-o [!] [<interfaz>] Especifica el interfaz de red de salida. Solo encaja paralas cadenas OUTPUT y FORWARD.

-p [!] [<protocolo>] Especifica el protocolo (sobre IP) del paquete. Se per-mite icmp, tcp o udp. Si se especifica protocolo, luegohay opciones adicionales disponibles dependiendo decada uno.

-s [!] <direccion>[/<mascara>] Especifica la direccion fuente del datagrama (o la redorigen si se especifica mascara)

-d [!] <direccion>[/<mascara>] Especifica la direccion destino del datagrama (o la reddestino si se especifica mascara)

[!] -f Indica que es un fragmento (diferente al primero).-j <destino> Indica que hacer con el paquete (-j de jump). Se puede

especificar DROP o ACCEPT o cualquiera de los demassoportados.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 16: Curso Maquinas Virtuales y Seguridad de Redes

16

Comandos basicos para reglas con el protocolo ICMPOpcion Descripcion--icmp-type [!] <type> Especifica el tipo del mensaje ICMP al que aplicar la regla.

Comandos basicos para reglas con el protocolo UDPOpcion Descripcion--sport [!] <puerto>[:<puerto>] Especifica el/los puerto/s origen--dport [!] <puerto>[:<puerto>] Especifica el/los puerto/s destino

Comandos basicos para reglas con el protocolo TCPOpcion Descripcion--sport [[!] <puerto>[:<puerto>]] Especifica el/los puerto/s origen--dport [[!] <puerto>[:<puerto>]] Especifica el/los puerto/s destino[!] --syn Indica que la bandera SYN esta activada (us-

ada unicamente durante el establecimientode una conexion)

--tcp-flags [!] <mascara> <comparacion> Comprueba las banderas contenidas en lamascara para ver si tienen los valores es-pecificados en <comparacion>. Las posi-bles banderas son SYN, ACK, FIN, RST, URG,PSH, ALL y NONE. La idea es poner en laparte de <mascara> todas las banderas quese quieran comprobar. Y luego en la partede <comparacion> se pone el nombre delas banderas que se quiere que esten acti-vas, y se omiten las que (de la mascara)se quieran que esten a falso. Ambas listasde banderas tienen que estar separadas porcomas y sin espacios. Ası la opcion --synvista antes es equivalente a --tcp-flagsSYN,RST,ACK,FIN SYN.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 17: Curso Maquinas Virtuales y Seguridad de Redes

Tema 2: Cortafuegos 17

Practica 2.5: iptables: polıtica por defecto

• Comprueba que puedes hacer ping desde Ubuntu a Debian Servidor y a un destino remoto(por ejemplo, Google).

• Establece en Debian Servidor DROP como polıtica por defecto para INPUT.

# iptables -P INPUT DROP

• Comprueba como aparece el cambio en el listado de reglas:

# iptables -LChain INPUT (policy DROP)target prot opt source destination

Chain FORWARD (policy ACCEPT)target prot opt source destination

Chain OUTPUT (policy ACCEPT)target prot opt source destination

• ¿Siguen funcionando las dos pruebas anteriores?

• Restablece ACCEPT en la cadena INPUT, y establece DROP en OUTPUT. ¿Que ocurre?

• Restablece ACCEPT en la cadena OUTPUT, y establece DROP en FORWARD. ¿Que ocurre?

Practica 2.6: iptables: condiciones de capa 2 y 3

• Normalmente las cadenas INPUT y OUTPUT se realizaran de manera simetrica, es decir si noqueremos permitir la salida a un determinado servicio (cadena OUTPUT), tambien impediremosla entrada de sus respuestas (en INPUT), incluso aunque estas respuestas sea “imposible” quelleguen.

Configura Debian Servidor para que responda cualquier cosa que llegue desde la red interna,pero ignore lo que llegue desde la red externa (es la configuracion que querrıas tener encualquier router ADSL). Manten sincronizadas las tablas INPUT y OUTPUT para que seansimetricas. Realizalo utilizando polıtica por defecto DROP. Comprueba que un ping entre elsistema anfitrion y cualquiera de las maquinas interiores continua funcionando.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 18: Curso Maquinas Virtuales y Seguridad de Redes

18

• Haz lo mismo que en el punto anterior con polıtica por defecto ACCEPT.

• Configura Debian Servidor para que responda a todos los datagramas enviados por DebianCliente pero ignore a Ubuntu (o cualquier otro potencial sistema de la red interna) y a toda lared externa. Hazlo tanto con polıtica por defecto DROP como ACCEPT, y manten sincronizadaslas tablas INPUT y OUTPUT1.

• Configura Debian Servidor para que responda a ping desde la red externa, pero no permitaconectarse por Telnet desde dicha red. Desde la red interna todo debera estar permitido.Implementalo con ambas polıticas por defecto.

Practica 2.7: iptables: condiciones de capa 4

• Pon en Debian Servidor DROP como polıtica por defecto para FORWARD. Configura el corta-fuegos para que Debian Cliente pueda hacer resoluciones DNS (puerto 53 de UDP).

• Comprueba que los puertos de telnet y Web estan abiertos en Debian Servidor. Configura elcortafuegos para que desde Debian Cliente sea posible una conexion solo al puerto 80 (web),y desde Ubuntu solo al 23 (telnet). Utiliza como polıtica por defecto DROP

Practica 2.8: iptables: DROP vs. REJECTEl destino DROP descarta el datagrama sin informar al receptor. El destino REJECT origina el

envıo de un mensaje ICMP configurable (por defecto, de puerto inalcanzable). Esto avisa al otroextremo que no le vamos a atender, ahorrandole la espera de una respuesta que no llega. Tambienes una prueba de que el sistema esta encendido.

• Lanzamos Wireshark en Ubuntu.

• Desde Debian Cliente, nos aseguramos de que podemos conectarnos por telnet a DebianServidor.

• Cerramos esa sesion. En Debian Servidor ponemos una regla en la cadena INPUT paradesechar (DROP) los segmentos destinados al puerto de Telnet:

# iptables -F INPUT# iptables -A INPUT -p tcp --dport telnet -j DROP

1En este ejercicio, no utilices en ningun caso -j ACCEPT si la polıtica por defecto de la cadena ACCEPT.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 19: Curso Maquinas Virtuales y Seguridad de Redes

Tema 2: Cortafuegos 19

• Volvemos a intentar la conexion desde Debian Cliente. Esta no se llevara a cabo. En Wire-shark veremos los reintentos de conexion (multiples mensajes SYN) enviados desde DebianCliente, que no son atendidos. Hasta que el cliente de telnet no desiste de realizar envıos nose abandona el intento de conexion.

• En Debian Servidor cambiamos la regla en la cadena INPUT para que en lugar de desecharel paquete se rechace activamente (REJECT):

# iptables -F INPUT# iptables -A INPUT -p tcp --dport telnet -j REJECT

Mientras no se diga otra cosa, los paquetes se rechazan con el mensaje ICMP de puertoinalcanzable.

• En Debian Cliente reintentamos la conexion. Ahora recibimos enseguida el rechazo en laconexion:

$ telnet 10.0.n.1Trying 10.0.n.1...telnet: Unable to connect to remote host: Connection refused

REJECT no se admite como polıtica por defecto. Cuando la polıtica por defecto es ACCEPT y sellega a un puerto en el que no hay ningun servicio escuchando se envıa automaticamente el mensajeICMP de puerto no disponible (similar a lo que harıa REJECT).

Practica 2.9: iptables: cadena FORWARDVamos a configurar el cortafuegos de Debian Servidor para que permita a la red interna acceder

a Internet, pero la proteja, al mismo tiempo, de acceso desde el exterior.

• Instala en Debian Cliente apache (apt-get install apache2) para tener un servicio en lared interna a proteger. Comprueba que puedes acceder a el desde el anfitrion.

• Prueba que tienes acceso al Apache del Debian Cliente del companero siguiente (sumando 1a tu IP). Quiza necesites su ayuda para conseguirlo (y tu companero anterior la tuya).

• Escanea los puertos de Debian Cliente de tu companero.

• Comprueba que desde Debian Cliente y Ubuntu tienes acceso a Internet.

• Pon en DROP la polıtica por defecto para FORWARD y realiza de nuevo las pruebas anteriores.

• Configura FORWARD para que desde la red interna pueda accederse a Internet. Para eso, abreel puerto 53 de UDP (DNS) y el 80 de TCP (Web).

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 20: Curso Maquinas Virtuales y Seguridad de Redes

20

• Primer intento:

# iptables -P FORWARD DROP# iptables -F# iptables -A FORWARD -p udp --dport 53 -j ACCEPT# iptables -A FORWARD -p tcp --dport 80 -j ACCEPT

• Esto no consigue que Internet funcione en la red interna, porque no esta abriendo la vuelta.Tenemos que ser cuidadosos y anadir los dos sentidos. Para eso, vigilamos los interfaces dered.

• Segundo intento:

# iptables -P FORWARD DROP# iptables -F# iptables -A FORWARD -i eth1 -o eth0 -p udp --dport 53 -j ACCEPT# iptables -A FORWARD -i eth0 -o eth1 -p udp --sport 53 -j ACCEPT# iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -j ACCEPT# iptables -A FORWARD -i eth0 -o eth1 -p tcp --sport 80 -j ACCEPT

• Con esto conseguimos que funcione Internet en la red interna. Y ademas, en principio, elservicio de Apache de Debian Cliente sera accesible desde la red interna (Ubuntu), perono desde el exterior. Comprueba esto ultimo conectandote desde el anfitrion al Apache deDebian Cliente.

• ¿Seguro? Prueba a escanear los puertos de tu companero desde “el exterior” (en DebianServidor) con el parametro -g:

# nmap 10.0.(n+1).2 -g 80

• Usando desde fuera el puerto origen abierto para las respuestas podemos colarnos (el puerto80 gracias al parametro -g).

• Tercer intento: miramos el puerto del cliente:

# iptables -P FORWARD DROP# iptables -F# iptables -A FORWARD -i eth1 -o eth0 -p udp --sport 1024:65535

--dport 53 -j ACCEPT# iptables -A FORWARD -i eth0 -o eth1 -p udp --sport 53

--dport 1024:65535 -j ACCEPT# iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport 1024:65535

--dport 80 -j ACCEPT# iptables -A FORWARD -i eth0 -o eth1 -p tcp --sport 80

--dport 1024:65535 -j ACCEPT

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 21: Curso Maquinas Virtuales y Seguridad de Redes

Tema 2: Cortafuegos 21

• Con esto evitamos que un atacante pueda utilizar puertos origen que parecen confiables paraescanear nuestros puertos.

• ¿Seguro? ¿Es ası en todos los casos? Desde Ubuntu (“el exterior”):

# nmap -P0 10.0.n.2 -g 80

nmap indica que algunos puertos estan cerrados y otros filtrados, por lo que hay algunadiferencia. Eso significa que en ocasiones ¡llegamos a entrar!

• Algunos servicios utilizan puertos por encima de 1024, por lo que quedarıan al descubierto(de estar activos).

• Cuarto intento: negar la entrada de segmentos de SYN. Esto solo es posible en TCP.

# iptables -P FORWARD DROP# iptables -F# iptables -A FORWARD -i eth1 -o eth0 -p udp --sport 1024:65535

--dport 53 -j ACCEPT# iptables -A FORWARD -i eth0 -o eth1 -p udp --sport 53

--dport 1024:65535 -j ACCEPT# iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport 1024:65535

--dport 80 -j ACCEPT# iptables -A FORWARD -i eth0 -o eth1 -p tcp --sport 80

--dport 1024:65535 ! --syn -j ACCEPT

• La unica diferencia respecto a la version anterior es ! --syn en la ultima regla. Vuelvea ejecutar nmap contra tu companero y veras que iptables no deja entrar a ninguno denuestros segmentos del escaneo.

• Como para UDP no hay nada equivalente a SYN, no podemos protegernos de este modo. Sien Debian Cliente hubiera un servicio UDP en un puerto no privilegiado, no evitarıamos quefuera accesible desde el exterior a traves del puerto 53 origen.

Practica 2.10: Seguimiento de conexionesCon la configuracion del cortafuegos sin estado que hemos usado, aun pueden entrar segmentos

TCP ACK que digan venir de un puerto legal (80) destinados a un puerto no privilegiado y que enrealidad no esten asociados a ninguna conexion existente. Ademas en UDP no tenemos SYN por loque no podemos controlar quien inicia la comunicacion.

Con el modulo state convertimos a iptables en un cortafuegos con estado, de manera que:

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 22: Curso Maquinas Virtuales y Seguridad de Redes

22

• Introduciremos una unica regla por cadena para dejar pasar datagramas asociados a unaconexion ya existente.

• Introduciremos una unica regla por servicio que queramos abrir, dejando pasar (“sin estado”)unicamente al primer datagrama esperado.

La configuracion del cortafuegos con estado para dejar salir DNS y Web desde la red internaquedarıa:

# iptables -P INPUT DROP# iptables -P OUTPUT DROP

# iptables -A FORWARD -m state --state ESTABLISHED,RELATED-j ACCEPT

# iptables -A FORWARD -i eth1 -o eth0 -p udp --sport 1024:65535--dport 53 -j ACCEPT

# iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport 1024:65535--dport 80 --syn -j ACCEPT

Por cada servicio hay una sola regla que deja pasar el datagrama de inicio. Debido a ello en elcaso de TCP dejamos salir el SYN. Otra forma de escribirlo es:

# iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport 1024:65535 --dport 80-m state --state NEW -j ACCEPT

En /proc/net/ip_conntrack se pueden ver las conexiones conocidas por el modulo de estado.Ahora el cortafuegos controla tambien quien inicia las conversaciones UDP, de modo que po-

dremos tambien impedir la entrada UDP viniendo de puertos supuestamente confiables.�

Practica 2.11: Tabla NATINPUT, FORWARD y OUTPUT forman la tabla filter. Hay dos tablas mas: nat y mangle, cada una

con sus propias cadenas, que entran en juego en otros momentos durante la vida de un datagramaen el nucleo. En esas cadenas, los destinos (medidas a tomar si la una regla encaja) ya no sonACCEPT o DROP, sino “modifica la IP origen” o “anota el datagrama con el numero 0x1387”.

La tabla nat se utiliza para realizar NAT :-), es decir para modificar las IP origen y/o destinodel trafico que veamos. Dispone de tres cadenas.

• PREROUTING: antes de decidir como encaminar un datagrama, se le hace pasar por estacadena. Los destinos posibles sirven para modificar la IP destino, de ahı que deba realizarseantes de encaminar.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 23: Curso Maquinas Virtuales y Seguridad de Redes

Tema 2: Cortafuegos 23

• OUTPUT: similar a la anterior, pero para los datagramas enviados localmente.

• POSTROUTING: una vez decidido el destino del datagrama, y que la tabla filter ha sidocomprobada, los datagramas se pasan por esta cadena. Los destinos posibles sirven paramodificar la IP origen.

La tabla nat exige, automaticamente, seguimiento de conexiones en el nucleo (que puede, o no,luego usarse tambien en la tabla filter). Al escribir las reglas, solo debemos preocuparnos delprimer datagrama, no de sus respuestas.

• Queremos hacer PNAT clasico, para que un Linux haga de salida con su “IP publica” a lared interna:

# iptables -t nat -A POSTROUTING -j MASQUERADE

• Queremos “ponernos en medio” de una comunicacion, y que un trafico destinado a otra IPllegue a un servicio lanzado localmente. Por ejemplo:

– Para interceptar una comunicacion y “hacernos pasar por otro” (normalmente con mo-tivos oscuros).

– Proxy transparente.

Para eso utilizamos PREROUTING (vamos a modificar el destino).

– Desde Debian Cliente, conectate al Debian Servidor de tu companero (n+1).

– Pide a tu companero que, con who, mire con una sesion local en Debian Servidor siestas conectado (puedes hacerlo tambien tu en la sesion de telnet). Haz lo mismo entu Debian Servidor para saber si tu companero n-1 ha hecho lo mismo. Fijate en la IPremota del usuario que se ha conectado.

– Cierra la sesion de telnet.

– En Debian Servidor, introduce una entrada en PREROUTING para redirigir el puerto detelnet al servicio local:

iptables -t nat -A PREROUTING -i eth1 -p tcp --sport 1024:65535--dport telnet -j REDIRECT --to-port telnet

– Vuelve a realizar las pruebas anteriores. Veras que ahora la sesion se abre en tu debianservidor al haber interceptado la comunicacion.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 24: Curso Maquinas Virtuales y Seguridad de Redes

24

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 25: Curso Maquinas Virtuales y Seguridad de Redes

Tema 3

Proxies web

El cortafuegos toma decisiones sobre trafico en funcion de los datos de las cabeceras de las capas3 y 4 (y, quiza, de la capa 2). Si queremos un control especıfico sobre protocolos de la capa 7 (porejemplo que solo el jefe/profesor pueda acceder a las paginas de los diarios deportivos en horas detrabajo/clase), entonces necesitamos una aplicacion que comprenda el protocolo correspondiente(de capa 7), analice “sus cabeceras” y decida que hacer en funcion de ellas.

En el caso del protocolo de capa 7 HTTP/HTTPS (web), a esa aplicacion se la llama proxy.Ademas de servir para tomar decisiones de filtrado tambien puede realizar cache (y muchas vecesse utiliza unicamente para eso).

Practica 3.1: Los routers/cortafuegos y la capa 7Antes de subir a la capa 7, vamos a comprobar que un router (o cortafuegos) no necesita la

capa 7 para hacer su labor.

• Desde Debian Cliente, crea una conexion TCP con un ordenador externo. Por ejemplo,conectate por Telnet al ordenador del profesor.

• En otra consola de Debian Cliente (<Ctrl>-<Alt>-F2 por ejemplo), utiliza netstat -tnpara ver el rastro de esa conexion en el nucleo1. Veras la conexion con IP origen la de DebianCliente, puerto origen aleatorio (no privilegiado), IP destino la del ordenador del profesor, ypuerto el de telnet.

• Haz lo mismo en Debian Servidor. ¿Encuentras alguna traza de la conexion?

1En esta ocasion no se especifica -l, porque no queremos ver las aplicaciones a la escucha de clientes, sino lasconexiones ya creadas.

25

Page 26: Curso Maquinas Virtuales y Seguridad de Redes

26

Practica 3.2: El protocolo HTTPUn proxy hace uso de la cabecera de capa 7 (protocolo de aplicacion) para decidir como ac-

tuar2. Por tanto, para aprender lo que podemos configurar, lo primero es entender la cabecera delprotocolo.

• En Debian Cliente simula un “servidor Web” utilizando:

nc -lp 80

Esto abre el puerto 80 (web) a la escucha (compruebalo con netstat -tlnp en otra consola)y nos mostrara por pantalla todo lo que envıe el cliente.

• En Ubuntu, abre un navegador y conectate a la IP de Debian Cliente. No se cargara nada,pero el navegador se queda a la espera de la respuesta.

• Vuelve a Debian Cliente y observa la salida. Es la cabecera HTTP enviada por el navegadorWeb para solicitar la pagina principal al “servidor” ejecutandose en Debian Cliente.

GET / HTTP/1.1Host: 10.0.n.3User-Agent: Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 115Connection: keep-alive

Tras la ultima linea (Connection: keep-alive) habra otra mas en blanco, que indica “finde cabeceras”, e indica al “servidor” que ya puede empezar a contestar.

• Interpreta las cabeceras. ¿Que crees que significan?

• Si el navegador no ha perdido la paciencia y ha cerrado la conexion, puedes contestarle.Escribe en Debian Cliente la respuesta con una “pagina Web”3:

<html><head><title>HACKER!</title></head><body><h1>Soy un hacker!</h1>

</body></html>

2Tambien puede, naturalmente, usar informacion de las capas inferiores.3En realidad en este ejemplo estamos haciendo un uso indebido del protocolo HTTP porque no enviamos

“cabecera de capa 7”; pero los navegadores son permisivos :-)

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 27: Curso Maquinas Virtuales y Seguridad de Redes

Tema 3: Proxies web 27

Termina pulsando <Ctrl>-C.

• Repite el ejercicio poniendo en el navegador http://10.0.n.2/index.html. ¿Notas algunadiferencia en la solicitud recibida en Debian Cliente?

Practica 3.3: Instalando y probando squidSquid es el proxy Web por excelencia del mundo del software libre.

• Instala squid en Debian Servidor:

apt-get install squid

• Comprueba, con netstat -tlnp, que squid se ha lanzado escuchando en el puerto 3128.

• Configura el navegador en Firefox para que utilice a Debian Servidor como proxy. La opcionesta un poco oculta. Ve al menu Editar - Preferencias, luego a la categorıa Avanzado, pestanaRed, y pulsa sobre el boton Configuracion... en la seccion de Conexion4. Pon la IP de DebianServidor, el puerto 3128, y marca “Usar el mismo proxy para todo”5:

• Conectate a www.google.com. Puedes ver que el proxy esta funcionando porque rechaza laconexion con un mensaje de acceso denegado.

• Configura tanto el Firefox como el Internet Explorer del anfitrion para que usen tambien elproxy (Herramientas - Opciones de Internet, Conexiones, Configuracion de LAN).

• ¿Como forzarıas a los usuarios de la red interna a usar el proxy?

Practica 3.4: El protocolo HTTP con ProxySi ponemos un proxy, no es suficiente con que el navegador nos indique en la linea GET el recurso

(pagina) que quiere conseguir. Tambien necesitamos decirle el servidor. Compruebalo:

• En Debian Servidor, deten el demonio de squid:

4Algunas versiones lo tienen en el menu Herramientas en lugar de en Editar.5Para las pruebas que realizaremos en el curso, esto ultimo no es necesario, pero sı es habitual en un uso comun

de un proxy.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 28: Curso Maquinas Virtuales y Seguridad de Redes

28

Figura 3.1: Configuracion del proxy en Firefox

# /etc/init.d/squid stop

• Utiliza nc para pasarte por el:

# nc -lp 3128

• Conectate de nuevo a www.google.com desde Ubuntu. En esta ocasion se congela esperandola respuesta “del proxy”.

• Vuelve a Debian Servidor y observa la salida:

GET http://www.google.com/ HTTP/1.1...

• Pulsa <Ctrl>-C para cancelar, y lanza de nuevo squid.

# /etc/init.d/squid start

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 29: Curso Maquinas Virtuales y Seguridad de Redes

Tema 3: Proxies web 29

Practica 3.5: Definiendo ACLsEn squid se definen listas de control de acceso (ACL, Access Control List), de manera que ante

una nueva solicitud HTTP, se mira a que ACLs pertenecen. Una misma solicitud puede pertenecera varias. Ejemplos de ACL son:

• Venir de un ordenador del profesor (IP origen)

• Ir a un servidor especıfico (por ejemplo www.marca.es o www.facebook.com).

• Realizarse con Internet Explorer.

• Realizarse entre las 10:15 y las 10:35 de la manana.

El formato para especificar una ACL en squid es:

acl <nombre> <tipo> (cadena|"fichero")+

• <nombre>: nombre de la ACL. Por ejemplo ordenaProfe, destinoRestringido, IExplorero horarioRecreo.

• <tipo>: tipo de la ACL. Indica que parametro de la solicitud HTTP se mirara para sabersi pertenece o no a la ACL. Por ejemplo IP origen (src), nombre DNS destino (dstdomain),identificador del navegador (browser) o time.

• Parametros especıficos del tipo. Por ejemplo las IPs de los ordenadores de los profesores, losnombres DNS de los servidores restringidos, el identificador del navegador explorer, o el rangode horas. Se pueden poner simultaneamente varios parametros (se consideran unidos por unaO logica), o un nombre de fichero entre comillas, que contendra en lineas independientes cadaparametro.

El fichero de configuracion de squid (/etc/squid/squid.conf) contiene numerosos ejemploscomentados (alrededor de la linea 430) a modo de documentacion. Tambien crea algunas ACLconcretas:

acl all src 0.0.0.0/0

Crea las siguientes ACL, definiendolas en la zona del fichero donde estan las ACL de ejemplo.

• redInterna: aquellas solicitudes que vengan de la red interna, 10.0.n.0/24.

• redAula: aquellas solicitudes que vengan de la red del aula.

• ipPrivilegiada: aquellas solicitudes que vengan de Debian Cliente.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 30: Curso Maquinas Virtuales y Seguridad de Redes

30

• redSocial: las consultas a *.facebook.com, *.tuenti.com, *.twitter.com y *.myspace.com6.

• IExplorer: las realizadas desde Internet Explorer.

Relanza squid (/etc/init.d/squid reload) y prueba a conectarte a Internet de nuevo desdeUbuntu. ¿Funciona?

Practica 3.6: Gestion de permisosLas ACL sirven para categorizar las solicitudes, pero no toman decisiones sobre ellas. Para eso

estan los operadores sobre ACL:

<tipo operador> allow|deny ([!]<listaACL>)+

• <tipo operador>: aspecto a decidir sobre la consulta. Por ejemplo realizarla o no, mandarlaa un proxy auxiliar, limitarla el ancho de banda, etcetera.

• allow|deny: uno de los dos, para permitir o denegar.

• Lista de nombres de ACL separadas por espacio. Para que se aplique el operador (y sudecision) la solicitud debe pertenecer a todas, por lo que se consideran enlazadas con una Ylogica. Si se antecede un nombre de ACL con ! se considerara cierto la no pertenencia a laACL.

El operador mas importante es http_access que sirve para decidir si cursar o no la solicitud.De nuevo, en el fichero de configuracion se proporcionan varios ejemplos. La que mas nos interesaes la ultima:

http_access deny all

que deniega el acceso a la ACL all a la que, como vimos, pertenecıan las solicitudes realizadasdesde la IP origen 0.0.0.0/0, es decir todas.

El orden de colocacion de las http_access es importante. Por tanto, las reglas que pongamosdeberan ir antes que esta.

Realiza las siguientes configuraciones. Configuralas cada una por separado, relanzando squiden cada una y probandolas.

• Permitir el uso del proxy unicamente desde la red interna.

• Permitir el uso del proxy a la red del aula unicamente desde Internet Explorer, y a la redinterna desde cualquier navegador.

6En la ACL no hace falta especificar el comodın.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 31: Curso Maquinas Virtuales y Seguridad de Redes

Tema 3: Proxies web 31

• Permitir la salida a la red interna salvo a las redes sociales. La IP de Debian Cliente(ipPrivilegiada, sin embargo, tendra que poder salir a cualquier sitio7.

Quita el proxy en los navegadores del anfitrion.�

Practica 3.7: Otras reglas

• Impedir que se descarguen ficheros .iso.

• Evitar que los enlaces pulsados desde Google funcionen (referer_regex).

• Permitir que funcione todo los sabados y domingos

Practica 3.8: Proxy, encaminamiento y DNS

Configura squid para que se pueda utilizar desde la red interna, pero impidiendo el uso a lasredes sociales.

• En Ubuntu, renombra (o borra) el fichero /etc/resolv.conf. Intenta resolver cualquiernombre (por ejemplo, haciendo ping a www.google.com). ¿Funciona?

• Intenta navegar desde Ubuntu. ¿Funciona? ¿Por que?

• Recupera el fichero /etc/resolv.con original de Ubuntu y comprueba que puedes volver ahacer ping.

• En Debian Servidor, deshabilita el encaminamiento IP. Desde Ubuntu, prueba a hacer pinga www.google.com. ¿Funciona?

• Vuelve a intentar navegar desde Ubuntu. ¿Funciona? ¿Por que?

• Haz netstat -tnp en Debian Servidor. ¿Hay alguna diferencia con la salida sin proxy?

• Restaura el reenvıo IP en Debian Servidor.

7Para probar esta, tendras que cambiar la IP de Ubuntu por la de Debian Cliente (hacerte pasar por el), oinstalar un navegador en consola en Debian Cliente como lynx.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 32: Curso Maquinas Virtuales y Seguridad de Redes

32

Practica 3.9: Proxy transparenteTener que configurar el proxy en todos los navegadores de los usuarios puede ser tedioso. Para

evitarlo, podemos usar un proxy transparente:Usando iptables podıamos redirigir las solicitudes cambiando la IP y puertos destino. Pode-

mos ası redirigir cualquier cosa que intente salir por el router llevando puerto destino 80, al puerto3128 local.

• Desconfigura el proxy en Firefox de Ubuntu para que salga directamente a la Web.

• Usando iptables en Debian Servidor, consigue que cualquier cosa que intente salir al puerto80 (Web) sea redirigido al 3128, donde espera squid:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80-j REDIRECT --to-port 3128

• Ahora el navegador enviara la solicitud normal (sin el nombre de la maquina en la parteGET). Se lo avisamos. Busca en /etc/squid/squid.conf la linea http_port 3128 y ponla:

http_port 3128 transparent

Esto hara que squid saque la maquina destino del campo Host de la solicitud.

• Comprueba que puedes navegar desde Ubuntu. Para comprobar que, efectivamente, estasusando el proxy, intenta conectarte a una de las redes sociales denegadas.

• En Ubuntu, renombra (o borra) el fichero /etc/resolv.conf. ¿Sigue funcionando ahora?¿Por que?

Practica 3.10: Almacenamiento de la cacheLas paginas y ficheros descargados por squid se almacenan localmente con la esperanza de que

vuelvan a ser solicitadas y se produzca un exito de cache. El lugar y el modo en el que se mantienela cache lo especifica la directiva cache_dir (alrededor de la mitad de /etc/squid/squid.conf):

cache_dir ufs /var/spool/squid 100 16 256

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 33: Curso Maquinas Virtuales y Seguridad de Redes

Tema 3: Proxies web 33

• ufs: modo de guardar la cache. Hace uso de ficheros y directorios normales (UFS=Unix FileSystem). Una opcion algo mejor es AUFS, que realiza accesos asıncronos en varios demonios,pero consume mas recursos.

• /var/spool/squid: ruta del directorio. Debe existir y ser escribible para squid.

• 100: tamano en MB que se usara para la cache. ¡¡El valor por defecto es muy pequeno!!En funcion del disco duro, es normal ampliarlo. Si usas una particion especıfica, no pongasnunca el tamano completo (deja libre alrededor de un 20%).

• 16: numero de directorios del primer nivel.

• 256: numero de directorios del segundo nivel.

• Mira el contenido de /var/spool/squid. ¿Reconoces algun fichero que te hayas descargado?

• Crea un nuevo directorio para cache (squid soporta varios) con modelo AUFS, en /var/spool/aufscon 500 MB (y los mismos subdirectorios).

Practica 3.11: Ficheros de registroSquid registra su actividad en tres ficheros, todos en /var/log/squid:

• access.log: el fichero en el que se anotan todos los accesos a squid. Es el que podemos usarpara saber quien esta navegando, y donde. El primer numero indica la hora en la notacionUnix. Para saber cual es:

date -d @<numero>

• cache.log: anotaciones sobre el funcionamiento de squid.

• store.log: informacion sobre el uso de disco y la cache en memoria.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 34: Curso Maquinas Virtuales y Seguridad de Redes

34

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 35: Curso Maquinas Virtuales y Seguridad de Redes

Tema 4

SSH

Practica 4.1: Instalacion del servidor de SSHEn Debian Servidor, instala el servidor de SSH:

# apt-get install ssh

El instalador nos informa de que se genera una pareja de claves RSA y otra DSA. Posterior-mente, el servidor de SSH se lanzara automaticamente.

Las parejas de clave publica/privada se guardan en /etc/ssh.

• ssh host rsa key* guardan la clave RSA.

• ssh host dsa key* guardan la clave RSA.

Las claves son aleatorias; la parte publica y privada estan relacionadas entre sı. Compara lospermisos de los ficheros de la parte publica (extension .pub) y parte privada (sin extension). ¿Tienesentido?

Practica 4.2: Primera conexion: comprobando el fingerprintVamos a conectarnos desde Debian Cliente a Debian Servidor. El cliente de SSH se instala por

defecto en Debian, y no hay que instalar nada.Antes, y solo por motivos pedagogicos explicados mas adelante vamos a modificar un aspecto

de la configuracion del cliente:

• En Debian Cliente, abre el fichero /etc/ssh/ssh config.

35

Page 36: Curso Maquinas Virtuales y Seguridad de Redes

36

• En la parte final, busca la directiva HashKnownHosts y ponla en No.

Desde Debian Cliente, conectate por primera vez a Debian Servidor:

$ ssh 10.0.n.1The authenticity of host ’10.0.n.1 (10.0.n.1)’ can’t be established.RSA key fingerprint is ac:d7:e5:c0:f0:c7:c0:bd:d7:4d:ed:11:7c:cb:cf:ae.Are you sure you want to continue connecting (yes/no)?

El servidor nos envıa su clave publica completa (RSA en este caso), que el cliente no conoce.Nos pide que la validemos, proporcionandonos el fingerprint (resumen) de dicha clave publica.

Es responsabilidad del administrador del servidor dar a conocer a todos los clientes ese finger-print. Es responsabilidad de los clientes comprobarla.

Como administradores, para obtener el fingerprint en Debian Servidor:

$ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key2048 ac:d7:e5:c0:f0:c7:c0:bd:d7:4d:ed:11:7c:cb:cf:ae /etc/ssh/ssh_host_rsa_key.pub

Ahora como clientes, comprobamos que son iguales, y aceptamos. El cliente nos preguntadirectamente la contrasena (sin el usuario). El nombre de usuario con el que nos conectamos es, sino se dice lo contrario, el mismo con el que hemos lanzado la sesion local.

Si hubieramos querido un usuario diferente, en el cliente:

$ ssh [email protected]

o

$ ssh -l usuario 10.0.n.1

Cierra la sesion SSH con el servidor que tienes en Debian Cliente.�

Practica 4.3: El fichero known hosts

• Vuelve a conectarte desde Debian Cliente a Debian Servidor. Ahora no te pedira que com-pruebes el fingerprint de la clave publica.

• Recuerda desconectarte de Debian Servidor. Una vez de vuelta en Debian Cliente abre elfichero ~/.ssh/known_hosts. Comprueba que aparece anotada la IP de Debian Cliente, yque tiene asociada una clave publica. Es la recibida de Debian Servidor, y se usa en el restode conexiones para comprobarla automaticamente.

• Conectate por SSH a los Debian Servidor de otros companeros. Tendras que validar otrasclaves publicas.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 37: Curso Maquinas Virtuales y Seguridad de Redes

Tema 4: SSH 37

• Comprueba como tu fichero known hosts ha crecido.

• Borra la linea con la clave de Debian Servidor (10.0.n.1 que deberıas ver la primera.

• Conectate de nuevo a Debian Servidor. Al haber desaparecido su clave, el cliente te pide quevuelvas a validarla.

Practica 4.4: Encriptacion del fichero known hostsEn el fichero known hosts podemos ver los nombres o IP de los servidores que conocemos porque

modificamos las opciones anteriormente, pero esto puede ser inseguro porque es un “rastro” de a queservidores SSH se ha conectado un usuario. Vamos a ver como funcionaran las cosas normalmente,si no hubieramos hecho el cambio.

• Borra el fichero known hosts de Debian Cliente

• Abre el fichero /etc/ssh/ssh config.

• En la parte final, busca la directiva HashKnownHosts y ponla de nuevo en Yes.

• Conectate por SSH a Debian Servidor. Volvera a pedirte que valides la clave publica.

• Desconectate de nuevo, y conectate a varios de los Debian Servidor de tus companeros.

• Comprueba finalmente el contenido de tu fichero known hosts. No podras identificar a queIP pertenece cada clave publica.

Practica 4.5: Manipulando un known hosts encriptadoUn known hosts con el nombre/IP de los servidores encriptado nos impide saber si conocemos

o no la clave publica de un servidor, o incluso borrarla. Para saber si la conocemos usamosssh-keygen con el parametro -F (de Find).

$ ssh-keygen -F 10.0.n.1# Host 10.0.n.1 found: line 1 type RSA|1|rStrfKI5TFLSadM7CLcbHj29o4g=|s3mvA3W+lzfSSdyorRRB7bCzN+4= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuBLOPgu+2MwyhDWtjv4GEJQL3ZuCAVZw79hgEWS5BV+dauLXt/GNGKNFGCury8JnICnupYDlC+UzBzS7mpshlmsaqgk1ScJjWbTz1zw2+YyIarLQZ9iq5oowKFZ+eZi4DVkn600JHcP59GTdY+WjpVSGGihc3NObeB6lR01Y4yfx6fboTZ/PoX65wbZQh253Rhsh1hcKkw1IjILl+YKMXrYBmGtCH5R8kMrpY1P2BYtCI4D44WqnM/cDSQFsReZdszZqMFjgf9I07Pn3tPPnkZ/P/sHy9gLDze/dGgdtgokms3b5QfymiOMspm1gWk0xGbC0/WWJN2L1AF16eHLt4Q==

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 38: Curso Maquinas Virtuales y Seguridad de Redes

38

Para borrar una clave publica:

$ ssh-keygen -R 10.0.n.1/home/alumno/.ssh/known_hosts updated.Original contents retained as /home/alumno/.ssh/known_hosts.old

Si tenemos un fichero known hosts con los nombres de los servidores sin encriptar (porque lohemos creado con una version antigua del cliente), podemos encriptarlo con:

$ ssh-keygen -H/home/alumno/.ssh/known_hosts updated.Original contents retained as /home/alumno/.ssh/known_hosts.old

Debido al funcionamiento del almacen de claves publicas, la conexion al mismo servidor usandodiferentes IP o diferentes nombres se considera distinta. Prueba a conectarte desde Debian Clientea Debian Servidor usando la IP externa y veras que te pide que compruebes la clave publica otravez.

Practica 4.6: Fingerprint en bubble babbleAlgunos clientes de SSH consideran que comprobar el fingerprint es incomodo para los usuarios

porque tiene muchos numeros y es facil equivocarse.Se han inventado un formato diferente para mostrar el fingerprint que llaman bubble babble que

solo usa letras. Para averiguar el fingerprint de una clave en el servidor:

$ ssh-keygen -B -f /etc/ssh/ssh_host_rsa_key2048 xitot-larit-gumet-gygim-sozev-vyned-cigeb-sariv-tekuk-badus-bexax /etc/ssh/ssh_host_rsa_key.pub

Practica 4.7: La importancia del fingerprint: interceptando una conexionSSH

Para comprobar la importancia de comprobar siempre la clave publica cuando nos lo solicita elcliente, vamos a interceptar una conexion SSH.

• Desde Debian Cliente, conectate por SSH al Debian Servidor del profesor. Comprueba laclave publica si no la tenıas ya almacenada.

• Cierra la sesion.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 39: Curso Maquinas Virtuales y Seguridad de Redes

Tema 4: SSH 39

• En Debian Servidor, anade una regla en iptables para redirigir todo el trafico SSH salientehacia tu servidor de SSH. Eso “enganara” a los clientes de tu red interna, al conectarles contu servidor cuando creen que se conectan a cualquier otro:

# iptables -t nat -A PREROUTING -i eth1 -p tcp --sport 1024:65535--dport ssh -j REDIRECT --to-port ssh

• Desde Debian Cliente, vuelve a conectarte por SSH al Debian Servidor del profesor:

$ ssh 10.0.m.1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that the RSA host key has just been changed.The fingerprint for the RSA key sent by the remote host is20:13:ff:d8:2a:6e:d5:42:ce:dd:c4:2a:76:27:08:cf.Please contact your system administrator.Add correct host key in /home/alumno/.ssh/known_hosts to get rid of this message.Offending key in /home/alumno/.ssh/known_hosts:3RSA host key for 10.0.m.1 has changed and you have requested strict checking.Host key verification failed.

Practica 4.8: Tunel SSHEl canal seguro creado por SSH puede utilizarse para transportar datos adicionales ademas de

los de la sesion interactiva (terminal).

• Lanza Wireshark en Ubuntu (o en el anfitrion). Inicia una captura de trafico poniendo comofiltro host <ipDebianServidorProfesor>

• Desde Ubuntu, conectate en el navegador al Debian Servidor del profesor, que tendra lanzadoApache.

• Vuelve a Wireshark, deten la captura, y comprueba que puedes ver el trafico en claro.

• Lanza de nuevo Wireshark con el mismo filtro.

• Desde Ubuntu, conectate por SSH al Debian Servidor del profesor, creando ademas un tunelSSH, “uniendo” un TCP puerto local (por ejemplo el puerto 5555) con el puerto 80 delservidor:

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 40: Curso Maquinas Virtuales y Seguridad de Redes

40

$ ssh -L 5555:localhost:80 <ipDebianServidorProfesor>

• Desde Ubuntu, conectate con el navegador a tu puerto local 5555.

• Veras aparecer la pagina Web del servidor. Deten la captura, y comprueba el trafico. Verasque no hay conexion con el puerto 80, y solo hay trafico SSH.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 41: Curso Maquinas Virtuales y Seguridad de Redes

Tema 5

VPN

Practica 5.1: Creacion de una VPN: el clienteVamos a conectarnos a traves de una VPN con el Debian Servidor del profesor desde Ubuntu.

Lo primero que haremos sera una prueba de que las cosas funcionan normalmente antes de la VPN:

• Asegurate de que desde Ubuntu puedes hacer ping a la IP interna del Debian Servidor delprofesor.

• Pon Wireshark en el anfitrion, para ver esas solicitudes de ping sin encriptar.

• Deten la captura en Wireshark.

• Mira los interfaces de red y la tabla de rutas de Ubuntu. Deberıas ver un unico interfaz dered y las rutas habituales.

• Utilizando tracepath, comprueba el camino que sigues para llegar a esa IP, para ver que tuordenador utiliza la puerta de enlace que era de esperar.

tracepath 10.0.m.1

Ahora configura la VPN en Ubuntu usando el asistente.

• Pulsa sobre el icono de configuracion rapida de la red en la barra de tareas:

Figura 5.1: Configuracion de la red

41

Page 42: Curso Maquinas Virtuales y Seguridad de Redes

42

Figura 5.2: Configuracion de la VPN

• En el menu desplegable, selecciona Configurar VPN...

• En la ventana, pulsa “Anadir” para que salte el asistente de nueva VPN.

• Escoge un tunel PPTP en el tipo de conexion VPN

• Establece como nombre de la VPN “VPN Profe”. Pon la IP externa del Debian Servidor delprofesor, alumno como usuario, y esspeevpn como contrasena.

Figura 5.3: Parametros generales

• Pulsa sobre el boton de las opciones avanzadas, y marca “Use Point-to-Point encryptation(MPPE)”.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 43: Curso Maquinas Virtuales y Seguridad de Redes

Tema 5: VPN 43

Figura 5.4: Parametros avanzados

• Cierra el asistente. De nuevo sobre el icono de la barra de herramientas, selecciona en elmenu desplegable la nueva VPN para conectarte.

Repite las pruebas anteriores para notar las diferencias.

• Al hacer ping a la IP interna del Debian Servidor del profesor, en Wireshark veremosunicamente trafico encriptado (y el ping funcionara).

• En los interfaces de red aparece uno nuevo (ppp0) que es el que simula una tarjeta de rednueva “conectada” directamente a Debian Servidor a traves del tunel. Recibimos una nuevaIP en dicho interfaz (elegida por el servidor), con su propia puerta de enlace. La tablade rutas muestra que ya no utilizamos nuestro Debian Servidor como puerta de enlace pordefecto, sino la del tunel. Nuestro Debian Servidor solo se usa para llegar al servidor deVPN.

• La ejecucion de tracepath muestra la diferencia en el camino.

Desconectate de la VPN y comprueba que todo vuelve a la normalidad.�

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın

Page 44: Curso Maquinas Virtuales y Seguridad de Redes

44

Figura 5.5: Conexion VPN

Practica 5.2: Instalacion del servidorVamos a instalar en Debian Servidor un servidor de VPN por PPTP, al que se conectara un

companero.

• Instala el servidor:

apt-get install pptpd

• Modifica la configuracion del servidor en /etc/pptpd.conf para indicar que IP utilizarascomo puerta de enlace, y que IPs daras a los clientes. Para eso, al final del fichero:

localip 172.16.n.1remoteip 172.16.n.10-50

• Abre el fichero de configuracion del demonio de PPP cuando lo utiliza PPTP, que puedesencontrar en /etc/ppp/pptpd-options. Fijate en el valor de la directiva name, que es pordefecto pptpd.

• Fijate tambien que se rechazan PAP, CHAP y MSCHAP como metodos de autentificacion,de modo que el servidor solo soportara MSCHAP-v2, con encriptacion de 128 bits.

• Anade la configuracion del servidor de nombres:

ms-dns <IP DNS aula>

• Establece la contrasena de los clientes. Eso esta en el fichero /etc/ppp/chap-secrets. Esuna “tabla” con cuatro columnas:

– Nombre del usuario que quiere autentificarse. Ponemos alumno

– Nombre del servidor. En este caso, la especificada en la directiva name de pptpd-options,pptpd.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)Pedro Pablo Gomez Martın

Page 45: Curso Maquinas Virtuales y Seguridad de Redes

Tema 5: VPN 45

– Contrasena del usuario. Ponemos esspeevpn.

– La IP que daremos a ese usuario (util para asignaciones fijas). Asignamos una aleatoriadel ranto configurado antes; para eso dejamos un *.

En resumen:

alumno pptpd esspeevpn *

• Relanzamos el servidor:

/etc/init.d/pptpd restart

Cuando nuestro companero haya creado su VPN, configuramos una nueva conexion por VPNen Ubuntu, nos conectamos a ella y la probamos.

Curso de Maquinas Virtuales y Seguridad en Redes (Septiembre 2010)

Pedro Pablo Gomez Martın