Www-enunciado

De EDUC@REDES
Saltar a: navegación, buscar


Ejercicio práctico sobre WWW: ENUNCIADO

OBJETIVOS

Con este escenario se va a estudiar el acceso de un cliente a un servidor web con el protocolo HTTP a través de un proxy y el ahorro de tráfico hacia el exterior de su subred que eso conlleva.

DESCRIPCIÓN DEL ESCENARIO

El escenario está compuesto de dos subredes interconectadas por un router. Adicionalmente disponemos de conexión con Internet a través de nuestro host.

En una de las subredes hay un servidor web al que se intenta acceder desde clientes de la segunda subred, en algunos casos a través de un proxy que se encuentra en su misma subred.

Figura1 www.jpg
Figura 1: Topología del escenario WWW

Si ha leído la sección www: Antes de empezar podrá pasar a estudiar este escenario.

NOTAS

  • Si decide resolver un apartado por separado (y no de manera secuencial como se aconseja, en principio), inicie la simulación del archivo www.xml:
root@host# sudo su (para trabajar como root)
root@host:/home/usuario# cd /vnml/www
root@host:/home/usuario/vnuml/www# vnumlparser.pl -t www.xml -v -u root
y ejecute este comando para todos los apartados anteriores al que desee estudiar:
root@host:/home/usuario/vnuml/www# vnumlparser.pl -x aptdo1@www.xml -v
root@host:/home/usuario/vnuml/www# vnumlparser.pl -x aptdo2@www.xml -v
...
A continuación puede proceder como se indica en el enunciado del apartado correspondiente.
  • A partir de ahora se sustituirá root@host:/home/usuario/vnuml/www# por root@host# con el fin de no recargar el enunciado.
  • Ignore las líneas informativas que resultan de la ejecución de cada apartado, no son relevantes para la resolución de esta práctica.
  • Puede observar el tráfico que atraviesa la red de los clientes con Ethereal en modo gráfico directamente y en tiempo real con:
root@host# ethereal -i red1
Y dentro de Ethereal:
> Capture > Interfaces
Aparecerá una lista de interfaces, de entre los cuales los interfaces "red1" y "red 2" serán los utilizados a lo largo de esta práctica:

Figura2 www.jpg
Figura 2: Interfaces del escenario

> red1 > Prepare (red1) > Capture Filter: port not 53; Capture File: fichero.cap > Start
> red2 > Prepare (red2) > Capture Filter: port not 53; Capture File: fichero.cap > Start
Gracias a estas nuevas interfaces, puede evitarse guardar las capturas en ficheros de las máquinas virtuales y su posterior copia remota.

Apartado 1: Consulta directa a un servidor HTTP.

En primer lugar la comunicación se realiza directamente entre cliente y servidor a través de un router (sin proxy). Puede capturarse el tráfico enviado y recibido en cada una de las máquinas con un analizador de protocolos como Ethereal. Este es el escenario más simple de web.

  • Inicie la simulación del archivo www.xml:
root@host# sudo su (para trabajar como root)
root@host# cd /vnml/www
root@host# vnumlparser.pl -t www.xml -v -u root
  • Regístrese en cada máquina virtual:
r1/c1/c2/p1/s1# login: root
r1/c1/c2/p1/s1# password: xxxx

Figura3 www.jpg
Figura 3: Ventanas de las máquinas virtuales


  • Escriba el siguiente comando en su PC para configurar el servidor web:
root@host# vnumlparser.pl -x aptdo1@www.xml -v
  • Arranque Ethereal en el servidor (s1):
s1# tethereal -i eth1

NOTA: Puede guardar la captura en un fichero con el comando:

s1# tethereal -i eth1 -S -w servidor1.cap

recuperarlo desde su PC:

root@host# scp p1:servidor1.cap .

y visualizarlo con Ethereal:

root@host# ethereal servidor1.cap
  • Para facilitar el seguimiento de la traza del tráfico escriba en la casilla de Filter:
!dns
  • Pida la página web del servidor desde el cliente (c1):
c1# wget http://192.168.2.2
  • Observe y describa el tráfico que recibe y transmite el servidor.

Apartado 2: Consulta a un servidor HTTP a través de un proxy.

