07 - Servidores web
Un servidor web es un software que se ejecuta en un servidor físico o virtual y su función principal es servir contenido web (como páginas HTML, imágenes, archivos, etc.) a los clientes que lo solicitan a través de un navegador. Este contenido se entrega mediante el protocolo http o su versión segura, https.
Los servidores web reciben las solicitudes de los clientes, interpretan estas peticiones y devuelven la respuesta adecuada, que generalmente es una página web completa. Además, permiten la ejecución de aplicaciones del lado del servidor, como scripts PHP, y gestionan la seguridad y la autenticación de los usuarios.
Un servidor web:
- Hospeda sitios web y aplicaciones web: Proporciona la infraestructura necesaria para que un sitio web o una aplicación web esté disponible en la red.
- Gestiona las peticiones de los clientes: Responde a las solicitudes de los navegadores, proporcionando los recursos solicitados.
- Proporciona seguridad: Gestiona la autenticación de usuarios, encripta las comunicaciones y protege contra ataques maliciosos.
- Almacena y gestiona archivos: Sirve como almacenamiento para los archivos web, como imágenes, documentos y otros recursos necesarios par
Arquitectura cliente-servidor
La arquitectura cliente-servidor es un modelo de red en el que los ordenadroes cliente solicitan servicios o recursos de un servidor centralizado. Este modelo es la base del funcionamiento de un servidor web.
- Cliente: En el contexto de un servidor web, un cliente es típicamente un navegador web (como Chrome, Firefox o Edge) que envía peticiones HTTP al servidor para obtener recursos, como páginas HTML, imágenes o ejecutar scripts.
- Servidor: El servidor recibe las solicitudes de los clientes, las procesa y envía de vuelta la respuesta adecuada, como una página web completa o un archivo solicitado.
En esta arquitectura, el servidor web desempeña el rol de proveedor de servicios, mientras que el cliente actúa como solicitante de esos servicios. Esta relación es fundamental para las operaciones de Internet, donde los navegadores web se conectan a servidores web para acceder a contenido.
HTTP y HTTPS
El Protocolo HTTP (Hypertext Transfer Protocol) es la base de la comunicación en la web. Es un protocolo de la capa de aplicación que define cómo los mensajes son formateados y transmitidos, y cómo los servidores y navegadores deben responder a las distintas peticiones.
- Petición HTTP: Un cliente (generalmente un navegador web) envía una solicitud al servidor, que incluye un método HTTP, la URL del recurso solicitado y una serie de cabeceras que proporcionan información adicional.
- Respuesta HTTP: El servidor procesa la solicitud y devuelve una respuesta que contiene un código de estado (que indica el éxito o fracaso de la solicitud), las cabeceras de la respuesta y, generalmente, el cuerpo del mensaje, que puede ser un documento HTML, un archivo de imagen, etc.
Métodos HTTP
Los métodos HTTP son las acciones que el cliente solicita al servidor. Los más comunes son:
- GET: Solicita un recurso específico del servidor. Este es el método más común y se utiliza para recuperar datos sin realizar cambios en el servidor.
- POST: Envía datos al servidor, a menudo como parte de un formulario. A diferencia de GET, POST se utiliza para enviar información que puede alterar el estado del servidor.
- PUT: Sube o actualiza un recurso en el servidor. Este método se usa para enviar un archivo o datos a una ubicación específica en el servidor.
- DELETE: Elimina un recurso especificado en el servidor.
- HEAD: Similar a GET, pero solo solicita las cabeceras del recurso, sin el cuerpo del mensaje. Es útil para verificar si un recurso existe o si ha cambiado.
Códigos de estado HTTP
Los códigos de estado HTTP son devueltos por el servidor para indicar el resultado de la solicitud realizada por el cliente. Se dividen en varias categorías:
- 1xx (Informativos): Indican que la solicitud ha sido recibida y el proceso continúa.
- 2xx (Éxito): Indican que la solicitud ha sido recibida, entendida y procesada correctamente.
- 200 OK: La solicitud se ha completado con éxito.
- 3xx (Redirección): Indican que se requiere una acción adicional por parte del cliente para completar la solicitud.
- 301 Moved Permanently: El recurso solicitado ha sido movido permanentemente a una nueva URL.
- 4xx (Errores del Cliente): Indican que la solicitud tiene un error o no puede ser procesada.
- 404 Not Found: El recurso solicitado no ha sido encontrado en el servidor.
- 5xx (Errores del Servidor): Indican que el servidor falló al cumplir con una solicitud aparentemente válida.
- 500 Internal Server Error: El servidor encontró un error al intentar procesar la solicitud.
HTTPS
HTTPS (Hypertext Transfer Protocol Secure) es la versión segura de HTTP. La diferencia principal es que HTTPS utiliza el protocolo SSL/TLS (Secure Sockets Layer/Transport Layer Security) para cifrar los datos transmitidos entre el cliente y el servidor, garantizando la confidencialidad e integridad de la información.
- Cifrado: Los datos intercambiados entre el cliente y el servidor están cifrados, lo que significa que incluso si son interceptados, no pueden ser leídos por terceros.
- Autenticación: HTTPS utiliza certificados digitales para autenticar la identidad del servidor, asegurando a los usuarios que están comunicándose con el servidor legítimo y no con un impostor.
- Integridad de los Datos: Asegura que los datos no hayan sido alterados durante la transmisión.
Implementar HTTPS en lugar de HTTP tiene múltiples beneficios:
- Seguridad: HTTPS protege la información sensible de los usuarios, como contraseñas y datos personales, durante la transmisión.
- Confianza del Usuario: Los navegadores modernos muestran indicadores visuales (como un candado en la barra de direcciones) cuando un sitio utiliza HTTPS, lo que aumenta la confianza de los usuarios.
- Mejoras en SEO: Los motores de búsqueda como Google favorecen los sitios que utilizan HTTPS, lo que puede mejorar la clasificación en los resultados de búsqueda.
- Cumplimiento Normativo: HTTPS es necesario para cumplir con muchas regulaciones de seguridad de datos y privacidad, como el GDPR en Europa.
Servidores web
Existen varios servidores web que son ampliamente utilizados en la industria, cada uno con características y enfoques específicos que los hacen adecuados para diferentes necesidades. A continuación, se describen algunos de los servidores web más populares.
Apache
Apache HTTP Server, comúnmente conocido como Apache, es uno de los servidores web más utilizados en el mundo. Es un software de código abierto, mantenido por la Apache Software Foundation, y ha sido un pilar en la infraestructura de la web desde mediados de la década de 1990. Entre sus características destacan:
- Modularidad: Apache permite la carga dinámica de módulos para extender su funcionalidad, como mod_ssl para HTTPS, mod_rewrite para redirecciones y mod_proxy para configurar un proxy inverso.
- Alta configurabilidad: Es altamente configurable mediante archivos de configuración (httpd.conf) y .htaccess, permitiendo ajustes específicos por directorio.
- Compatibilidad: Soporta múltiples sistemas operativos como Linux, Windows y macOS.
- Seguridad: Apache tiene una gran cantidad de módulos de seguridad y configuraciones, incluyendo autenticación basada en contraseñas y listas de control de acceso.
- Desempeño: Aunque Apache es muy versátil, no es tan ligero como otros servidores en términos de rendimiento, especialmente bajo cargas extremadamente altas.
Nginx
Nginx (pronunciado como “Engine-X”) es un servidor web de alto rendimiento que también actúa como proxy inverso, balanceador de carga y servidor de correo. Es conocido por su eficiencia al manejar conexiones simultáneas y su baja huella de recursos. Entre sus características destacan:
- Eficiencia: Arquitectura basada en eventos asíncronos que permite manejar un gran número de conexiones simultáneas de manera eficiente.
- Versatilidad: Funciona tanto como servidor web como proxy inverso y balanceador de carga.
- Ligero: Bajo consumo de recursos, ideal para sistemas con recursos limitados o entornos de alta demanda.
- Configuración sencilla: Configuración concisa y bien estructurada, lo que facilita su aprendizaje y uso.
- Escalabilidad: Ideal para sitios de alto tráfico y aplicaciones distribuidas.
Microsoft IIS
Internet Information Services (IIS) es el servidor web desarrollado por Microsoft y está integrado en el sistema operativo Windows. Es una opción popular en entornos empresariales que utilizan tecnologías Microsoft. Entre sus características destacan:
- Integración con Windows: Integración completa con el sistema operativo Windows y otras tecnologías de Microsoft, como .NET y Active Directory.
- Facilidad de uso: Administración fácil a través de una interfaz gráfica de usuario (GUI) intuitiva.
- Seguridad: Amplias opciones de configuración de seguridad, incluyendo autenticación integrada y cifrado SSL.
- Compatibilidad: Soporte nativo para aplicaciones ASP.NET y otras tecnologías de Microsoft.
- Desempeño: Optimizado para entornos Windows, aunque puede no ser tan eficiente como Nginx o Apache en otros sistemas.
Tomcat
Apache Tomcat es un servidor de aplicaciones de código abierto que ejecuta aplicaciones Java, desarrollado por la Apache Software Foundation. Es ampliamente utilizado para aplicaciones empresariales basadas en Java. Entre sus características destacan:
- Soporte para Java: Diseñado específicamente para ejecutar aplicaciones web Java, incluyendo servlets y JSP.
- Ligereza: Comparado con otros servidores de aplicaciones Java EE, Tomcat es ligero y fácil de configurar.
- Integración con Apache: Puede integrarse fácilmente con Apache HTTP Server para servir contenido estático junto con aplicaciones dinámicas Java.
- Compatibilidad: Compatible con múltiples sistemas operativos, incluyendo Linux, Windows y macOS.
- Extensibilidad: Modularidad que permite la adición de componentes según las necesidades de la aplicación.
LiteSpeed
LiteSpeed Web Server es un servidor web comercial que se destaca por su rendimiento y optimización para alojamientos compartidos y de alto tráfico. Es compatible con Apache, lo que facilita la migración. Entre sus características destacan:
- Alto rendimiento: Es conocido por su alta velocidad y capacidad para manejar conexiones simultáneas con eficiencia.
- Compatibilidad con Apache: Puede utilizar archivos de configuración de Apache, lo que facilita la transición entre servidores.
- Seguridad: Incluye características avanzadas de seguridad como protección contra ataques DDoS y integración con ModSecurity.
- Escalabilidad: Ideal para entornos de alto tráfico, con soporte para HTTP/3 y QUIC.
- Optimización de recursos: Consumo eficiente de recursos, lo que lo hace adecuado para servidores con limitaciones de hardware.
Sitios virtuales
Un sitio virtual es una configuración en un servidor web que permite alojar múltiples sitios web en un solo servidor físico o virtual. Cada sitio virtual actúa como si fuera un servidor independiente, pero en realidad, comparte los mismos recursos del servidor host. Esta es una práctica común en la administración de servidores web para optimizar el uso de recursos y reducir costos.
Servidor dedicado vs sitios virtuales
Servidor dedicado
- Un servidor dedicado es un servidor físico o virtual que aloja un solo sitio web o aplicación. Todos los recursos del servidor (CPU, memoria, almacenamiento, etc.) están dedicados exclusivamente a ese sitio o aplicación.
- Ventajas: Mayor control sobre la configuración, seguridad y rendimiento. Ideal para sitios web o aplicaciones con alta demanda de recursos o requisitos específicos de configuración.
- Desventajas: Es más costoso en comparación con soluciones que permiten sitios virtuales, ya que no se comparte el hardware ni los costos operativos.
Sitios Virtuales:
- Los sitios virtuales permiten que un solo servidor físico o virtual aloje múltiples sitios web. Cada sitio puede tener su propio nombre de dominio, configuración y contenido, pero todos comparten los mismos recursos del servidor.
- Ventajas: Reducción de costos al compartir los recursos del servidor entre múltiples sitios. Es ideal para alojar varios sitios pequeños o medianos en un solo servidor.
- Desventajas: El rendimiento puede verse afectado si uno o más sitios consumen demasiados recursos. Además, hay menos control individual sobre la configuración del servidor comparado con un servidor dedicado.
Tipos de sitios virtuales
- Basados en nombre (Name-based Virtual Hosting): Este es el método más común, donde un solo servidor IP maneja múltiples nombres de dominio. El servidor web distingue entre los diferentes sitios utilizando el nombre de host solicitado por el cliente en la cabecera HTTP.
- Basados en IP (IP-based Virtual Hosting): Cada sitio virtual tiene su propia dirección IP. Esto puede ser necesario si se requiere configurar certificados SSL/TLS individuales para cada sitio (aunque con SNI - Server Name Indication, esto es menos común).
- Basados en puerto (Port-based Virtual Hosting): En este método, diferentes sitios se distinguen por el número de puerto. Aunque es menos común, puede ser útil en escenarios específicos.
Subdominios
Los subdominios son una extensión de un dominio principal y pueden ser utilizados para organizar y acceder a secciones específicas de un sitio web. Por ejemplo, blog.ejemplo.com y tienda.ejemplo.com son subdominios del dominio ejemplo.com.
- Subdominios como Sitios Virtuales: En muchos casos, los subdominios se configuran como sitios virtuales independientes en el servidor web. Esto permite que cada subdominio tenga su propia configuración, contenido y, si es necesario, administración separada.
- Uso común: Los subdominios se utilizan frecuentemente para diferenciar secciones del sitio que tienen un propósito específico o que necesitan una configuración distinta. Por ejemplo, un subdominio para un blog, una tienda en línea o un foro.
Seguridad
Principios Básicos de Seguridad en Servidores Web
La seguridad en un servidor web se basa en varios principios fundamentales que deben implementarse para proteger tanto el servidor como los datos que maneja:
- Confidencialidad: Asegurar que la información solo sea accesible por personas o sistemas autorizados.
- Integridad: Garantizar que los datos no sean alterados o modificados sin autorización durante la transmisión o el almacenamiento.
- Disponibilidad: Asegurar que los servicios web estén disponibles para los usuarios legítimos cuando lo necesiten, minimizando el tiempo de inactividad.
- Autenticación: Verificar la identidad de los usuarios y sistemas antes de permitir el acceso a recursos protegidos.
- Autorización: Controlar lo que un usuario autenticado puede hacer o acceder en el sistema.
Configuración de HTTPS
HTTPS (Hypertext Transfer Protocol Secure) es esencial para proteger la comunicación entre el servidor web y los clientes. HTTPS utiliza TLS (Transport Layer Security) para cifrar los datos, garantizando la confidencialidad e integridad de la información.
- Certificados SSL/TLS: Para implementar HTTPS, es necesario adquirir e instalar un certificado SSL/TLS en el servidor web. Este certificado autentica la identidad del servidor y cifra los datos transmitidos.
- Renovación y Caducidad: Los certificados SSL/TLS tienen una fecha de caducidad, por lo que es importante renovarlos a tiempo para evitar interrupciones en el servicio.
- Configuración de Cifrado: Es recomendable configurar el servidor para utilizar versiones recientes y seguras de TLS (evitando SSL y versiones antiguas de TLS) y asegurar que solo se utilicen algoritmos de cifrado fuertes.
Protección Contra Ataques Comunes
Los servidores web son un objetivo frecuente de diversos tipos de ataques. Implementar las siguientes medidas puede ayudar a protegerlos:
- Prevención de Ataques DDoS (Denegación de Servicio Distribuida): Un ataque DDoS intenta abrumar al servidor con una gran cantidad de tráfico, dejándolo inoperativo. Se pueden implementar soluciones como firewalls de aplicaciones web (WAF), redes de distribución de contenido (CDN) y servicios de mitigación DDoS para proteger el servidor.
- Mitigación de Ataques XSS (Cross-Site Scripting): Los ataques XSS inyectan scripts maliciosos en las páginas web que son vistas por otros usuarios. Para prevenir XSS, se debe validar y filtrar adecuadamente toda la entrada de usuario y utilizar encabezados HTTP como Content-Security-Policy (CSP).
- Prevención de Ataques de Inyección SQL: Este tipo de ataque se dirige a bases de datos mediante la inyección de comandos SQL a través de formularios web. Para evitarlo, es esencial validar y parametrizar las entradas de usuario.
- Protección Contra CSRF (Cross-Site Request Forgery): Los ataques CSRF intentan que un usuario autenticado ejecute acciones no deseadas en un sitio web sin su conocimiento. Se pueden implementar tokens CSRF y verificar las solicitudes HTTP para prevenir este tipo de ataques.
Configuración de Cabeceras HTTP de Seguridad
Las cabeceras HTTP pueden reforzar la seguridad del servidor web al controlar cómo los navegadores manejan el contenido y la comunicación con el servidor:
- Content-Security-Policy (CSP): Esta cabecera permite definir políticas de seguridad que especifican qué recursos pueden cargarse y ejecutarse en una página web, ayudando a prevenir ataques XSS y otros.
- X-Frame-Options: Evita que las páginas web sean cargadas en un frame, protegiendo contra ataques de clickjacking.
- X-Content-Type-Options: Fuerza al navegador a seguir estrictamente el tipo MIME especificado en el Content-Type, lo que ayuda a prevenir ataques de tipo MIME sniffing.
- Strict-Transport-Security (HSTS): Indica al navegador que siempre debe usar HTTPS para comunicarse con el servidor, incluso si el usuario intenta acceder a través de HTTP.
Gestión de Actualizaciones y Parches
Mantener el servidor web actualizado es crucial para la seguridad:
- Actualizaciones Regulares: Es fundamental aplicar actualizaciones y parches de seguridad al servidor web, al sistema operativo y a cualquier software asociado tan pronto como estén disponibles.
- Monitoreo de Vulnerabilidades: Utilizar herramientas de escaneo de vulnerabilidades para identificar y mitigar posibles debilidades en el servidor antes de que sean explotadas.
Configuración de Permisos y Accesos
- Principio de Menor Privilegio: Configurar los permisos de manera que cada usuario o proceso solo tenga acceso a los recursos estrictamente necesarios para realizar su función.
- Seguridad de Archivos y Directorios: Restringir el acceso a archivos y directorios críticos mediante permisos adecuados y, cuando sea posible, evitar que el servidor web tenga acceso a áreas innecesarias del sistema de archivos.
- Autenticación y Autorización: Implementar sistemas robustos de autenticación (como autenticación multifactor) y asegurarse de que solo usuarios autorizados puedan acceder a áreas sensibles del servidor.
Monitorización y Logs
- Monitoreo Continuo: Implementar soluciones de monitoreo que detecten y alerten sobre actividad inusual en el servidor.
- Revisión de Logs: Mantener registros de acceso y error del servidor web y revisarlos regularmente para identificar posibles intentos de ataque o problemas de seguridad.
Ejercicios
Ejercicio 1
Realiza una tabla comparativa entre Apache, Nginx, IIS, Tomcat y LiteSpeed, destacando sus características principales como modularidad, rendimiento, seguridad, y casos de uso típicos.
Ejercicio 2
Investiga y describe los pasos necesarios para implementar HTTPS en un servidor web de tu elección. Incluye la obtención e instalación de un certificado SSL/TLS, la configuración del servidor para forzar el uso de HTTPS, y la gestión de certificados expirados.
Ejercicio 3
Supón que tienes que alojar tres sitios web diferentes en un único servidor. Describe cómo configurarías sitios virtuales para estos tres dominios, considerando las mejores prácticas de seguridad (por ejemplo, uso de HTTPS, permisos de archivos, y aislamiento entre sitios).
Ejercicio 4
Configura las cabeceras HTTP de seguridad en un servidor web de tu elección. Explica cómo cada cabecera (CSP, X-Frame-Options, X-Content-Type-Options, HSTS) contribuye a la seguridad del servidor y proporciona ejemplos de configuración.
Ejercicio 5
Realiza una simulación donde identificas un ataque DDoS en un servidor web. Explica cómo podrías mitigar este ataque utilizando un firewall de aplicaciones web (WAF) y otros métodos, como servicios de mitigación DDoS.
Ejercicio 6
Describe un escenario en el que un servidor web podría ser vulnerable a un ataque XSS o de inyección SQL. Explica cómo podrías proteger el servidor de estos ataques mediante la validación de entradas y otras configuraciones de seguridad.
Ejercicio 7
Investiga y describe cómo se gestionan las actualizaciones y parches en un servidor web. Explica la importancia de mantener el software actualizado y describe un plan de mantenimiento regular para asegurar la seguridad del servidor.
Ejercicio 8
Investiga el principio de menor privilegio en la gestión de servidores web. Describe cómo aplicarías este principio al configurar los permisos de archivos y directorios en un servidor web para maximizar la seguridad.
Ejercicio 9
Supón que un servidor web está configurado para manejar múltiples subdominios. Describe cómo configurarías los subdominios como sitios virtuales separados, asegurando que cada uno tenga su propia configuración de seguridad y aislamiento.