Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Unidad 4
SERVIDOR WEB
1 de 31
Unidad 4
Objetivos
Objetivos
2 de 31
Unidad 4
Conocimiento Previo
Conocimiento previo
3 de 31
Unidad 4
Motivación
Hoy en día, el servicio web está muy extendido en la sociedad. Ya forma parte de la rutina diaria de todos
nosotros tanto a nivel personal como a nivel profesional.
Toda empresa que se precie, sea pequeña o grande, tiene un escaparate en Internet.
A nivel personal, mucha gente dispone de blog, página web, álbum de fotos, perfil en alguna red social, etc.
Además, y cada vez con más frecuencia, recurrimos a todo tipo de servicios en Internet: banca online, búsquedas
y consulta de información, gestiones de la administración pública, lectura de periódicos, revistas, correo web,
compras, ... y un largo etcétera de tareas que ya se han transformado en habituales.
Pero, ¿dónde están alojadas estas páginas? ¿Qué hay detrás de ellas? ¿Qué servicio las pone a nuestra
disposición y cómo funciona?
A lo largo de este tema vamos estudiar y entender estas y otras cuestiones. Además, vamos a aprender a
instalar y configurar las herramientas que nos permiten ofrecer un servicio web (servicio HTTP).
4 de 31
Unidad 4
Introducción
Las siglas HTTP corresponden al Protocolo de Transferencia de HiperTexto (Hypertext Transfer Protocol). Se
trata de un sencillo protocolo cliente-servidor que articula los intercambios de información entre los clientes Web
(navegadores) y los servidores HTTP
Fue creado inicialmente en el 1990 en el CERN (laboratorio europeo de física de la partículas) como medio para
compartir datos científicos a escala internacional de una manera rápida y con un coste moderado. Actualmente,
es el método más común de intercambio y compartición de información en la WWW (World Wide Web).
El propósito del protocolo HTTP es permitir la transferencia de archivos (principalmente, en formato HTML). entre
un navegador (el cliente) y un servidor web localizado mediante una cadena de caracteres denominada dirección
URL (Uniform Resource Locator)
El concepto de hipertexto hace referencia al tipo de contenido que se ofrece en las páginas web (texto enlazado
que permite saltar de un lugar a otro).
En la actualidad, gran parte de las aplicaciones software (ya sean de gestión, consulta, ofimática, formación,
entretenimiento, comercio electrónico, etc) son aplicaciones web que los usuarios pueden utilizar mediante
navegadores para acceder a los servidores web donde se alojan, ya sea en redes públicas (Internet) o privadas
(Intranets).
El servicio HTTP es el pilar sobre el que se construye todo este entramado que hace posible la
intercomunicación a escala mundial.
Existe una versión segura de HTTP llamada HTTPS que permite el uso de cualquier método de cifrado siempre
que lo compartan el servidor y el cliente.
El protocolo
El protocolo de transferencia es el conjunto de normas mediante las cuales se envían peticiones de acceso a una
web y la consiguiente respuesta.
5 de 31
Unidad 4
La versión actual del protocolo es la 1.1 (ver RFC en recursos del tema)
6 de 31
Unidad 4
Desde el punto de vista de las comunicaciones, el protocolo está soportado sobre los servicios de conexión
TCP/IP: un proceso servidor escucha en un puerto de comunicaciones TCP (por defecto, el 80), y espera las
solicitudes de conexión de los clientes Web. Una vez que se establece la conexión, el protocolo TCP se encarga
de mantener la comunicación y garantizar un intercambio de datos libre de errores.
HTTP se basa en sencillas operaciones de solicitud/respuesta. Un cliente establece una conexión con un
servidor y envía un mensaje con los datos de la solicitud. El servidor responde con un mensaje similar, que
contiene el estado de la operación y su posible resultado.
Todas las operaciones pueden adjuntar un objeto o recurso sobre el que actúan; cada objeto Web (documento
HTML, fichero multimedia o aplicación CGI) es conocido por su URL. Los recursos pueden ser archivos, el
resultado de la ejecución de un programa, una consulta a una base de datos, la traducción automática de un
documento, etc.
HTTP es un protocolo sin estado, es decir, que no guarda ninguna información sobre conexiones anteriores. El
desarrollo de aplicaciones web necesita frecuentemente mantener estado. Para esto se usan las cookies, que es
información que un servidor puede almacenar en el sistema cliente. Esto le permite a las aplicaciones web instituir
la noción de "sesión".
Actividad
7 de 31
Unidad 4
Funcionamiento
Ya hemos comentado que el protocolo HTTP tiene un funcionamiento bastante sencillo basado en el envío de
mensajes entre cliente y servidor.
GET: se utiliza para solicitar cualquier tipo de información o recurso al servidor. Cada vez que se pulsa
sobre un enlace o se teclea directamente a una URL se usa este comando.. Como resultado, el servidor
HTTP enviará el recurso correspondiente.
HEAD: se utiliza para solicitar información sobre el recurso: su tamaño, su tipo, su fecha de
modificación… Es usado por los gestores de cachés de páginas o los servidores proxy, para conocer
8 de 31
Unidad 4
POST: sirve para enviar información al servidor, por ejemplo, los datos contenidos en un formulario. El
servidor pasará esta información a un proceso encargado de su tratamiento (por ejemplo, una aplicación
CGI). La operación que se realiza con la información proporcionada depende de la URL utilizada. Se
utiliza, sobre todo, en los formularios.
La versión 1.1 del protocolo incorpora unos pocos comandos más como son: OPTIONS, PUT, DELETE, TRACE y
CONNECT. Veamos algunos de ellos:
OPTIONS: este comando permite conocer las características de conexión entre nuestro cliente y el
servidor. Podemos utilizarlo para realizar saber si el servidor responde o no.
DELETE: sirve para eliminar un recurso especificado en la URL, aunque pocas veces sera permitido por
un servidor web.
TRACE: comando que permite hacer un sondeo para saber todos los dispositivos de la red por los que
pasa nuestra petición. Así podremos descubrir si la petición pasa a través dispositivos intermedios o
proxys antes de llegar al servidor Web.
PUT: puede verse como el comando inverso a GET. Nos permite escribir datos en el servidor o, lo que es
lo mismo, poner un recurso en la URL que se especifique. Si el recurso no existe lo crea sino lo
reemplaza.
La diferencia con POST puede ser algo confusa. POST simplemente envía una información al servidor
para que éste la trate como considere oportuno. La URL que se especifica en un POST es el recurso al
que se le enviarán los datos y será el encargado de tratarlos.
Más información sobre la diferencia entre POST y PUT: http://notasjs.blogspot.com.es/2013/07/http-
diferencia-entre-post-y-put.html
Solicitud
Una solicitud HTTP es un conjunto de líneas que el navegador envía al servidor. Incluye:
El recurso solicitado, el método que se aplicará y la versión del protocolo utilizada (por lo general,
HTTP/1.0).
Los campos del encabezado de solicitud: es un conjunto de líneas opcionales que permiten aportar
información adicional sobre la solicitud y/o el cliente (navegador, sistema operativo, etc.). Cada una de
estas líneas está formada por un nombre que describe el tipo de encabezado, seguido de dos puntos (:) y
el valor del encabezado.
El cuerpo de la solicitud: es un conjunto de líneas opcionales que deben estar separadas de las líneas
precedentes por una línea en blanco y que, por ejemplo, permiten la transmisión de datos al servidor de un
formulario a través del método POST.
Respuesta
La sintaxis de una respuesta HTTP es un conjunto de líneas que el servidor envía al navegador. Incluye:
9 de 31
Unidad 4
Una línea de estado donde figura el versión del protocolo usada, un código de estado/error y un texto
con el significado de dicho código.
Los posibles códigos de estado se identifican con números de tres cifras y se clasifican en cinco grupos
según sean informativos (1xx), de éxito en la solicitud (2xx), para redireccionar la solicitud (3xx), por error
generado en el cliente (4xx) o bien por errores generados en el servidor (5xx).
Ejemplo.- Son respuestas típicas los códigos 200, para indicar OK de la petición, y el 404, para indicar que
el objeto solicitado no está disponible.
Los campos del encabezado de la respuesta. Conjunto de lineas opcionales que aportan información
adicional sobre la respuesta y/o el servidor.
El cuerpo de la respuesta que contiene el recurso (objeto) solicitado.
HTTP/1.0 200 OK Date: Sat, 15 Jan 2010 14:37:12 GMT Server : Microsoft-
IIS/2.0 Content-Type : text/HTML Content-Length : 1245
Last-Modified : Fri, 14 Jan 2010 18:11:12 GMT
Códigos de estado/error
10 de 31
Unidad 4
respuesta.
Error debido al
40x Estos códigos indican que la solicitud es incorrecta
cliente
La sintaxis de la solicitud se encuentra formulada de manera errónea o
400 BAD REQUEST
es imposible de responder
Los parámetros del mensaje aportan las especificaciones de
401 UNAUTHORIZED formularios de autorización que se admiten. El cliente debe reformular
la solicitud con los datos de autorización correctos
PAYMENT
402 El cliente debe reformular la solicitud con los datos de pago correctos
REQUIRED
403 FORBIDDEN El acceso al recurso simplemente se deniega
Un clásico. El servidor no halló nada en la dirección especificada. Se
404 NOT FOUND
ha abandonado sin dejar una dirección para redireccionar... :)
Error debido al
50x Estos códigos indican que existe un error interno en el servidor
servidor
Encabezados HTTP
Los encabezados (lineas de encabezados) de los mensajes constituyen un elemento fundamental en el protocolo
ya que definen gran parte de la información que se intercambia entre clientes y servidores, dándole así mucha
flexibilidad.
Estas líneas permiten que se envíe información descriptiva en la propia transacción, permitiendo, por ejemplo, la
autenticación o identificación de usuarios.
La sintaxis de una línea simple de encabezado se compone del nombre de encabezado, seguido de dos puntos
y el valor correspondiente.
De ámbito general: manejan información que puede ser utilizada tanto por clientes como por servidores,
ya que se aplican a una sesión completa de comunicación
De solicitud: los utiliza el cliente para enviar información adicional al servidor, en sus peticiones de algún
servicio.
De respuesta: utilizados por el servidor para enviar información añadida al cliente.
De entidad: con información relaciona directamente con el recurso que se le va a proporcionar al cliente.
11 de 31
Unidad 4
En el siguiente enlace podemos ver una lista completa de los encabezados: https://en.wikipedia.org
/wiki/List_of_HTTP_header_fields
Petición
Cada petición a un servidor web lleva campos adicionales para poder personalizarla. Estos se escriben linea por
linea después de conectar y permiten indicar al servidor, entre otras cosas, los tipos de archivos que aceptamos,
el lenguaje, sistemas de codificación, etc.
Estos son algunos de los encabezados de petición más importantes con su descripción:
Nombre del
Descripción
encabezado
Tipo de contenido aceptado por el navegador (por ejemplo, texto/html). Ver
Accept
tipos MIME
Accept-Charset Juego de caracteres que el navegador espera
Accept-Encoding Codificación de datos que el navegador acepta
Accept-Language Idioma que el navegador espera (de forma predeterminada, inglés)
Authorization Identificación del navegador en el servidor
Content-Encoding Tipo de codificación para el cuerpo de la solicitud
Content-Language Tipo de idioma en el cuerpo de la solicitud
Content-Length Extensión del cuerpo de la solicitud
Tipo de contenido del cuerpo de la solicitud (por ejemplo, texto/html). Ver tipos
Content-Type
MIME.
Date Fecha en que comienza la transferencia de datos
Forwarded Utilizado por equipos intermediarios entre el navegador y el servidor
From Permite especificar la dirección de correo electrónico del cliente
Permite especificar que debe enviarse el documento si ha sido modificado
From
desde una fecha en particular
Link Vínculo entre dos direcciones URL
Orig-URL Dirección URL donde se originó la solicitud
Referer Dirección URL desde la cual se realizó la solicitud
Cadena con información sobre el cliente, por ejemplo, el nombre y la versión
User-Agent
del navegador y el sistema operativo
Respuesta
Estos son algunos de los encabezados de respuesta más comunes junto con una breve descripción.
Nombre del
Descripción
encabezado
Content-Encoding Tipo de codificación para el cuerpo de la respuesta
Content-Language Tipo de idioma en el cuerpo de la respuesta
Content-Length Extensión del cuerpo de la respuesta
12 de 31
Unidad 4
Vamos a hacer uso del comando TELNET para realizar una conexión a un servidor Web. Usando esa conexión
vamos a lanzar una serie de comandos para ver su funcionamiento y así, entender mejor todo el proceso.
1. Desde un terminal (en nuestro caso un Bash de Gnu/Linux), hacemos el TELNET correspondiente y
verificamos que realiza la conexión (Connected to ...).
No hay que olvidar especificar la web destino (en nuestro ejemplo: www.mec.es) y el puerto de escucha
80.
2. Si todo ha ido bien, tendremos una sesión abierta para comunicarnos con el servidor Web.
3. A partir de ese momento, podemos escribir los comandos que queramos y observar la respuesta del
servidor.
No hay que olvidar que, después de cada comando, hay que pulsar dos veces ENTER para que el
mensaje se envíe.
Utilizando GET
Observa la respuesta del servidor: el código de estado 200 OK, el servidor, la fecha, etc. y, finalmente, el
contenido de la web (la página HTML que visualizará el navegador).
Utilizando HEAD
13 de 31
Unidad 4
En este caso, dado que con HEAD estamos pidiendo información sobre el recurso, solo se nos envían las lineas
de respuesta correspondientes, sin la página HTML.
Utilizando OPTIONS
El * indica que queremos información sobre el servidor en general y no sobre un recurso en concreto.
En este caso, estamos pasando además del comando OPTIONS una linea adicional con el campo Host. Si
usamos HTTP/1.1 esta linea es necesaria (algunos servidores dan servicio a varios sitios web y, por tanto, seria
necesaria dicha linea). Hay que tener en cuenta que el doble ENTER no se realizará hasta que acabemos de
escribir todos los campos. En nuestro caso, justo después de Host.
14 de 31
Unidad 4
Observa la información que devuelve el comando OPTIONS. Entre otras cosas, devuelve los métodos soportados
por el servidor.
Actividad
Realiza diferentes conexiones a sitios web que conozcas mediante TELNET. Usa diferentes
métodos y observa la respuesta del servidor.
Solicita un recurso que no exista a un servidor web y observa el código de error que devuelve.
¿Cuál es?
Tipos MIME
El protocolo HTTP fue diseñado para transportar por red ficheros en formato ASCII, formados por texto plano. Con
el paso del tiempo, surgió la necesidad de incluir diferentes tipos de ficheros no ASCII en las aplicaciones por
Internet (imágenes, vídeos, sonidos, etc.) y, como consecuencia de ello, fue necesario buscar una solución: había
que transformar estos formatos a tipo ASCII (u otros juegos de caracteres compatibles) para su correcta
recepción en el navegador web.
Este problema ya había surgido en las aplicaciones de correo electrónico, cuando se necesitó enviar por MAIL
ficheros no formados por texto plano, y por tanto, no compatibles con los juegos de caracteres permitidos.
Para solucionar este problema el Internet Engineering Task Force (IETF) creó en 1992 los tipos MIME
(Multipurpose Internet Mail Extensions), especificaciones para dar formato a mensajes no-ASCII, de forma que
pudieran ser enviados por Internet e interpretados correctamente por los programas de correo locales.
Los tipos MIME permiten especificar los tipos de datos, como por ejemplo texto, imagen, audio, etc., que los
archivos contienen. MIME adjunta a cada fichero un archivo de cabecera donde se indica el tipo y el subtipo del
contenido de los datos del mismo. Gracias a esta información, tanto el servidor como el navegador pueden
manejar y presentar los archivos correctamente.
Content-type: tipo_mime_principal/subtipo_mime.
Se usan para clasificar la larga lista de tipos MIME que existe. Los tipos de datos primarios, a veces denominados
"tipos de datos discretos", son:
Lista de tipos
15 de 31
Unidad 4
16 de 31
Unidad 4
video/dv Vídeos DV dv
http://www.iana.org/assignments/media-types/media-types.xhtml
Hay que tener en cuenta que si en el código HTML existen referencias a ficheros especiales cuyo tipo MIME no
está declarado previamente en el sistema local del usuario, el navegador web no será capaz de interpretar dicho
fichero (desconocerá qué hacer)
Los navegadores web traen configurados una serie de tipos MIME por defecto con los que sabrán trabajar sin
problema. Es el caso de, por ejemplo, las imágenes GIF o JPG. Para ello, el navegador mantiene en una base de
datos interna los tríos "extensión fichero" - "tipo MIME" - "aplicación necesaria". Si el navegador recibe un fichero
especial consultarà en dicha base datos qué debe hacer con ese tipo de contenido y realizará la acción que
corresponda. Si no lo encuentra, mostrará generalmente un mensaje de aviso o error al usuario.
Podemos ampliar la lista de extensiones MIME soportados por nuestro sistema. Este podría ser el caso de los
tipos MIME para cargar ficheros PDF o contenido FLASH que, por defecto, no vienen configurados.
Cuando instalamos un nuevo tipo éste será registrado en la base de datos del navegador y se asociará a un tipo
concreto de extensión de fichero, de forma que, cuando vayamos a abrir uno de los ficheros asociados a dicha
aplicación, el navegador ya sabrá cómo interpretar el fichero y qué aplicación debe llamar para su ejecución.
¿Es posible saber qué tipos MIME soporta nuestro navegador? Por ejemplo, para el caso de Firefox se pueden
consultar accediendo a la dirección about:plugins.
Otro tema a tener en cuenta a la hora de hablar de tipos MIME es que el servidor web en el que se aloje la página
web debe tener también configuradas las extensiones MIME adecuadas, ya que si no, no sabrá el tipo de datos
que le estamos pidiendo, por lo que no podrá enviarlo adecuadamente.
Puedes revisar las extensiones que soporta el sistema de tu ordenador accediendo al archivo
/etc/mime.types en el caso de los sistemas Gnu/Linux basados en Debian. Estas extensiones son las que
recogerá y soportará el servidor web que instalemos en dicho equipo.
$ cat /etc/mime.types
application/http
application/vnd.httphone
application/x-httpd-eruby rhtml
17 de 31
Unidad 4
Clientes
El cliente o navegador Web es una aplicación que permite visualizar páginas web alojadas en servidores Web
mostrando el contenido de la página en pantalla y, si la página lo permite, interactuar con ella o navegar a través
de enlaces a otra páginas web.
Un cliente web puede visualizar todo tipo de recursos básicos: texto, imágenes, vídeos, etc. Como ya se ha
comentado anteriormente con los tipos MIME es posible visualizar otros tipos diferentes de contenidos, siempre y
cuando, el navegador esté preparado para ello. Se le pueden añadir complementos que den al navegador
mayores capacidades de visualización. Por ejemplo, un navegador no sabrá visualizar un documento PDF pero si
le instalamos el complemento adecuado ya podrá hacerlo.
Además de visualizar contenidos en sus diferentes formas, tambié es posible ejecutar determinadas aplicaciones
que permitirán aumentar la funcionalidad de las páginas web, como por ejemplo:
Aplicaciones que se ejecutan en el cliente web, es decir, en el equipo del usuario. El servidor envía el
código (java o javascript) al navegador y este lo ejecuta.
Aplicaciones (en PHP, Perl, Python, etc) que se ejecutan en el servidor y generan un código html que se
envía al navegador, que interpreta y muestra al usuario.
Entre los principales navegadores web están: Firefox, Internet Explorer, Chrome, Amaya, Opera, Dillo,
Epiphany, Midori, etc. Son navegadores para entornos gráficos. Existen otros basados en entornos tipo texto
como: Lynx o Links.
Servidores
El servidor web es una programa que, haciendo uso del protocolo HTTP, atiende las peticiones de los clientes web
para proporcionarles los recursos solicitados.
La ubicación lógica de un servidor web es Internet pero los hay que dan servicio a Intranets o redes locales.
El servidor web, además de suministrar contenido HTML estático (página web que no cambia) también es capaz
de proporcionar páginas dinámicas generadas tras un preprocesamiento de algún programa realizado en PHP,
CGI,, Java, etc. Las páginas dinámicas, a diferencia de las estáticas, muestran contenido variable en función de la
petición que se le haga. Un ejemplo muy típico podría ser los webmail o páginas web de consulta de correo
electrónico.
Veamos gráficamente un esquema donde se resume la arquitectura cliente-servidor del protocolo HTTP.
18 de 31
Unidad 4
Existen muchas implementaciones de servidores web. Las más usadas y más conocidas son: Apache, IIS de
Microsoft, Nginx, Lighttpd, Sun Web Server, Google Web Server, etc.
Actividad
Cuando contratas un servicio de hosting, el proveedor te ofrece una lista de las extensiones
válidas que soporta. En el caso de los proveedores gratuitos esta lista puede ser limitada.
Busca un proveedor de hosting y revisa qué extensiones soporta.
Desde un sistema operativo en modo terminal (ejemplo: ubuntu server) o desde la aplicación
terminal de cualquier sistema Gnu/Linux intenta navegar usando un navegador en modo texto
como Lynx.
Visita la página http://news.netcraft.com/archives/category/web-server-survey/ y busca qué
servidor web es actualmente el más usado en el mundo.
19 de 31
Unidad 4
Seguridad
En este apartado vamos a tratar diferentes aspectos de seguridad relacionados con el servicio web.
El primero de ellos es el uso de HTTPS como elemento, hoy en día, imprescindible para darle confidencialidad a
las comunicaciones. A continuación, vamos a hablar de un de los ataques más comunes que sufren los servidores
web: los ataques DoS.
Para finalizar, vamos a estudiar una guía con consejos prácticos sobre cómo securizar un servidor web concreto:
Apache.
HTTPS
Hyper Text Transfer Protocol Secure (Protocolo seguro de transferencia de hipertexto), más conocido por sus
siglas HTTPS, es un protocolo de aplicación basado en el protocolo HTTP, destinado a la transferencia segura de
datos de Hiper Texto, es decir, es la versión segura de HTTP.
El protocolo HTTPS utiliza un cifrado basado en SSL/TLS para crear un canal cifrado (cuyo nivel de cifrado
depende del servidor remoto y del navegador utilizado por el cliente). Obviamente, este sistema es más apropiado
para el tráfico que transporta información sensible que el protocolo HTTP.
De este modo se consigue que la información no pueda ser usada por un atacante que haya conseguido
interceptar la transferencia de datos de la conexión, ya que lo único que obtendrá será un flujo de datos cifrados
que le resultará imposible de descifrar.
El puerto estándar para este protocolo es el 443.
20 de 31
Unidad 4
1. El cliente envía el mensaje "hello" que lista las posibilidades criptográficas del cliente (clasificadas por
orden de preferencia del cliente), como la versión de SSL, los grupos de programas de cifrado soportados
por el cliente y los métodos de compresión de datos soportados por el cliente. El mensaje también
contiene un número aleatorio de 28 bytes.
2. El servidor responde con el mensaje "hello" del servidor que contiene el método criptográfico (conjunto
de programas de cifrado) y el método de compresión de datos seleccionados por el servidor, el ID de
sesión y otro número aleatorio.
3. El servidor envía su certificado digital (utiliza certificados digitales X.509 V3 con SSL.)
4. El cliente (navegador web) verifica la validez del certificado digital del servidor y comprueba que los
parámetros del mensaje del servidor son aceptables.
5. El cliente envía el mensaje "client key exchange". Este mensaje contiene el secreto pre-maestro (un
número aleatorio de 46 bytes utilizado en la generación de las claves de cifrado simétrico y las claves de
código de autenticación de mensajes (MAC)) cifrado con la clave pública del servidor.
Nota: No es necesario un proceso adicional para verificar el certificado digital del servidor. Si el servidor no
tiene la clave privada que pertenece al certificado digital, no podrá descifrar el secreto pre-maestro y crear
las claves correctas para el algoritmo de cifrado simétrico y el protocolo de enlace dará error.
6. El cliente utiliza una serie de operaciones criptográficas para convertir el secreto pre-maestro en un
secreto maestro (clave de cifrado simétrica), del que se deriva todo el material de clave necesario para el
cifrado y la autenticación de mensajes.
El servidor hará lo propio con el secreteo pre-maestro que reciba.
A continuación, el cliente envía el mensaje "change cipher spec" para que el servidor conmute al
conjunto de programas de cifrado recién negociado. El siguiente mensaje enviado por el cliente (mensaje
"finished") es el primer mensaje cifrado con este método y estas claves de cifrado.
21 de 31
Unidad 4
De forma general, un ataque de denegación de servicio (DoS de las siglas en inglés Denial of Service o DDoS de
Distributed Denial of Service) es un ataque a un servidor, sistema de servidores o a una red completa que causa
que un servicio o recurso sea inaccesible a los usuarios legítimos. Normalmente provoca la pérdida de la
conectividad de la red por el consumo del ancho de banda de la red de la víctima o sobrecarga de los recursos
computacionales del sistema de la víctima.
En nuestro caso, un DoS sobre un servidor web provocará que nuestro servidor deje de atender peticiones y, por
tanto, quedará inhabilitado. Existen tres estrategias por parte del atacante para conseguirlo:
Ancho de banda: Ataque que consiste en saturar la capacidad de la red del servidor, haciendo que sea
imposible llegar a él.
Recursos: Ataque que consiste en agotar los recursos del sistema de la máquina, impidiendo que ésta
pueda responder a las peticiones legítimas.
Explotación de fallos de software: Categoría de ataque que explota fallos en el software que inhabilitan el
equipo o toman su control.
Podemos ver gráficamente cómo podría ser un ataque de este tipo. Se trata de un ataque real que sufrió el sitio
web de videoLAN (sobre su infraestructura de descargas) y que ha sido representado de la siguiente forma:
Cada uno de los pequeños puntos de colores es una petición de acceso al servidor. Las que son del mismo color
pertenecen al mismo host que las envía. A la derecha, vemos al servidor inundado de peticiones, tratando de
servirlas todas (los puntos que rebotan de vuelta al host); los puntos que no recoge la paleta de la derecha y se
22 de 31
Unidad 4
pierden en la pantalla son el número de errores 404 que ven los usuarios que no pueden acceder. La
visualización es realmente gráfica: un DDoS es tal cual, un bombardeo masivo de peticiones que acaban por
tumbar los servidores.
Los ataques DoS sólo necesitan un equipo y una conexión a Internet para atacar el ancho de banda y recursos de
un objetivo.
Un ataque DDoS usa muchos dispositivos y varias conexiones de Internet que suelen estar distribuidas por todo el
mundo. Por supuesto, ya que el ataque viene desde distintas direcciones es casi imposible de evitar porque,
realmente, no se estará tratando con un solo atacante.
Una forma típica de lograr DDoS es que el atacante explote alguna vulnerabilidad en un sistema y lo convierta en
su “botmaster”. Luego este botmaster identifica otros sistemas vulnerables y los infecta con malware para que se
conviertan en ordenadores zombies. Cuando se controlan suficientes (lo que se llamaría botnet o ejército zombie),
se les mandan instrucciones para que lancen un ataque a un objetivo específico.
El servidor web Apache es el más utilizado a nivel mundial. Por ello, el organismo INCIBE ha creado una guía
muy interesante con información sobre cómo configurar nuestro servidor para conseguir que sea lo más seguro
posible.
https://www.incibe.es/CERT/guias_estudios/guias/guia_apache
Cómo modificar la configuración de Apache y las medidas de seguridad que se deben aplicar al instalar el
software.
Las directivas principales para definir los ficheros que servirá Apache sin que se facilite el acceso a ningún
otro archivo del servidor.
Los métodos para tratar de minimizar la información expuesta que facilite ataques sobre el servidor web.
Las características de los distintos métodos de ejecución de código que ofrece Apache y los requisitos de
seguridad que conllevan.
Los métodos Basic y Digest de autenticación, además de cómo construir requisitos de acceso más
sofisticados.
Cómo configurar de manera segura el protocolo HTTPS, que proporciona cifrado de la comunicación y
autenticación del servidor.
Una introducción sobre los ataques DOS y sus mitigaciones. Y cómo configurar Apache en vista del
número de peticiones concurrentes que espera recibir el servidor.
Las opciones de configuración de log y las principales herramientas de monitorización de Apache.
Actividad
En Julio de 2009 se produjeron una serie de Ciberataques tipo DDoS que afectaron a sitios web
de noticias, finanzas y de los gobiernos de Estados Unidos y Corea del Sur. Según las
estimaciones de varias empresas de seguridad, se creó un ejército de alrededor de 50.000
ordenadores zombies ubicados en Corea del Sur. Hubo tres ataques consecutivos: uno el 4 de
julio, día de Independencia en Estados Unidos, donde se vieron afectadas las páginas de la Casa
Blanca y el Pentágono; otro el 7 de julio, el cual afectó únicamente a sitios gubernamentales de
Corea del Sur; y finalmente el 9 de julio, donde se vieron afectados sitios web de ambos países.
Hasta ahora nadie sabe quién o quiénes fueron los atacantes.
23 de 31
Unidad 4
Busca en Internet algún otro ejemplo de ataque DDoS indicando el sitio web que lo sufrió y una
breve descripción del mismo.
24 de 31
Unidad 4
Recursos
25 de 31
Unidad 4
HTTP en la wikipedia
Índice
1 Transacciones HTTP
2 Versiones
3 Ejemplo de un diálogo HTTP
4 Métodos de petición
5 Códigos de respuesta
6 Véase también
7 Referencias
8 Enlaces externos
Transacciones HTTP[editar]
Una transacción HTTP está formada por un encabezado seguido, opcionalmente, por una línea en blanco y algún
dato. El encabezado especificará cosas como la acción requerida del servidor, o el tipo de dato retornado, o el
código de estado.
El uso de campos de encabezados enviados en las transacciones HTTP le dan gran flexibilidad al protocolo.
Estos campos permiten que se envíe información descriptiva en la transacción, permitiendo así la autenticación,
cifrado e identificación de usuario.
26 de 31
Unidad 4
Un encabezado es un bloque de datos que precede a la información propiamente dicha, por lo que muchas veces
se hace referencia a él como metadato —porque tiene datos sobre los datos—.
Si se reciben líneas de encabezado del cliente, el servidor las coloca en las variables de entorno de CGI con el
prefijo HTTP_ seguido del nombre del encabezado. Cualquier carácter guion ( - ) del nombre del encabezado se
convierte a caracteres "_".
El servidor puede excluir cualquier encabezado que ya esté procesado, como Authorization, Content-type y
Content-length. El servidor puede elegir excluir alguno o todos los encabezados, si incluirlos, si se excede algún
límite del entorno de sistema. Ejemplos de esto son las variables HTTP_ACCEPT y HTTP_USER_AGENT.
HTTP_ACCEPT. Los tipos MIME que el cliente aceptará, dados los encabezados HTTP. Otros protocolos
quizás necesiten obtener esta información de otro lugar. Los elementos de esta lista deben estar separados
por una coma, como se dice en la especificación HTTP: tipo, tipo.
HTTP_USER_AGENT. El navegador que utiliza el cliente para realizar la petición. El formato general para
esta variable es: software/versión biblioteca/versión.
Un código de estado que indica si la petición fue correcta o no. Los códigos de error típicos indican que el
archivo solicitado no se encontró, que la petición no se realizó de forma correcta o que se requiere
autenticación para acceder al archivo.
La información propiamente dicha. Como HTTP permite enviar documentos de todo tipo y formato, es ideal
para transmitir multimedia, como gráficos, audio y video. Esta libertad es una de las mayores ventajas de
HTTP.
Información sobre el objeto que se retorna.
Hay que tener en cuenta que la lista no es una lista completa de los campos de encabezado y que todos ellos sólo
tienen sentido en una dirección.
Versiones[editar]
HTTP ha pasado por múltiples versiones del protocolo, muchas de las cuales son compatibles con las anteriores.
El RFC 2145 describe el uso de los números de versión de HTTP. El cliente le dice al servidor al principio de la
petición la versión que usa, y el servidor usa la misma o una anterior en su respuesta.
0.9
Obsoleta. Soporta sólo un comando, GET, y además no especifica el número de versión HTTP. No soporta
cabeceras. Como esta versión no soporta POST, el cliente no puede enviarle mucha información al servidor.
HTTP/1.0 (mayo de 1996)
Esta es la primera revisión del protocolo que especifica su versión en las comunicaciones, y todavía se usa
ampliamente, sobre todo en servidores proxy.
HTTP/1.1 (junio de 1999)[1] [2]
Versión actual; las conexiones persistentes están activadas por defecto y funcionan bien con los proxies.
También permite al cliente enviar múltiples peticiones a la vez por la misma conexión (pipelining) lo que hace
posible eliminar el tiempo de Round-Trip delay por cada petición.
HTTP/1.2
Los primeros borradores de 1995 del documento PEP — an Extension Mechanism for HTTP (el cuál propone
el Protocolo de Extensión de Protocolo, abreviado PEP) los hizo el World Wide Web Consortium y se envió al
Internet Engineering Task Force. El PEP inicialmente estaba destinado a convertirse en un rango distintivo de
HTTP/1.2.[3] En borradores posteriores, sin embargo, se eliminó la referencia a HTTP/1.2. El RFC 2774
(experimental), HTTP Extension Framework, incluye en gran medida a PEP. Se publicó en febrero de 2000.
27 de 31
Unidad 4
1. Se abre una conexión al host www.example.com, puerto 80 que es el puerto predefinido para HTTP.
2. Se envía un mensaje en el estilo siguiente:
La respuesta del servidor está formada por encabezados seguidos del recurso solicitado, en el caso de una
página web:
HTTP/1.1 200 OK Date: Fri, 31 Dec 2003 23:59:59 GMT Content-Type: text/html Content-Length: 12
Métodos de petición[editar]
HEAD
Pide una respuesta idéntica a la que correspondería a una
petición GET, pero sin el cuerpo de la respuesta. Esto es útil para
Un pedido HTTP usando telnet. El pedido
la recuperación de meta-información escrita en los encabezados (request), cabeceras de respuesta (response
de respuesta, sin tener que transportar todo el contenido. headers) y el cuerpo de la respuesta
(response body) están resaltados.
GET
Pide una representación del recurso especificado. Por seguridad no debería ser usado por aplicaciones que
causen efectos ya que transmite información a través de la URI agregando parámetros a la URL. La petición
puede ser simple, es decir en una línea o compuesta de la manera que muestra el ejemplo.
Ejemplo:
GET /images/logo.png HTTP/1.1 obtiene un recurso llamado logo.png
Ejemplo con parámetros:
/index.php?page=main&lang=es
POST
Envía los datos para que sean procesados por el recurso identificado. Los datos se incluirán en el cuerpo de la
petición. Esto puede resultar en la creación de un nuevo recurso o de las actualizaciones de los recursos
existentes o ambas cosas.
PUT
Sube, carga o realiza un upload de un recurso especificado (archivo), es el camino más eficiente para subir
archivos a un servidor, esto es porque en POST utiliza un mensaje multiparte y el mensaje es decodificado
por el servidor. En contraste, el método PUT te permite escribir un archivo en una conexión socket establecida
con el servidor.
La desventaja del método PUT es que los servidores de hosting compartido no lo tienen habilitado.
Ejemplo:
PUT /path/filename.html HTTP/1.1
28 de 31
Unidad 4
DELETE
Borra el recurso especificado.
TRACE
Este método solicita al servidor que envíe de vuelta en un mensaje de respuesta, en la sección del cuerpo de
entidad, toda la data que reciba del mensaje de solicitud. Se utiliza con fines de comprobación y diagnóstico.
OPTIONS
Devuelve los métodos HTTP que el servidor soporta para un URL específico. Esto puede ser utilizado para
comprobar la funcionalidad de un servidor web mediante petición en lugar de un recurso específico.
CONNECT
Se utiliza para saber si se tiene acceso a un host, no necesariamente la petición llega al servidor, este método
se utiliza principalmente para saber si un proxy nos da acceso a un host bajo condiciones especiales, como
por ejemplo "corrientes" de datos bidireccionales encriptadas (como lo requiere SSL).
Códigos de respuesta[editar]
1xx Mensajes
N° Descripción
100 111 Conexión rechazada
N° Descripción
200 OK
201-203 Información no oficial
204 Sin Contenido
205 Contenido para recargar
206 Contenido parcial
3xx Redirección
N° Descripción
301 Mudado permanentemente
302 Encontrado
303 Vea otros
304 No modificado
305 Utilice un proxy
307 Redirección temporal
N° Descripción
400 Solicitud incorrecta
401 No autorizado
402 Pago requerido
403 Prohibido
29 de 31
Unidad 4
404 No encontrado
409 Conflicto
410 Ya no disponible
412 Falló precondición
N° Descripción
500 Error interno
501 No implementado
502 Pasarela incorrecta
503 Servicio no disponible
504 Tiempo de espera de la pasarela agotado
505 Versión de HTTP no soportada
Véase también[editar]
Referencias[editar]
Enlaces externos[editar]
RFC-2616
HTTP - Hypertext Transfer Protocol. W3C
HTTP Made Really Easy. byJames Marshall, 1997
Validación de HTTP Headers Verificación de URL Online
Obtenido de «https://es.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol&oldid=85110288»
30 de 31
Unidad 4
Las solicitudes de comentarios (RFC, Requests for Comments) son un conjunto de informes, propuestas de
protocolos y estándares de protocolos utilizados por la comunidad de Internet.
La RFC 2616 contiene información sobre el protocolo que rige al protocolo HTTP.
En el año 2006, el consorcio W3C inició una revisión del RFC 2616 y dicho trabajo finalizó con la publicación de
los RFC 723X., que dejan obsoleto al 2616.
Este trabajo puede verse en el enlace http://www.w3.org/Protocols/
31 de 31