Para este apartado se utilizará una nueva máquina de la red (p1) que se configura como proxy. Ejecutamos también en ella un analizador de protocolos. Cuando los clientes que tengan configurado el proxy hagan una petición al servidor, accederán en primer lugar a su proxy de manera transparente, porque en caso de que éste conserve una copia de la página deseada, no será necesario llegar hasta el servidor HTTP. Otras consideraciones adicionales se estudiarán más adelante.

  • Escriba el siguiente comando en su PC para configurar el proxy:
root@host# vnumlparser.pl -x aptdo2@www.xml -v
  • Para asignar el proxy al cliente 1 escriba en el cliente 1 (c1):
c1# export http_proxy='http://192.168.1.3:3128'
  • Arranque Ethereal en el servidor (s1) y en el proxy (p1):
s1# tethereal -i eth1
p1# tethereal -i eth1

NOTA: Recuerde que puede guardar las capturas obtenidas en ficheros para analizarlas con más detalle posteriormente.

  • Pida la página web del servidor desde el cliente (c1):
c1# wget http://192.168.2.2
  • Repita la petición anterior pasados pocos segundos.
  • Observe el tráfico que reciben y transmiten tanto servidor como proxy y explique lo que ocurre. Analice la diferencia entre las dos peticiones de la página web.
  • Deje pasar unos 5 minutos y repita el "wget" del cliente. ¿Qué ha cambiado respecto a la última vez? ¿Qué puede decir de la interacción del proxy con el servidor web en este caso? ¿Qué ocurriría si la página web hubiera sido modificada desde la última consulta? Haga otra petición inmediatamente después y describa lo que observa.

Apartado 3: Consulta a un servidor HTTP tras borrar la caché del proxy.

Existe la posibilidad de borrar los directorios de caché donde el proxy almacena las copias de las páginas ya atendidas. En este caso el proxy se verá obligado a acceder al servidor para devolver la página solicitada por el cliente. Veremos este efecto ejecutando los comandos que se explican a continuación.

  • Borre la caché del proxy con el siguiente comando desde su PC:
root@host# vnumlparser.pl -x aptdo3@www.xml -v
  • Asigne el proxy al cliente 1 si no lo hizo anteriormente:
c1# export http_proxy='http://192.168.1.3:3128'
  • ¿Qué cabe esperar de la captura de una nueva petición? Compruebe que su suposición es cierta.

Apartado 4: Control de acceso a un proxy.

En un proxy con el servicio "squid", (como el usado en este escenario), podemos controlar el acceso de los clientes al mismo: podemos denegar o permitir el acceso de un usuario concreto o de un grupo de usuarios. Esta es la funcionalidad que trata de reflejarse en este punto.

Para este apartado se trabajará con un segundo cliente (c2), en la misma subred que el cliente 1.

Repita el proceso del Apartado 2 aplicando al cliente 2 los comandos necesarios y realizando una sóla petición desde cada uno de los clientes:

root@host# vnumlparser.pl -x aptdo4@www.xml -v
c1# export http_proxy='http://192.168.1.3:3128'
c2# export http_proxy='http://192.168.1.3:3128'
s1# tethereal -i eth1
p1# tethereal -i eth1
c1# wget http://192.168.2.2
c2# wget http://192.168.2.2

El acceso al proxy de uno de los clientes ha sido denegado, pero los dos tienen configurado el proxy para acceder al servidor.

  • ¿Cuál de los dos clientes tiene el acceso denegado? Para ese cliente: ¿recibe la página web accediendo de forma directa al servidor?

Apartado 5: Política estricta de caché.

Gracias a módulos cargables en un servidor proxy "squid" podemos definir nuevas políticas para la gestión de las peticiones. En este apartado se ilustra una de ellas. El objeto es que se identifique observando el comportamiento del proxy al recibir peticiones de un cliente.

  • Ejecute la siguiente secuencia de comandos:
root@host# vnumlparser.pl -x aptdo5@www.xml -v
c1# export http_proxy='http://192.168.1.3:3128'
s1# tethereal -i eth1
p1# tethereal -i eth1
  • Pida la página del servidor varias veces con:
c1# wget http://192.168.2.2
  • Para este apartado se ha borrado el contenido de la caché, por lo que debe observar que en la primera petición el proxy busca en el servidor la página solicitada. Se ha configurado una nueva política de caché en cuanto a la actualización de las copias almacenadas en el proxy. A partir de las siguientes capturas, ¿qué podría decir de esta política?

