[TUTORIAL] Internet Information Services | Configuración de IIS 7.5 para alojar múltiples Sitios Web – Parte 1/3
IIS es el rol de servidor de Microsoft que permite alojar Aplicaciones y Sitios Web. Normalmente instalamos este rol cuando utilizamos Sharepoint, servicios de Certificados de Active Directory u otros componentes que requieren de él. Sin embargo, también podemos instalar dicho rol para alojar la web institucional de nuestra empresa.
En algunos escenarios, requerimos configurar varios sitios web, y contamos con solo pocoas direcciones IPs. ¿Cómo configurar en forma segura varios sitios web a la vez en el mismo servidor y con una sola IP disponible pública? Este tutorial intenta explicar, paso a paso, como lograr una configuración standard de un servidor IIS 7.5 con capacidades multi-site, permitiendo subir contenido a cada sitio mediante protocolo FTP.
Este tutorial forma parte de tres entregas. En esta primera parte vamos a realizar toda la preparación del Servidor, Carpetas de Publicación y Cuentas de Servicio.
[toc]
Introducción
Objetivo
El objetivo de esta publicación es demostrar cómo Internet Information Services (IIS) puede brindar un soporte robusto para alojar múltipiles sitios web en modo “Shared Hosting”, brindando protección aislada para cada tenant y acceso para publicación por FTP.
Audiencia
Este documento está dirigido a Consultores, Profesionales IT y personas que desarrollan tareas de Consultoría, Administración y Soporte de Windows Server o que simplemente están interesados en aprender nuevas cosas.
Comentarios y Corrección de Errores
Hemos realizado nuestro mejor esfuerzo para no cometer errores, pero al fin y al cabo somos seres humanos. Si deseás reportar algún error o darnos feedback de qué te pareció esta publicación, por favor no dejes de comunicarte con nosotros a través de correo electrónico a la siguiente dirección: info@tectimes.net.
Alcance
Entender cuál es el alcance de la publicación nos ayuda a tener una expectativa real de lo que encontraremos en la misma, de modo tal que quién lo lee no espere ni más ni menos de lo que encontrará. Vamos a describir el escenario de trabajo, tecnologías alcanzadas y plan de trabajo en alto nivel.
Objetivo Técnico
El objetivo técnico de esta publicación es poder realizar la instalación del rol IIS 7.5 y la configuración de varios sitios web utilizando las posibilidades “multi-site” de este rol en Windows Server 2008 R2, de modo tal que:
- Se puedan alojar varios sitios web por el protocolo HTTP simultáneamente.
- Se pueda usar una sola dirección IP pública (privada para fines de laboratorio).
Como resultado, tendremos una implementación básica de IIS 7.5 y la posibilidad de alojar diferentes sitios web (que pueden ser clientes) bajo el mismo puerto y dirección IP.
Tecnologías Alcanzadas
Esta publicación puede aplicarse a:
- Internet Information Services 7.
- Internet Information Services 7.5.
- Windows Server 2008 Standard.
- Windows Server 2008 Enterprise.
- Windows Server 2008 Datacenter.
- Windows Server 2008 R2 Standard.
- Windows Server 2008 R2 Enterprise.
- Windows Server 2008 R2 Datacenter.
Escenario de Trabajo
El diagrama de trabajo propuesto es el siguiente:
IIS01
Será nuestro servidor IIS. Contamos con un equipo virtualizado con el siguiente hardware:
- 2 Procesadores.
- 1 GB de Memoria RAM.
- 1 Disco de 80 GB para el sistema operativo: Unidad C.
- 1 Disco de 80 GB para los Sitios Web: Unidad E.
- 1 Placa de Red.
Dicho equipo cuenta con el siguiente software:
- Windows Server 2008 R2 con todos los updates.
Los datos del equipo son los siguientes:
- Nombre: IIS01
- Dirección IP: 192.168.1.235 (observese que tiene una sola)
- Gateway: 192.168.1.1
- Grupo de Trabajo: WORKGROUP
Gateway / Firewall
Nuestro Gateway nos brinda seguridad desde el exterior y la dirección IP pública a través de NAT. Para nuestro laboratorio no tiene mucha importancia, pero es importante para ambientes pre-productivos o de producción. Los datos de nuestro Firewall con los siguientes:
- Dirección IP: 192.168.1.1
- Dirección IP Pública: [RESERVADA]
- Publicaciones de servicio: ninguna.
DESKTOP01
Además, contamos con un equipo de escritorio para hacer la prueba de apertura de páginas web con los siguientes datos:
- Dirección IP: 192.168.1.241
DNS
Por razones de simplicidad de este tutorial, no vamos a configurar publicaciones para el servidor Web. La forma de probar que nuestra solución es capaz de alojar varios sitios web será utilizando un servidor DNS de Microsoft y creando las zonas DNS de los dominios que utilizaremos como prueba, y creando su correspondiente registro “WWW”. De esta forma, cuando el equipo DESKTOP01 intente abrir una de ellas, el resultado apuntará a nuestro servidor IIS01 de la LAN.
Esto no cambia en nada el objetivo del tutorial, dado que seguimos respectando las premisas del mismo. Esta simplicidad se hace solo para que el artículo no abarque ítems que no son el foco de la misma.
Por esta razón, nuestro equipo DESKTOP01 tendrá como servidor DNS a este DNS interno, y dentro del DNS interno crearemos las zonas públicas necesarias para que los siguientes sitios, al ser buscados, tengan apuntamientos internos:
Fuera de Alcance
Se deja fuera de alcance de este tutorial:
- La configuración de Firewall de frontera (TMG, ISA u otros).
- La publicación de los sitios web a través del Firewall de frontera.
- La utilización de AppPoolIdentity de IIS 7 o superior. Para este tutorial se han elegido utilizar cuentas locales del sistema operativo.
- La infraestructura de Dominio: para este tutorial se utiliza un servidor stand-alone.
Plan de Trabajo
El plan de trabajo completo es el siguiente:
- Preparación del Servidor.
- Instalación de Feature IIS 7.5 Server de Windows Server 2008 R2.
- Configuración de Carpetas de Publicación.
- Configuración de Cuentas de Servicio.
- Configuración de Sitios Web.
- Configuración de DNS Interno para Pruebas.
- Prueba de Acceso a Sitios Web sin Firewall.
- Configuración de publicación FTP.
- Prueba de Acceso a FTP sin Firewall.
- Configuración de Firewall de Windows.
- Prueba de Acceso a Sitios Web y FTP con Firewall.
En esta primera parte, se desarrollarán los primeros puntos hasta “Configuración de Cuentas de Servicio”. El resto de las entregas se encuentran en “Publicaciones Relacionadas” al final de la página.
Desarrollo de la parte 1/3 del Tutorial
Preparación del Servidor
La preparación del servidor es la instancia donde vamos a dejar lista la estructura y configuración de:
- Discos.
- Red.
- Firewall.
Discos
Nuestra estructura de discos es la siguiente:
Contamos con una Unidad C para el sistema operativo, y una Unidad E para los datos de nuestros sitios web. Es importante contar con una unidad separada para estos últimos datos, dado que nos brinda mayor aislamiento.
El tamaño de las unidades dependerá de la información que vayamos a alojar dentro. En nuestro caso, elegimos para este laboratorio dos discos de 80 GB.
Red
Contamos con, al menos, una placa de red con dirección IP privada (de nuestra LAN). Los protocolos habilitados para dicha placa son los siguientes:
Como vemos, hemos deshabilitado cualquier protocolo que no sea afin a nuestro objetivo: un servidor Web. Hemos dejado solamente dos protocolos habilitados:
- QoS Packet Scheduler: relacionado con calidad y control de tráfico de red.
- Internet Protocol Version 4 (TCP/IPv4): por supuesto, el protocolo IPv4.
El objetivo de deshabilitar otros protocolos es reducir la superficie de ataque de nuestro servidor.
Firewall de Windows
Para simplificar la configuración inicial, vamos a deshabilitar nuestro Firewall:
Instalación de Feature IIS 7.5 Server de Windows Server 2008 R2
Llegó el momento de realizar la instalación del rol IIS 7.5 sobre nuestro Windows Server 2008 R2. Tenemos varias formas de hacerlo:
- Mediante “Add or Remove Roles” de Windows Server.
- Mediante Microsoft Web Plataform.
Para este caso, vamos a elegir la primera opción. Para ello vamos a ir a “Server Manager” y elegiremos el grupo “Roles” y la opción “Add Roles”:
Se abrirá el asistente para agregar roles. Vamos a darle siguiente:
Vamos a elegir el rol “Web Server (IIS)”:
El asistente nos mostrará una introducción al rol seleccionado. Le damos siguiente:
Llegó el momento de elegir los servicios del rol a instalar. Si bien no es el objetivo del tutorial explicar cuáles son los servicios del rol IIS, vamos a seleccionar algunos que comúnmente son utilizados en entornos de desarrollo / producción de sitios y aplicaciones web Microsoft. Vamos a elegir los siguientes servicios:
Como vemos, los servicios son varios:
- Static Content.
- Default Document.
- Directory Browsin.
- HTTP Errors.
- HTTP Redirection.
- ASP.NET.
- .NET Extensibility.
- ISAPI Extensions.
- ISAPI Filters.
- HTTP Logging.
- Request Monitor.
- Basic Authentication.
- Request Filtering.
- Static Content Compression.
- Dynamic Content Compression.
- IIS Management Console.
- FTP Service.
- FTP Extensibility.
En la próxima pantalla se nos mostrará un resumen de la elección, y le damos en Install:
Una vez finalizada la instalación, le damos Close al asistente.
Ya tenemos el rol instalado y podemos comprobarlo si abrimos un navegador local en el servidor e ingresamos como URL “Localhost” (sin comillas):
Configuración de Carpetas de Publicación
En este momento vamos a configurar las carpetas donde publicaremos nuestra información de sitios web visible para todos. Al finalizar este ítem, tendremos realizada una estructura de carpetas ordenada y criteriosa que nos permite identificar rápidamente el sitio web en cuestión y, además, nos permite aplicar permisos solo a los recursos que debemos aplicar, evitando posibles problemas de seguridad.
Criterio de Ordenamiento
Ya tenemos instalado el rol de IIS. El “Default Web Site” que viene configurado por defecto aloja sus archivos en la carpeta “C:\inetpub\wwwroot\”. Ahora bien, nosotros vamos a alojar varios sitios web, y todos no pueden apuntar al mismo lugar de nuestro disco.
Antes de comenzar a trabajar con otros sitios web, debemos definir nuestra estructura ordenada de carpetas para la publicación de contenido de cada uno de estos sitios web. Para esto tenemos reservado el espacio del disco “E”. Para explicar el criterio de ordenamiento, vamos a suponer el siguiente escenario:
- Podemos tener varios clientes distintos en el mismo servidor web que estamos configurando.
- Cada cliente puede tener más de un sitio web.
- Debemos velar porque la estructura sea ordenada y con nombres descriptivos y claros.
- El contenido del sitio web no solo son los archivos de publicación del sitio, sino también los logs que éste genera.
En base a estas condiciones, vamos a realizar la siguiente estructura de carpetas:
-
Nivel 1 -> “Nombre de Cliente”
-
Nivel 2 -> “Nombre de Sitio Web”
- Nivel 3 -> Carpeta de Publicación y Logs.
-
Vamos a poner manos a la obra. Primero, en el disco “E”, creamos una carpeta que se llame “Websites”:
Esta carpeta alojará toda la información de los clientes y sus sitios web. Ahora bien, por temas de seguridad, vamos a eliminar toda “herencia” que tenga esta carpeta del disco origen “E” y, luego, eliminaremos los usuarios “genéricos”.
Modificación de Permisos en Carpeta Raíz
Para esto, vamos a las propiedades de la carpeta solapa seguridad:
Allí haremos clic en “Advanced”:
Luego, haremos clic en “Change Permissions” y deshabilitaremos la opción “Include inheritable permissions…”:
Cuando destildemos la opción, nos aparecerá un caretel con varias opciones, y le daremos en “Add” (para mantener los permisos actuales, si bien ya no los heredamos):
Aceptamos dos veces (OK) y volvemos a la primer pantalla del cuadro de permisos.
Muy bien, hemos deshabilitado la heredación de permisos para que la carpeta “Websites” tenga independencia y esto nos permita tener bien ajustada la seguridad de nuestras carpetas de publicación. El paso siguiente es eliminar los usuarios existentes que no deben estar en esta carpeta: solo debemos dejar a los Administradores, quienes tendrán acceso completo al contenido.
Ahora en el cuadro abierto le vamos a dar al botón “Edit”:
En el cuadro “Permissions for Websites” vamos a dejar SOLO a los Administradores (con FULL ACCESS) y a los otros dos grupos, llamado “System” y “Creator Owner” sin hacerle modificaciones a sus permisos:
Luego de esta acción, aceptamos dos veces para salir de las opciones de seguridad.
Creación de Arbol de Directorios
Ya hemos creado nuestra carpeta origen, hemos eliminado la herencia de permisos y hemos eliminado los usuarios que no debían estar. Ahora vamos a crear nuestra estructura de carpetas.
A modo didáctico, supongamos que tenemos los siguientes clientes y los siguientes sitios web para cada uno de nuestros clientes:
-
Juan:
-
Pablo:
-
Vanesa:
La tarea que nos queda, en base a estos datos, es crear las carpetas para los clientes y para los sitios web.
Creación de Carpeta para Clientes
Para cada uno de estos clientes, vamos a crear una carpeta dentro de “Websites”:
Creación de Carpetas para Sitios Web
Ahora bien, dentro de cada uno de nuestros clientes debemos crear las carpetas de publicación para los sitios web. Sin embargo, la publicación de archivos del sitio web no es lo único que un sitio web aloja, dado que también tenemos los archivos de Logs que genera este sitio y también, en un futuro, quizás querremos alojar más cosas.
Por este motivo, para cada sitio web, vamos a ponerle un nombre (que será el nombre de dominio DNS) y dentro vamos a crear una carpeta de Logs y una carpeta de Publicación, utilizando los siguientes nombres:
- Para Logs: logs
- Para Publicación: wwwroot
En nuestro esquema, nos quedaría de la siguiente manera:
-
Juan:
-
sitio1.com
- logs
- wwwroot
-
sitio2.com
- logs
- wwwroot
-
-
Pablo:
-
sitio3.com
- logs
- wwwroot
-
-
Vanesa:
-
sitio4.com
- logs
- wwwroot
-
sitio5.com
- logs
- wwwroot
-
En Windows Explorer quedaría de la siguiente manera:
Configuración de Cuentas de Servicio
Muy bien. Ya hemos instalado el rol IIS, y hemos creado la estructura de carpetas con la seguridad necesaria y limitada a administradores. Si bien luego haremos más cambios, por ahora esto es suficiente. Llegó el momento de crear las cuentas de servicio para cada uno de nuestros Sitios Web.
Al finalizar este paso, tendremos cuentas de usuario locales (que usaremos para servicios) para cada uno de nuestros sitios web. Aunque un “cliente” tenga varios sitios web, la identidad de cada uno de ellos será diferenciada a través de estas cuentas de servicio.
Dichas cuentas serán utilizadas en diferentes puntos de configuración de este tutorial, razón por la cual este paso es muy importante.
Introducción a Cuentas de Servicio
Las cuentas de servicio serán las que en realidad corran la Aplicación ó Sitio Web de cada uno de nuestros clientes y serán, internamente, los usuarios que naveguen en nuestra aplicación. Cuando un usuario externo entra a nuestro sitio, en realidad estará visitándolo en nombre de este usuario de servicio. Además, muchas acciones que realiza sobre otros componentes se “impersonalizan” en nombre de dicho usuario. Esto significa que para cada sitio web vamos a crear una cuenta de servicio diferenciada y única.
Estas cuentas de servicio las utilizaremos en el siguiente paso: aquí solo las crearemos y las configuraremos dentro de los permisos a asignar. Cuando habalmos de “configurar”, estamos hablando de ingresarlas a las carpetas donde deberían tener derechos de lectura.
El concepto de cuentas de servicio creadas manualmente muchas veces es reemplazada por la utilización de cuentas propias del IIS, las cuales brindan una seguridad muy interesante. Así también, las cuentas de servicio pueden ser optimizadas con la funcionalidad de “Managed Accounts” de Windows Server 2008 R2. Sin embargo, y para este tutorial, hemos elegido el modelo de cuentas de servicio creadas manualmente y asignadas a mano para cada sitio web que creemos.
Creación de Cuentas de Servicio
Como dijimos, vamos a crear una cuenta de servicio para cada sitio web. Nuestros sitios web son los siguientes:
- sitio1.com
- sitio2.com
- sitio3.com
- sitio4.com
- sitio5.com
Ante todo, debemos ponernos de acuerdo en la nomenclatura que elegiremos para evitar confusiones y mantener un orden en las cuentas de servicio. Vamos a elegir agregarle el prefijo “iis_” a cada usuario, y luego le pondremos el nombre de dominio. Quedaría de la siguiente manera:
- sitio1.com -> iis_sitio1.com
- sitio2.com -> iis_sitio2.com
- sitio3.com -> iis_sitio3.com
- sitio4.com -> iis_sitio4.com
- sitio5.com -> iis_sitio5.com
Para crearlos, vamos a ir a la consola “Local Users and Groups” en nuestro Windows Server. Nuestro primer usuario creado luce así:
Por cada uno de los sitios, vamos a crear el usuario correspondiente y le asignaremos una contraseña, la cual debemos documentar:
Configuración en Permisos para las Cuentas de Servicio
Una vez creados los usuarios, debemos configurar sus permisos. Los primeros permisos que configuraremos serán a nivel archivos de Windows Server.
Cada uno de estos usuarios tendrá derechos de lectura (y nada más que de lectura) en las carpetas wwwroot de su sitio web. Esto es así, dado que luego configuraremos a dicho usuario, para cada sitio, como usuarios de servicio para el sitio web en la consola IIS. Si no le damos permisos para leer (al menos) el contenido de publicación, el sitio web no mostrará contenido y dará error.
Manos a la obra: por cada carpeta wwwroot de cada sitio web, vamos a configurar con derechos de lectura al usuario recientemente creado que corresponda con dicho sitio web. Por ejemplo, para el sitio web “sitio1.com”, carpeta “wwwroot”, tenemos el usuario “iis_sitio1.com”:
Haremos lo mismo con el resto de los sitios, hasta que tengamos en cada carpeta wwwroot de publicación de cada sitio web, su usuario configurado con derechos de lectura.
Posible pregunta
Quizás una posible pregunta sea: ¿por qué un usuario distinto para cada sitio? La respuesta, si bien la hemos adelantado en puntos anteriores, es fácil: la idea es no permitir el salto de privilegios y que un sitio web “vea” cosas del otro. Con esta configuración, nos garantizamos que el usuario que corre como “servicio” para cada sitio web no tiene derechos ni siquiera de lectura sobre otra carpeta del sistema operativo o de otro sitio web.
Conclusiones
Hasta aquí hemos realizado la preparación del servidor, de los directorios de publicación y de las cuentas de servicio. En la entrega 2 de este tutorial seguiremos con la configuración de los sitios web.
Excelente tutorial! En la empresa donde trabajo estabamos en busca de buenas prácticas y ordenadas para alojar muchos sitios web en algunos servidores, pero no teníamos una referencia de orden de carpetas y permisos tan clara como la que expusiste. Excelente tutorial! Una pregunta: ¿me conviene tener mis servidores IIS en dominio o fuera de dominio? Gracias.
Hola Marcelo! Antes que nada, muchísimas gracias por tu contribución y disculpanos la demora en poder contribuir en la respuesta. Siempre la recomendación es que los servidores trabajen en un ámbito de seguridad integrado, es decir con Active Directory Domain Services (en caso de servidores Windows, como estamos exponiendo en esta publicación). Esto te permite elegir entre tener cuentas centralizadas o no, pero principalmente te permite manejar un escenario de políticas de grupo (GPOs) e integración de seguridad que de otro modo no tendrías. Un abrazo!!!
Hola, excelente post!!!!!!! Hace mucho tiempo buscaba esclarecer como puedo realizar una configuración segura de sitios web. La misma pregunta que Marcelo: conviene usar AD o sin AD? Salu2!
Hola Luis! Antes que nada, muchas gracias por contribuir y participar en los comentarios. Tal como le comentaba a Marcelo en la pregunta anterior, la recomendación es que los servidores trabajen en un ámbito de seguridad integrado, es decir con Active Directory Domain Services (en caso de servidores Windows, como estamos exponiendo en esta publicación). Esto te permite elegir entre tener cuentas centralizadas o no, pero principalmente te permite manejar un escenario de políticas de grupo (GPOs) e integración de seguridad que de otro modo no tendrías. Un abrazo!!!
[…] [TUTORIAL] Configuración de IIS 7.5 para alojar múltiples Sitios Web – Parte 1/3 […]
vaya pero que atención a esta pagina que ni responde a las preguntas de los usuarios que mala onda, yo les responderé, si su sitio albergara usuarios dentro del dominio es decir aplicaciones que funcionen así pues deben de hacerlo con AD, si no no!
Hola Lestat! Siempre es bueno recibir un “tirón de orejas” de la comunidad. Son muchos correos los que se reciben y a veces quedan “colgadas” respuestas. Te agradezco infinitamente por tu comentario dado que me hiciste “saltar de la cama” para responder las preguntas anteriores jajaja! Es buena diferenciación la que realizás, identificando si ilas aplicaciones albergarán usuarios dentro del dominio o no. No obstante, para un escenario de “hosting compartido” (como el que plantea la publicación original) una recomendación estándar es que los servidores trabajen en un ámbito de seguridad integrado, es decir con Active Directory Domain Services (en… Read more »