[TUTORIAL] Internet Information Services | Configuración de IIS 7.5 para alojar múltiples Sitios Web – Parte 3/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 tercera y última parte vamos a realizar toda la configuración de las funcionalidades FTP. Para mayor información sobre la introducción y otras partes, remitirse al final del documento.
[toc]
Introducción
Esta es la parte 2/3 de la publicación de este tutorial. Para acceder a las otras partes, por favor revise las Publicaciones Relacionadas al final de la página.
Objetivo del Tutorial
Como recordatorio, 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.
Alcance
Los detalles del alcance están en la parte 1/3 de este tutorial. Para recordar detalles del Escenario de Trabajo, Fuera de Alcance y otros detalles, remitirse a dicha parte al final de la publicación, en “Publicaciones Relacionadas”.
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.
Plan de Trabajo
El plan de trabajo para la segunda parte 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 tercera y última parte, se desarrollarán los puntos desde “Configuración de publicación FTP” hasta el final. El resto de las entregas se encuentran en “Publicaciones Relacionadas” al final de la página.
Desarrollo de la parte 3/3 del Tutorial
Configuración de publicación FTP
Muy bien, ya hemos realizado la configuración de sitio en nuestro IIS 7.5. Para el contenido de ejemplo, hemos pegado nosotros un archivo index.html en cada directorio wwwroot de los sitios web. Ahora bien: ¿cómo hacemos si debemos permitir a otros usuarios, no administradores, la subida de contenido a cada uno de los sitios web?
Supongamos que tenemos clientes, los cuales hacen cambios semanales en sus sitios web. En nuestro caso, Pablo tiene un solo sitio web, pero Vanesa tiene dos. El ordenamiento de carpetas y la jerarquía utilizada fue estratégicamente pensada para este escenario: que cada usuario pueda, aisladamente, subir y ver su contenido sin afectar el de otros.
Utilizaremos el protocolo “FTP” para permitir a los usuarios subir su contenido en forma remota. Para esto, debemos configurar algunas cosas en nuestro IIS.
Creación de Cuentas FTP
Por cada cliente, vamos a crear (por lo menos) una cuenta FTP. Esta cuenta FTP es una cuenta de usuario de Windows la cual luego tendrá derechos y será configurada con un directorio virtual FTP. Para comenzar, entonces, vamos a poner manos a la obra.
Por una cuestión de ordenamiento, las cuentas de Windows que serán luego usadas como FTP tendrán el surfijo “ftp_” y luego tendrá el nombre de usuario o de cliente. Nosotros vamos a crear, para este tutorial, las siguientes cuentas:
- Usuario/Cliente Juan: ftp_Juan
- Usuario/Cliente Pablo: ftp_Pablo
- Usuario/Cliente Vanesa: ftp_Vanesa
Cada usuario tendrá una contraseña asignada que, por supuesto, deberá saber:
El listado completo de cuentas sería el siguiente:
Creación de Grupo FTP
Por otro lado, vamos a crear un grupo de Windows que se llamará “FTP_Users” y que contendrá a los usuarios que tendrán una cuenta FTP. Este grupo será utilizado, luego, en la configuración para facilitar la creación de los directorios virtuales.
El grupo quedará de la siguiente forma:
Por supuesto, cuando agreguemos un nuevo usuario FTP vamos a tener que agregarlo a este grupo, sino no podrá ingresar.
Creación de Directorio Raiz FTP
Nuestro FTP va a ser un único sitio FTP, que va a tener aislamiento de usuarios. Esto es gracias a una funcionalidad propia del IIS 7.5. Ahora bien, vamos a necesitar un directorio “vacío” que va a ser el directorio raíz de nuestro sitio FTP. En realidad, este directorio no se utilizará para nada, por eso tendrá que estar vacío y con mínimos privilegios.
Vamos a crear en el disco “E” de nuestro servidor una carpeta que se llama “FTPRoot”:
Como hicimos antes con el directorio Websites, vamos a quitar la herencia de permisos. Para ello hacemos botón derecho sobre la carpeta “FTPRoot” y luego vamos a propiedades, y elegimos la solapa seguridad:
Allí elegimos “Advanced” y luego “Change Permissions”:
Luego vamos a destildar la opción “Include inheritable permissions…”:
Cuando lo destildemos aparecerá un cartel, al cual le vamos a dar “Add”:
Luego aceptaremos dos veces para volver a la solapa “Security”, y allí elegiremos “Edit”:
Tal como hicimos con “Websites”, vamos a eliminar los usuarios que no deben estar allí, dejando solo los siguientes:
Nótese que:
- No se modificaron los permisos para “Creator Owner”, ni para “System” ni para “Administrators”.
-
Se agregó el grupo “FTP_Users” creado en el paso anterior con derechos de:
- Read & Execute.
- List folder contents
- Read.
Aceptamos y cerramos las propiedades de la carpeta. En resumen, ya tenemos creado nuestro directorio raíz y preparados los permisos para continuar al próximo paso de preparación de nuestro sitio FTP para que cada usuario suba contenido a su sitio.
Creación de Sitio FTP
Aquí vamos a crear el sitio FTP (recordemos que será uno solo) para luego configurar el aislamiento de usuarios.
En la consola IIS vamos a pararnos sobre el nodo “Sites” y elegiremos la opción “Add FTP Site”:
En el asistente que se abrirá vamos a completar los primeros datos, indicando el nombre del sitio web (puede ser cualquiera) y la ruta hacia nuestra carpeta “FTPRoot”:
En el próximo paso, luego de hacer “Next”, vamos a seleccionar el puerto 21 (viene por default) y vamos a indicarle que no requiera SSL (podríamos, pero en este tutorial no):
En el último paso, vamos a indicar que la autenticación será “Básica”, y que permitiremos acceso de solo lectura al grupo de usuarios “FTP_Users”:
Una vez hecho esto, tendremos nuestro sitio FTP preparado para comenzar a configurarlo:
Configuración de Sitio FTP para Aislamiento de Usuarios
Nuestro sitio FTP está creado pero debemos configurar la funcionalidad de Aislamiento de Usuarios. Esta funcionalidad tiene varias opciones, y la que elegiremos nosotros nos permitirá que cada usuario acceda a un directorio en base a su nombre de usuario. Este directorio, por supuesto, será el de su usuario que contiene todos los sitios web dentro.
Nos pararemos en el sitio creado “FTP Site” y elegiremos la opción “FTP User Isolation”:
Dentro de esta opción, elegiremos la opción “Isolate Users” y dentro “User name directory”:
La función de aislamiento de usuarios por nombre de directorio tiene las siguientes características:
- Se configura un directorio físico o virtual, en la raíz del sitio FTP, llamado “LocalUser” (para nuestro caso de cuentas locales).
- Se configura, dentro del directorio LocalUser, directorios físicos o virtuales con el nombre del usuario (debe coincidir con el creado en pasos atrás, el del prefijo “ftp_”).
- El usuario, cuando se loguea, es aislado y direccionado a su directorio sin posibilidades de escalamiento de permisos.
En nuestro caso, vamos a crear directorios virtuales (no físicos) para las carpetas “LocalUser” y la de cada usuario.
Para ello, en la raíz del sitio FTP, vamos a hacer botón derecho y elegir “Add Virtual Directory”:
Ingresaremos como nombre del directorio virtual “LocalUser” y el path será igual que el anterior: la carpeta raíz FTPRoot del disco “E”:
Nótese que se creó la carpeta virtual “LocalUser” con algunas opciones dentro:
Si ingresamos a la opción “FTP Authorization Rules” vamos a verificar que los permisos son los mismos que elegimos para la raíz del sitio FTP: solo lectura para el grupo “FTP_Users”:
Muy bien, dentro del directorio virtual LocalUser comenzaremos a crear los directorios virtuales para cada uno de los usuarios, lo cual veremos en el próximo punto.
Creación de Directorios Virtuales para cada Usuario/Cliente
Ya tenemos nuestro sitio FTP configurado y listo para aislar los usuarios/clientes. En nuestro caso, tenemos tres: Juan, Pablo y Vanesa. Cada uno de estos “Clientes” tiene un usuario de Windows creado, con el prefijo “ftp_”. Recordemos que para que el aislamiento funcione en el FTP de IIS 7.5, debemos hacer coincidir el nombre del directorio virtual que crearemos ahora con el nombre del usuario de Windows.
Vamos a comenzar. Sobre la carpeta virtual “LocalUser” vamos a crear otro directorio virtual:
En el asistente ingresaremos los datos del usuario para el cliente Juan:
Nótese que el alias coincide con el nombre de usuario, y que el directorio físico lo apuntamos a la carpeta raíz de los sitios web para el cliente Juan. Una vez seleccionadas estas opciones, le damos ok. Se creará el directorio virtual quedando de la siguiente manera:
Lo próximo que debemos hacer es configurar los permisos para esta entrada. Ingresaremos, primero, a “FTP Authorization Rules” para la carpeta virtual “ftp_Juan”:
Seleccionaremos el permiso heredado de lectura para el grupo “FTP_Users” y lo eliminaremos, con el botón “Remove” del panel derecho. Una vez hecho esto, las reglas FTP Authorization quedarán vacías.
Crearemos una nueva, haciendo clic en “Add Allow Rule”:
En esta regla que creamos, debemos indicar que en este directorio virtual el usuario ftp_Juan tiene permisos de lectura y escritura, y solamente él los tendrá (no todo el grupo FTP). Para ello ingresamos los datos como en la siguiente figura:
Una vez ingresadas las opciones, aceptamos la pantalla.
Los mismos pasos realizados hasta aquí debemos hacer por cada usuario restante: Pablo y Vanesa. La foto final será la siguiente:
Como se ve en la figura, cada usuario tiene su directorio virtual el cual está apuntando a su directorio físico del disco “E” carpeta “Websites”. Por supuesto, cada directorio virtual tiene sus reglas de autorización FTP (FTP Authorization Rules) configuradas para su usuario.
Muy bien, ya hemos configurado las reglas de autorización, pero ahora nos falta un detalle importante: los permisos NTFS. Para ello, avanzaremos en el siguiente paso.
Configuración de permisos NTFS para aislamiento de usuarios FTP
La acción que nos falta realizar es darle permisos NTFS a cada usuario en su carpeta, permitiéndole leer y grabar datos. Estos permisos se heredan a las carpetas hijas, permitiendo que Juan acceda a leer y escribir en todas las carpetas de sus sitios web que tiene. Si en el futuro se agrega alguno más, no tendremos que hacer nada para que también tenga derechos sobre la nueva.
Para hacer esto, vamos a tomar como ejemplo al cliente Juan y luego lo replicaremos al resto de los clientes/usuarios. Iremos al disco “E” carpeta “Websites” y seleccionaremos la solapa seguridad de las propiedades de la carpeta “Juan”. Agregaremos al usuario “ftp_Juan” con todos los permisos (menos FULL CONTROL) para esta carpeta:
De esta forma, la carpeta “Juan” (que contiene sus sitios web) tendrá permisos de lectura y escritura a nivel NTFS asignados al usuario ftp_Juan. Lo mismo debemos hacer con el resto de las carpetas Pablo y Vanesa, por supuesto con sus usuarios “ftp_Pablo” y “ftp_Vanesa” respectivamente.
¡Muy bien! Ya solo queda probar nuestro acceso FTP, cosa que haremos en el siguiente ítem.
Prueba de Acceso a FTP sin Firewall
Ya hemos configurado nuestro aislamiento FTP para cada usuario. Ahora vamos a probarlo. El resultado esperado es que:
-
Cuando hagamos login a través de FTP con el usuario ftp_Juan, veamos y podamos subir archivos a los sitios:
- Sitio1.com
- Sitio2.com
-
Cuando hagamos login a través de FTP con el usuario ftp_Pablo, veamos y podamos subir archivos al sitio:
- Sitio3.com
-
Cuando hagamos login a través de FTP con el usuario ftp_Vanesa, veamos y podamos subir archivos a los sitios:
- Sitio4.com
- Sitio5.com
Para ello, desde nuestro equipo DESKTOP01, vamos a abrir un cliente FTP (en nuestro caso un Windows Explorer) e ingresaremos la dirección de nuestro servidor FTP: 192.168.1.235:
Nos pedirá un nombre de usuario y contraseña:
Una vez ingresados los de Juan, haremos “Log on” y veremos que aparece:
Efectivamente, aparecieron las carpetas de los sitios: sitio1.com y sitio2.com como esperábamos! Intentaremos eliminar el archivo de publicación dentro del wwwroot del sitio1.com:
Veremos que el archivo se eliminó correctamente:
Y si ingresamos al sitio www.sitio1.com obtendremos un error (al no estar el archivo index.html):
De esta forma, estamos habilitando a los usuarios/clientes a subir y eliminar contenido a su sitio web sin necesidad de intervención del administración, algo que es muy valioso para ellos y para nosotros!!
Por cada usuario/cliente/sitio web que agreguemos, debemos simplemente seguir los pasos realizados hasta ahora, los cuales serán resumidos al final del tutorial.
Configuración de Firewall de Windows
Hasta ahora hemos realizado todas las configuraciones sin Firewall. Ahora vamos a repasar, rápidamente, que reglas son necesarias para habilitar en el Firewall de Windows (por ejemplo) para segurizar nuestro servidor y reducir la superficie de ataque.
Reglas necesarias de Ingreso
Para ingreso de datos, necesitamos las siguientes reglas habilitadas del Firewall de Windows:
Reglas necesarias para Egreso
A priori, no es necesario habilitar ninguna regla de Egreso.
Creación de nuevos Sitios / Clientes
La gran pregunta, quizás, es: ¿y una vez montado todo esto que hacemos cuando creamos nuevos sitios / usuarios? En vistas a esto, aquí se dejarán los pasos globales a seguir en dichos casos.
Si el sitio web creado es de un usuario existente:
- Crear la cuenta de servicio (cuenta “iis_”).
- Crear los directorios para el sitio web (logs y wwwroot).
- Asignar los permisos a los directorios para el usuario “iis_”.
- Crear el sitio web.
- Configurar los Identities de navegación anónima y Application Pool con el usuario “iis_”.
Si el sitio web creado es de un nuevo usuario, además de los ítems anteriores:
- Crear la carpeta del Cliente (raíz).
- Crear la cuenta de usuario FTP para el cliente.
- Configurar el directorio virtual para el usuario FTP.
- Asignar los permisos para la cuenta FTP dentro del IIS y en los directorios físicos.
Conclusiones
El rol IIS de Windows Server 2008 R2 nos provee grandes funcionalidades para alojar y administrar múltiples sitios web en un mismo servidor y con una misma IP pública. Estas funcionalidades no se limitan a la publicación de sitios web, sino a todo tipo de aplicaciones .Net y de otros Frameworks (como PHP, Perl, etc).
En este tutorial hemos recorrido todos los pasos para configurar múltiples sitios web aprovechando las posibilidades multi-sitio de IIS, y hemos configurado su modo de publicación y administración de contenido remota a través de otra funcionalidad del rol IIS: FTP.
Se han dejado fuera, por supuesto, otros aspectos más finos de segurización y optimización, los cuales quedarán para otro artículo o tutorial de TecTimes.
¡Gracias a todos y espero que les haya resultado de utilidad!
Referencias y Links
Hola Pablo, te filicito por el tutorial, paso a paso, muy instructivo, pero al seguirlo, cuando utilizo alguna aplicacion tipo wordpress o Joomla tengo problemas al configurar la base de datos mysql, entiendo que es porque falntan permisos en la carpeta data de mysql, pero cuales serian los justos para no dar mas de la cuenta? porcierto otra duda que tengo es que si no vale la pena usar usuarios de tipo builtin (los que vienen ya definidos en el server) ya que no utilizan contraseña?
Hola Javier! En relación a tu pregunta sobre aplicaciones tipo WordPress o Joomla, deberías verificar los pre-requisitos de esas aplicaciones, ya sea que necesitan PHP, módulos de PHP para MySQL (PHP MODULES) u otro aspecto de configuración. Verificá estos links para WordPress: http://www.microsoft.com/web/wordpress y http://www.iis.net/learn/application-frameworks/install-and-configure-php-applications-on-iis/install-wordpress-on-iis. Para Joomla hay también artículos al respecto! En relación a tu pregunta sobre usar usuarios tipo builtin que no tienen contraseña, es una excelente pregunta. En muchas organizaciones, es un requisito que la contraseña no esté “administrada” por ningún administrador dado que se considera un riesgo de seguridad. Podrías utilizar tipos de usuario builtin o… Read more »
Pablo esta muy bueno el tutorial. Me quedó una duda, yo uso distintos puertos para los sitios. La pregunta es lo mismo o trae algun problema si no uso el puerto 80. Saludos
hola excelente turorial …gracias
te queria consultar ..
ralize los pasos que mencionas
un sitio funciona bien
el otro no encuentra contenido , ahora si le cambio a IP privada ,,, muestra el contenido pero sin mostrar la url
gracias saludos
Hola, muy buen tutorial pero me quede atascado en las DNS, no me podrías dar un enlace para poderlo resolver.
He leído infinidad de manuales y tutoriales, y en ninguno he encontrado la solución a mi problema. Tengo un servidor Windows _Server 2008 que actúa como PDC de un dominio local, por lo que tiene Active Directory, y en el que también tengo instalado IIS 7 como servidor web para los sitios webs de mi desarrollo de y algún cliente externo. Cuando todo esto operaba bajo Windows Server 2003, no tenía problema, se actualizaban los webs vía ftp Pasivo. Ahora, no he encontrado NINGUNA estructura que me permita autenticar a los usuarios y estoy trancado desde hace días. Lamentablemente todos… Read more »
Estimado Pablo. Desde hace 15 días me encuentro absolutamente estancado con el tema de FTP. Actualmente tengo un Servidor Windows Server 2008, que además de ser controlador primadio de dominio local (PDC) se utiliza para hospedar mis sitios webs. Sin embargo no encuentro la forma que pueda instalar el servicio FTP (recuerda que tengo allí Active Directory) para que pueda actualizar desde FTP pasivo los sitios online, tanto yo, como otros desarrolladores que trabajan conmigo. Hace 2 meses atrás tenía todo funcionando perfectamente en Windows Server 2003, MISMA ESTRUCTURA, pero … al cambiar por 2008 R2, todo lo que debería… Read more »
Muy buen material, realmente me sirvió para la configuración de uno de mis servidores. Gracias
Esta muy completo y explicas muy bien te felicito. Gracias
Saludos y gracias por la información he probado realizarlo en IIS 6.1 en un servidor virtual en Windows Azure endpoind 20 y 21 y no me funciona algún dato que puedas aportarme, mil gracias.
Mi tercnico del servidor renuncio y me quede solo con este servidor IIS con Windows 7. Esl sistema funciona a la perfeccion, el problema es que no entiendo como esta corriendo el server, porque yo no tengo ip fija o estatica y mi tecnico contrato algo llamado NO-IP para obtener la ipdinamica en una variable de acceso o link, y no se si el coloco algo de dns 1,2,3,4,5 llamado ns1, 2, 3, 4, 5 de noip. La pregunta es como funcionan el hosting name y los dns para que la web salga y no trabaje solo como una intranet.… Read more »
Me sirvió mucho, gracias 🙂
Gracias. Muy explicito tu tutorial.
Muchas gracias Arie!
Amigo muchas gracias por el tutorial, pero tengo un problema.
Lo que necesito es que al momento de ingresar al FTP no aparezcan las carpetas de los otros sitios, sino solo dle sitio al que le di permisos
Hola , me podrias ayudar necesito conectar guardar desde una pagina WEB asp, pero no me funciona , no se como llamar con la consulta asp..
saludos y gracias…
tienes algun manual paso a paso , con base de datos access..
Muy buen tutorial,
Pablo lo que yo requiero, es realizar lo mismo pero con grupos de usuarios, que esten aislados y direccionados a un directorio en especifico sin posibilidades de escalamiento hacia root, que solo puedan ver las carpetas que estén en el directorio, como le podría hacer.
Muchas Gracias!!
Pablo, muchísimas gracias por montar y compartir este fantástico tutorial!
Me ha parecido muy bien detallado, fácil de seguir paso a paso y de mucha ayuda.
Muchas gracias, de verdad 🙂
Alex
Estimado Pablo, este tutorial me ayudo mucho, quiero cambiar por seguridad la claves de ftp, he tratado de cambiar la clave en Creación de Cuentas hago el cambio y guardo, pero cuando quiero acceder con la nueva clave, no cambia la clave, mantiene la misma clave anterior. Espero de su ayuda. gracias de antemano