Apartado 6: Nuevo campo para la cabecera HTTP (Cache-control="no-store").

Otra forma de definir una nueva política es modificando las cabeceras de las respuestas HTTP que el servidor envía al proxy cuando éste le pide las páginas. El valor del campo Cache-Control de la cabecera es el que exige al proxy que tenga un comportamiento determinado a la hora de manejarlas. en los apartados 6 y 7 se estudian dos posibilidades.

  • Repita la secuencia del Apartado 5:
root@host# vnumlparser.pl -x aptdo6@www.xml -v
c1# export http_proxy='http://192.168.1.3:3128'
s1# tethereal -i eth1
p1# tethereal -i eth1
  • Pida la página del servidor varias veces con:
c1# wget http://192.168.2.2

NOTA: en este apartado también se ha borrado la caché.

  • En este caso el servidor está imponiendo una política determinada al proxy para cachear sus páginas. Observe, sobre la captura en Ethereal, la cabecera HTTP de la primera vez que el servidor envía la página web. En particular fíjese en el campo Cache-Control. A partir de su contenido y las subsiguientes capturas, ¿qué podría decir de la nueva política?

Apartado 7: Nuevo campo para la cabecera HTTP (Cache-control="no-cache").

Para este apartado se ha añadido un campo a la cabecera de toda respuesta por parte del servidor: Cache-Control="No-Cache". Según la especificación de HTTP, cuando un sevidor incluye este campo en su respuesta, ésta no puede ser usada por una caché, (en nuestro caso la caché del proxy), para satisfacer peticiones subsiguientes de la misma página sin la revalidación exitosa del propio servidor origen. Esto quiere decir que el proxy hará siempre un Get condicional hacia el servidor a pesar no no haber transcurrido el tiempo configurado para que la copia pueda considerarse obsoleta.

  • ¿Cuál de los dos apartados anteriores (5 y 6) tiene una política idéntica?
  • Ejecute el apartado:
root@host# vnumlparser.pl -x aptdo7@www.xml -v
c1# export http_proxy='http://192.168.1.3:3128'
s1# tethereal -i eth1
p1# tethereal -i eth1
  • Observe las capturas y las cabeceras de la misma forma que lo hizo en los dos apartados anteriores. ¿Se corresponden con el comportamiento que se ha descrito para el valor "No-Cache"?

Apartado 8: Consulta a un servidor HTTP desde la Terminal y el Explorador del host.

Una funcionalidad muy útil de la herramienta VNUML es la posibilidad de añadir el host al escenario, de manera que se tenga acceso al exterior a través de su interfaz con Internet. Vamos a aprovechar esta prestación para analizar las interacciones con un servidor web virtual de la misma forma que se hizo con las máquinas virtuales, con las ventajas que supone disponer de todas las aplicaciones presentes en el host.

En este apartado utilizará la conexión de su host con el escenario. Para empezar utilizará el terminal del mismo.

NOTA: Para la realización de este apartado independientemente de los anteriores sólamente neceasitará ejecutar las secuencias de comandos de los apartados 1 y 2:

root@host# vnumlparser.pl -x aptdo1@www.xml -v
root@host# vnumlparser.pl -x aptdo2@www.xml -v

En caso de que la caché estuviera llena deberá ejecutar también el apartado 3:

root@host# vnumlparser.pl -x aptdo3@www.xml -v

Si va a seguir resolviendo el escenario de manera secuencial teclee:

root@host# vnumlparser.pl -x aptdo8@www.xml -v
  • En primer lugar, abra otra ventana con el terminal en modo root:
usuario@host# sudo su (requiere contraseña)
root@host#
  • Configure la variable de entorno http_proxy para que s1 sea el proxy asociado al host. Antes asegúrese de apuntar el valor previo.

Para ver su valor:

root@host# echo $http_proxy

Para actualizarlo:

root@host# export http_proxy='http://192.168.1.3:3128'
  • Comience a capturar desde el proxy y el servidor:
p1# tethereal -i eth1
s1# tethereal -i eth1

NOTA: Para este apartado se ha borrado la caché del proxy.

  • Pida la página del servidor web del escenario:
root@host# wget http://192.168.2.2
  • ¿Cuál es la secuencia de tráfico generada por la petición a nivel de protocolo HTTP? ¿Observa alguna diferencia respecto del comportamiento de los demás clientes del escenario?

A partir de este momento las peticiones se harán a través del Explorador del host. (En esta descripción se ha trabajado con un Firefox). Siga las siguientes instrucciones.

NOTA: A lo largo de este apartado cambiará parte de la configuración de su Explorador por lo que deberá apuntar su configuración previa para restaurarla al terminar el ejercicio.

Así mismo en este momento ya puede restaurar el valor de la variable de entorno http_proxy de su host, para que futuras peticiones no traten de redireccionarse al proxy del escenario:

root@host# export http_proxy=' ' (Si su máquina no tenía ningún proxy seleccionado)

  • Borre la caché del proxy como hizo en el tercer apartado:
root@host# vnumlparser.pl -x aptdo3@www.xml -v
  • Abra una ventana del Explorador.
    • Cuando se usa el Explorador, la variable de entorno http_proxy no tiene ningún efecto a la hora de encaminar las peticiones. Es necesario que configure el proxy desde su barra de herramientas. Por ejemplo con Firefox:
1. Edit > Preferences
2. Abra el panel "General" y haga click en "Connection Settings".
3. Seleccione "Manual proxy configuration" e introduzca:
HTTP proxy: 192.168.1.3
port:3128
4. En el campo "No proxy for": elimine "localhost".
Atención: recuerde apuntar los valores que normalmente utilice en todos esos campos. De este modo podrá restaurarlos cuando termine de estudiar el escenario. Si por ejemplo no tenía ningún proxy asignado vuelva a seleccionar "Direct connection to the Internet" y añada de nuevo "localhost" si era parte del campo "No proxy for".
  • En su Explorador normalmente las páginas que se van recibiendo son almacenadas en una carpeta especial (carpeta de caché) para una vista más rápida la siguiente vez que se visite la misma página. Para poder observar tráfico hacia el exterior de la red, (más adelante en este apartado), en peticiones posteriores a la primera puede seguir dos procedimientos:
  • Puede fijar la cantidad de espacio en disco utilizada para esa cache.En Firefox:
1. Edit > Preferences
2. Abra el panel "Privacy" y haga click en la lengüeta "Cache"
3. Rellene el campo "Use up to" con el número de Megabytes que desee asignarle.

Para el caso que nos ocupa una solución sería fijar ese tamaño a 0, para que ninguna página sea almacenada.

Atención: recuerde apuntar el valor que normalmente utilice en ese campo para restaurarlo cuando termine de estudiar el escenario.
  • También puede borrar su contenido. En Firefox:
1. Edit > Preferences
2. Abra el panel "Privacy" y haga click en la lengüeta "Cache"
3. Haga click en "Clear Cache Now".
  • Comience a capturar desde el proxy y el servidor:
p1# tethereal -i eth1
s1# tethereal -i eth1
  • Escriba en la barra de navegación de la ventana del Explorador http://192.168.2.2 (o si lo prefiere pinche sobre el enlace anterior con el botón derecho del ratón y seleccione "Open Link in New Window"). Con esto habrá hecho una petición de la página del servidor web del escenario.
  • Repetirá este procedimiento en varias ocasiones, borrando tras cada una como se ha indicado la caché del Explorador, (esto no será necesario si estableció el tamaño de la misma a 0 Megabytes). Compruebe la actuación de la caché del Explorador con una última petición. Para ello debe haber borrado la caché o haber asignando por ejemplo 5 Mbytes antes de la anterior petición.
  • ¿Cuál es la secuencia de tráfico generada por la petición a nivel de protocolo HTTP? ¿Observa alguna diferencia respecto del comportamiento de los demás clientes del escenario o del host desde su terminal?
  • Borre de nuevo la caché del Explorador o trunque su tamaño a 0.
  • Ejecute la siguiente instrucción:
vnumlparser.pl -x aptdo8B@www.xml -v
  • Pida de nuevo la página web del servidor. ¿Qué cambios observa en la captura del tráfico respecto a la situación anterior?

NOTA: para este apartado se ha borrado la caché del proxy para que este tenga que acceder al servidor.