IIS 7.0
Explore el servidor web de Windows Vista y más allá
Mike Volodarsky
En este artículo se analizan los siguientes temas:
- Funcionalidad de servidor web modular
- Implementación y configuración simplificadas
- Extensibilidad e integración de ASP.NET
- Seguridad, rendimiento y compatibilidad mejorados
|
En este artículo se utilizan las siguientes tecnologías:
Windows Vista, IIS
|

Contenido
A menudo oigo a personas (tanto dentro como fuera de Microsoft) que se refieren al nuevo servidor web IIS 7.0 como uno de los desarrollos más importantes de Microsoft de los últimos años. Ésta es una declaración bastante importante si tenemos en cuenta la impresionante oferta de tecnologías lanzadas por Microsoft recientemente, incluido Windows Vista™.
El lanzamiento de IIS 7.0 coincide con el décimo aniversario del lanzamiento de la primera versión de IIS, en Windows NT® 4.0. En 2001, cuatro versiones después, IIS 5.0 se convertía en el servidor web más predominante en Internet, aunque meses después fue víctima de los gusanos Code Red y Nimbda. IIS 6.0, lanzado en Windows Server® 2003, constituyó una gran reelaboración del servidor, centrada por completo en mejorar la seguridad, la confiabilidad y el rendimiento. Desde entonces, IIS 6.0 ha demostrado ser un servidor web duro como una roca y ha logrado registros de seguimiento de confiabilidad y seguridad altas, con un solo boletín de seguridad crítico desde su lanzamiento (que no se pudo aprovechar de forma remota).
En este artículo, quisiera aprovechar la oportunidad para presentar las principales razones por las que el servidor web IIS 7.0 de próxima generación supone una gran diferencia para programadores y administradores, así como ofrecer información exclusiva sobre el uso de muchas de sus características nuevas.
La idea para IIS 7.0 era tomar la velocidad, la confiabilidad y la seguridad de la base de código de IIS 6.0 y convertirlo en una plataforma de servidor web sumamente extensible y administrable lo suficientemente eficaz como para ejecutar las aplicaciones web del futuro. El resultado es el servidor web de Microsoft más ambicioso hasta la fecha, que proporciona el mayor número de mejoras arquitectónicas de la historia de IIS.
En el centro del lanzamiento de IIS 7.0 está un servidor web completamente modular, formado por más de 40 características que se pueden ensamblar en servidores web de pequeña superficie optimizados para la función deseada en la topología de aplicaciones. Estas características se basan en un nuevo nivel de extensibilidad que permite a los programadores extender o reemplazar virtualmente cualquier aspecto del servidor, en el código nativo o con Microsoft® .NET Framework. IIS 7.0 ofrece extensibilidad a través de sus características de tiempo de ejecución, administración y funcionamiento para ayudar a crear soluciones integrales para necesidades específicas. Gracias a la plataforma de núcleo, IIS 7.0 trata muchos de los problemas asociados a la capacidad de administración y funcionamiento del servidor. Incluye un sistema de configuración totalmente nuevo que permite la administración completamente delegada de sitios y, por último, convierte en realidad la implementación de xcopy de aplicaciones web. Las API nuevas de administración y las características de diagnóstico hacen que la implementación, la administración y la solución de problemas del servidor sean bastante más sencillas y adecuadas que nunca.
Pero ¿por qué debe comenzar a pensar en IIS, una aplicación de servidor, antes de que la próxima versión de Windows Server, cuyo nombre en código es "Longhorn", esté cercana a su lanzamiento final? Es importante comenzar a pensar en ello ahora porque Windows Vista se suministra con la misma versión completa de IIS 7.0 que se espera que se lance en Windows Server "Longhorn". Esto significa que puede aprovechar de inmediato las nuevas características de IIS 7.0 para crear su sitio web personal y alojarlo en Windows Vista. Además, podrá obtener información exclusiva para desarrollar y probar sus aplicaciones web y la infraestructura de servidor web en la misma plataforma de IIS en la que las implementará cuando se distribuya Windows Server "Longhorn".
¿Intrigado? Pasemos a los detalles.
Servidor web modular
IIS 7.0 separa el servidor web en un núcleo de servidor ligero y más de 40 módulos de características que se pueden conectar al núcleo. Estos módulos (como StaticFileModule, que permite las descargas de contenido web estático, o WindowsAuthModule, que admite la autenticación NTLM integrada) se pueden instalar de manera independiente en el servidor para ofrecer la funcionalidad exacta que necesite.
Estos módulos se pueden desinstalar completamente del servidor en cualquier momento (consulte la figura 1) o deshabilitar específicamente para una aplicación concreta en la que no son necesarios. Esto permite a los administradores de servidor implementar servidores de superficie mínima de forma rápida, con un área de superficie de ataque extremadamente reducida, así como mejorar de forma considerable el rendimiento ejecutando sólo el código necesario.
Figura 1 Uso exclusivo de las características deseadas (Hacer clic en la imagen para ampliarla)
La arquitectura formada por componentes es una propiedad fundamental de IIS 7.0, que lleva a reducir los riesgos de seguridad y a minimizar los requisitos de aplicación de revisiones. También habilita las implementaciones especializadas de servidor, que combinan las características de IIS seleccionadas y los componentes personalizados optimizados para una función específica de servidor en la topología de aplicaciones, como servidores proxy inversos y servidores de caché, equilibrios de carga de protocolo HTTP, o servidores centinela de seguridad y SSL.
Todas las características de servidor que se suministran con IIS 7.0 se han creado sobre las nuevas API de extensibilidad públicas. Como programador, tiene la capacidad de reemplazar cualquier característica de servidor existente con la suya propia o de crear un módulo nuevo para agregar el conjunto de características de IIS 7.0. ¿Desea reemplazar los mecanismos de autenticación integrados con un módulo personalizado de autenticación o bien ofrecer una forma nueva de compresión de respuesta? Vamos allá.
Las nuevas API de extensibilidad son una mejora fundamental sobre el modelo anterior de extensibilidad de ISAPI y permiten mejorar el servidor con mucha más flexibilidad y facilidad. Prácticamente todos y cada uno de los aspectos del servidor, comenzando por el servidor de núcleo y siguiendo con la configuración, la administración y el diagnóstico, ofrecen extensibilidad para permitirle ampliar y adaptar el servidor a sus propias necesidades. Puede encontrar más información acerca de la extensibilidad más adelante en este artículo.
Implementación y configuración simplificadas
El almacén de configuración centralizado de los lanzamientos de IIS anteriores, denominado afectuosamente como metabase, ha desaparecido. IIS 7.0 incluye un nuevo sistema de configuración delegada basado en una jerarquía de archivos de configuración XML distribuidos. Esta jerarquía se compone del archivo applicationHost.config global, que contiene los valores predeterminados de configuración de nivel de servidor, y los archivos de web.config distribuidos en la estructura de directorios de la aplicación. Se trata de los mismos archivos web.config que usa el marco de la aplicación ASP.NET para almacenar la configuración de aplicación de una manera portátil. Esto permite el almacenamiento en paralelo de la configuración de IIS y ASP.NET, mediante directivas XML claras y bien estructuradas. Aquí se muestra un ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<customErrors mode="Off" />
</system.web>
<system.webServer>
<directoryBrowse enabled="true" />
</system.webServer>
</configuration>
En el pasado, los valores de configuración de aplicación de IIS tenían que configurarse explícitamente en el repositorio de metabase del nivel de equipo para que la aplicación pudiera funcionar correctamente. Con archivos de web.config distribuidos, las aplicaciones encapsulan la configuración de servidor necesaria dentro de su estructura de directorios. Esto simplifica de manera espectacular la implementación y permite que las aplicaciones con almacenamiento se copien simplemente en el directorio de aplicación del servidor de destino y, de esta forma, estén activas y en ejecución de inmediato con la configuración deseada.
El nuevo sistema de configuración también ofrece un amplio control a los administradores de servidor y les permite delegar ciertas opciones de configuración a la aplicación a la vez que mantienen el control sobre otras por motivos de negocios o de seguridad. De este modo, las aplicaciones en servidores alojados pueden establecer la configuración esencial directamente en su aplicación sin necesidad de llamar al administrador del servidor para obtener ayuda, ni usar un panel de configuración externo.
En el auténtico espíritu de IIS 7.0, el sistema de configuración es completamente extensible. Los módulos nuevos pueden agregar su propio esquema de configuración y permitir a las aplicaciones que configuren sus características en paralelo con la configuración de IIS y ASP.NET:
<configuration>
<system.webServer>
<directoryBrowse enabled="true" />
</system.webServer>
<myBandwidthThrottler enabled="true" />
</configuration>
Las secciones de configuración personalizada usan el mismo esquema de configuración que la configuración de características de IIS 7.0 y se aprovechan de los valores de atributos con establecimiento inflexible de tipos, la sintaxis de colección y la semántica jerárquica de invalidación y bloqueo.
IIS 7.0 sigue admitiendo el código de instalación existente que usan las API de Objeto basado en administración (ABO) para escribir en la metabase o scripts heredados que usan los objetos de nivel superior de interfaces de servicio Active Directory® (ADSI) e Instrumental de administración de Windows (WMI) para configurar IIS. Para ello, proporciona un nivel de compatibilidad que emula las API de ABO, en el que se basan el resto de API de configuración heredadas, lo que permite a dichos scripts leer y cambiar la configuración tal y como lo hacían en las versiones anteriores de IIS. Para obtener más información acerca de la compatibilidad de metabase, consulte las secciones "Rendimiento mejorado" y "Compatibilidad con versiones anteriores" hacia el final de este artículo. Aunque el nuevo formato de configuración XML estructurada hace más fácil el trabajo con la configuración en el editor de textos favorito, IIS ofrece también una serie de herramientas de administración y diversas API para que los administradores simplifiquen la administración del servidor y puedan disfrutar de una configuración y una implementación automatizadas.
Administración mejorada
IIS 7.0 ofrece un amplio conjunto de características de administración que permiten la administración del servidor en una gran variedad de escenarios. La nueva herramienta de administración gráfica Administrador de IIS, que reemplaza el complemento de MMC InetMgr.exe, simplifica enormemente la administración manual del servidor con una interfaz de administración basada en tareas (consulte la figura 2).
Figura 2 Administrador de IIS ofrece herramientas de administración gráfica (Hacer clic en la imagen para ampliarla)
Administrador de IIS permite administrar la mayoría de características de IIS 7.0 y controlar el funcionamiento del servidor. La herramienta admite la administración remota a través de una conexión HTTP/SSL fácil de usar con firewall, con una opción para admitir credenciales basadas en Windows y otras credenciales para la autenticación.
Además, la herramienta permite la administración delegada, esto es, que los propietarios de la aplicación sean quienes administren sus aplicaciones de forma remota sin tener acceso administrativo al equipo servidor. Con esta capacidad, los usuarios de servicios hospedados pueden ejecutar la herramienta de administración en su escritorio de inicio y conectarse remotamente para administrar sus aplicaciones en el servidor hospedado. Los administradores de servidor, por supuesto, tienen el control completo sobre las características de administración que se delegan a los propietarios de las aplicaciones.
Por último, la herramienta de administración es totalmente extensible y se basa en la extensibilidad del sistema de configuración para permitir agregar una interfaz de usuario de administración personalizada a la herramienta. Puede obtener más información acerca de la herramienta Administrador de IIS y cómo agregar sus propios complementos de administración en
iis.net/default.aspx?tabid=7&subtabid=73.
Para una administración de línea de comandos más flexible, IIS 7.0 ofrece la herramienta de línea de comandos appcmd.exe (consulte la figura 3). Esta herramienta ofrece un amplio conjunto de funciones de administración y una mejor compatibilidad para operaciones masivas que la interfaz de usuario. Esta eficaz utilidad facilita la lectura y escritura de la configuración, el acceso a información de estado de sitio y grupo de aplicaciones, y la realización de casi cualquier tarea de administración, todo en el símbolo del sistema.
Figura 3 Administración de línea de comandos de appcmd.exe para IIS 7.0 (Hacer clic en la imagen para ampliarla)
Con appcmd.exe, puede crear y configurar sitios, aplicaciones, grupos de aplicaciones y directorios virtuales. Puede iniciar y detener sitios, reciclar grupos de aplicaciones, enumerar procesos de trabajo en ejecución, examinar solicitudes en ejecución actualmente y buscar registros de seguimiento de errores de almacenamiento en búfer de solicitudes de eventos (FREB). También puede buscar, editar, exportar e importar datos de configuración de IIS y ASP.NET.
La herramienta está diseñada para permitir búsquedas flexibles de objetos de servidor compatibles, lo que permite, por ejemplo, encontrar rápidamente sitios con un conjunto particular de valores de configuración o grupos de aplicaciones detenidos. Al realizar una búsqueda, puede usar las condiciones que desee de cualquiera de las propiedades de objeto, incluidos los intervalos numéricos y la coincidencia simple de cadenas con caracteres comodín.
Appcmd también admite las operaciones vinculadas como las que se encuentran en Windows PowerShell™, lo que permite realizar a la vez varias operaciones de un conjunto relacionado de objetos desde una sola línea de comandos. Por ejemplo, puede buscar y reciclar todos los grupos de aplicaciones que alojen aplicaciones para un cierto sitio con un solo comando. Para obtener información acerca de cómo administrar IIS con AppCmd, consulte
iis.net/default.aspx?tabid=2&subtabid=25&i=954&p=1.
.NET Framework y scripting
Además de la administración de servidor manual con Administrador de IIS o la herramienta de línea de comandos appcmd.exe, IIS 7.0 ofrece abundantes opciones para la administración mediante programación. Primero, puede usar la API Microsoft.Web.Administration para administrar el servidor desde aplicaciones .NET. O bien, puede usar la nueva API COM para administrar directamente el sistema de configuración de IIS, o tener acceso a él desde un entorno de scripting como ASP o Windows® Script Host (WSH). También hay un proveedor nuevo de WMI así como compatibilidad con proveedores de WMI y ADSI heredados mediante el nivel de compatibilidad de metabase.
Microsoft.Web.Administration, la nueva API de administración de .NET, facilita el proceso de las aplicaciones de código administrado por el que proporcionan, mediante programación, sitios y aplicaciones de IIS, tienen acceso a información importante de estado y diagnóstico, y configuran el servidor. La habilitación de aplicaciones basadas en .NET Framework para tener acceso fácilmente a la información de configuración y estado de IIS abre un mundo de posibilidades para escribir aplicaciones de configuración y administración basadas en .NET o incluso para realizar tareas de administración directamente desde páginas de ASP.NET.
A modo de ejemplo, la figura 4 muestra un pequeño programa de C# que usa Microsoft.Web.Administration para crear un sitio web nuevo desde la línea de comandos.

Figure 4 Aprovisionamiento de sitios mediante Microsoft.Web.Administration
using System;
using Microsoft.Web.Administration;
class CreateASite
{
static void Main(string[] args)
{
ServerManager serverManager = new ServerManager();
Site mySite = serverManager.Sites.Add(
"MySite", "d:\\inetpub\\mysite", 8080);
mySite.ServerAutoStart = true;
serverManager.CommitChanges();
}
}
Microsoft.Web.Administration hace que las operaciones y las tareas de configuración de IIS sean sencillísimas en su aplicación con el lenguaje compatible con .NET de su elección. También simplifica el acceso a información de estado en tiempo de ejecución sobre el servidor, como los procesos de trabajo en ejecución o las solicitudes en ejecución actualmente.
La API Microsoft.Web.Administration sirve como base para tener acceso a la configuración personalizada de los módulos personalizados de servidor de .NET y a los complementos de interfaz de usuario para la herramienta Administrador de IIS. Para obtener un ejemplo de un paquete de servidor integral, que incluye un controlador de copyright de imagen para mejorar el servidor web y componentes asociados de configuración y administración, consulte
iis.net/default.aspx?tabid=2&subtabid=25&i=1076.
En el margen de tiempo que resta a Windows Server "Longhorn", el equipo de IIS está creando un modelo unificado de extensibilidad para agregar objetos personalizados de administración o bien ampliar los existentes, lo que permitirá que la funcionalidad de administración personalizada se exponga automáticamente a través de las diferentes características de administración, que incluyen scripting y la API Microsoft.Web.Administration. Aunque no puede agregar ni extender los objetos de administración en Windows Vista, puede usar Microsoft.Web.Administration y otras API para tener acceso y manipular las secciones de configuración personalizadas de igual forma que las secciones de configuración de IIS existentes.
Generación de características de servidor web
IIS 7.0 permite moldear el servidor según sus necesidades y le permite agregar o reemplazar cualquier característica en el servidor para ofrecer la funcionalidad necesaria. En el corazón de esta capacidad, está la API totalmente nueva de extensibilidad de servidor web en la que se basan todas las características existentes de HTTP de IIS 7.0. Esta API es pública, lo que significa que puede implementar cualquiera de las características que se suministran con IIS 7.0. Se trata de una primicia en IIS y de una mejora fundamental con respecto al modelo limitado de extensibilidad de ISAPI anterior.
La API nueva de extensibilidad es un conjunto de clases de C++ intuitivas que definen el modelo de objeto de servidor web y habilitan un módulo para ofrecer servicios de procesamiento de solicitudes en IIS. Estas clases se definen en el archivo de encabezado inc\httpserv.h en el SDK de Windows Vista.
En comparación con ISAPI, estas API son más eficaces y mucho más fáciles de usar. ¿Cómo es esto posible? En primer lugar, la nueva API incluye un modelo de objeto bien encapsulado y con seguridad de tipos. El desarrollo es mucho más sencillo con el modelo nuevo de objeto de servidor, que ofrece interfaces especializadas para todos los objetos y tareas de servidor básicos. Se incluyen:
- Inspección de la solicitud con la clase IHttpRequest
- Manipulación de la respuesta con la clase IHttpResponse
- Consumo de funcionalidad de utilidad de la clase IHttpServer
- Autenticación con la clase IHttpUser
- Acceso a la sección de configuración personalizada del módulo con las API de configuración
Estas clases exponen un conjunto mucho mayor de la funcionalidad del servidor que antes (más de lo necesario para crear todas las características que se suministran con IIS), aunque también son mucho más fáciles de usar que las interfaces de ISAPI con establecimiento flexible de tipos.
Los programadores también se aprovecharán de los patrones mejorados para la administración de memoria y estado. La mayor parte de las API de servidor de IIS 7.0 usan la memoria administrada por el servidor para los datos que devuelven, en vez de exigir al usuario que asigne y administre búferes como ISAPI y la mayoría de API existentes de Win32
®. En el pasado, ésta ha sido una de las áreas más tediosas y propensas a errores del desarrollo de ISAPI. La API nueva simplifica también muchas tareas complejas de procesamiento de solicitudes, como el almacenamiento en búfer de respuestas, la autenticación y la preparación de datos de respuesta para el cliente. Hace algunos meses, comencé una serie de publicaciones en mi blog que explican las mejoras y los patrones fundamentales del nuevo modelo de programación. Si está planteándose el desarrollo de C++ para IIS, consulte
mvolo.com/blogs/serverside/archive/2006/10/07/10-reasons-why-server-development-is-better-with-IIS7.aspx.
IIS 7.0 ofrece también una API de .NET Framework completamente integrada para ampliar el servidor. Además, ésta es la misma API que ha proporcionado ASP.NET para crear módulos y controladores de ASP.NET desde la época de ASP.NET 1.0 en Windows 2000. Pero no se deje engañar: aunque el familiar modelo de ASP.NET permite a los módulos y a los controladores de ASP.NET existentes seguir funcionando en el servidor IIS 7.0, está muy lejos de la antigua tecnología similar.
En IIS 7.0, ASP.NET tiene dos versiones: modo clásico y modo integrado. El modo clásico funciona exactamente igual que lo hacía en versiones anteriores de IIS. El modo integrado, el valor predeterminado de la nueva plataforma, usa un motor completamente nuevo para ofrecer una integración sin precedentes con el servidor web IIS. En el modo integrado, las API de ASP.NET se pueden usar para desarrollar los módulos de IIS 7.0 que se integran directamente con el servidor web y son capaces de ofrecer virtualmente todos los servicios posibles con la API de C++ subyacente.
Esto es básicamente lo mejor de ambos ámbitos: las interfaces familiares y la adecuación de .NET Framework y los servicios de aplicación de ASP.NET 2.0 como la pertenencia y la administración de funciones, además de la eficacia original para extender el servidor que anteriormente sólo estaba disponible para componentes de ISAPI basados en C.
Además de poder escribir módulos nuevos de ASP.NET que se basan en las ventajas específicas del modo integrado, muchos módulos heredados de ASP.NET pueden ser mucho más eficaces sólo cambiando unas pocas opciones de configuración en el archivo web.config.
Integración de ASP.NET
Con IIS 7.0, ASP.NET 2.0 pasa a ser algo más que un marco excelente para la creación de aplicaciones dinámicas. Se convierte en una plataforma para extender el servidor web IIS y permite que los componentes de ASP.NET se conviertan en miembros totales de la canalización de procesamiento de solicitudes de IIS. A continuación se describe su funcionamiento.
En los lanzamientos de IIS hasta la versión 6.0, ASP.NET se conectaba al servidor web como marco de aplicación independiente. Era responsable de procesar las extensiones de solicitud que se registraban, normalmente .aspx y unas cuantas más, y, para dichas solicitudes, ofrecía características muy eficaces como la autenticación de formularios, el almacenamiento en caché de resultados de respuesta y otras características que incluían servicios ofrecidos por módulos de ASP.NET. Por esta razón, sólo los tipos de contenido registrados en ASP.NET podían beneficiarse de estos servicios. Los otros, incluidas las páginas ASP, las páginas de PHP, las imágenes y las aplicaciones CGI, no podían. Además, incluso para los recursos de ASP.NET, ciertas funciones de servidor web no eran posibles en ASP.NET a causa de limitaciones en tiempo de ejecución. Por ejemplo, no era posible inspeccionar el conjunto de encabezados de respuesta HTTP de salida ni modificarlos antes de enviarlos al cliente.
En el modo integrado de IIS 7.0, los módulos de ASP.NET se ejecutan en la canalización de procesamiento de solicitudes unificada paralela con los módulos nativos de IIS de C++ (consulte la figura 5). Esto significa que los servicios de ASP.NET existentes, como el almacenamiento en caché de resultados, la reescritura de URL y cualquier otro ofrecido por los módulos personalizados de ASP.NET, ahora se pueden aplicar a cualquier tipo de contenido. La integración mejorada en tiempo de ejecución también permite a los módulos de ASP.NET tener acceso a la funcionalidad de servidor anteriormente no disponible, lo que elimina la necesidad de escribir la extensibilidad de IIS nativa en la mayoría de los casos.
Figura 5 Integración con ASP.NET en IIS 6.0 e IIS 7.0 (Hacer clic en la imagen para ampliarla)
Finalmente, en el modo integrado, ASP.NET ofrece un número pequeño de API nuevas que exponen una funcionalidad adicional disponible debido a la integración más estrecha con IIS. Entre ellas, se incluyen la capacidad de revisar todos los encabezados de respuesta con independencia de quién genere la respuesta y la capacidad de reescribir completamente la ejecución de la solicitud en otra dirección URL.
Una aplicación existente a menudo puede aprovecharse del modo integrado sin necesitar ningún módulo de ASP.NET nuevo que use la funcionalidad específica del modo integrado. Simplemente cambiando la configuración, una aplicación puede realizar operaciones como usar la autenticación de formularios y la autorización de URL de ASP.NET para proteger todo el sitio web con la seguridad de usuario o mediante la asignación de URL de ASP.NET para reescribir las direcciones URL en la aplicación. Para obtener un ejemplo del aprovechamiento del modo integrado con el fin de impedir que los aprovechados de la Web vinculen imágenes del sitio mediante vinculación activa, consulte el módulo de muestra de ASP.NET correspondiente en
mvolo.com/2006/11/10/stopping-hotlinking-with-iis-and-aspnet.aspx. Se trata de un buen ejemplo de cómo puede sacar un mayor provecho de los módulos de terceros existentes de ASP.NET usándolos en modo integrado.
Para obtener un tutorial detallado sobre el aprovechamiento del modo integrado en aplicaciones existentes, consulte mi artículo en
iis.net/default.aspx?tabid=2&subtabid=25&i=1081&p=1.
Seguridad mejorada
IIS 7.0 se genera sobre la base de código de IIS 6.0, que cuenta con un registro de seguimiento de probada seguridad gracias a prácticas de codificación detalladas y principios de diseño de seguridad predeterminados. A partir de esto, IIS 7.0 introduce unos cuantos cambios de arquitectura para ofrecer una seguridad aún más fuerte y varias características para ayudar a crear aplicaciones web seguras.
La reducción del área de superficie de ataque es uno de los principios fundamentales de diseño e implementación de sistemas seguros. Siguiendo el método de bloqueo predeterminado de IIS 6.0 hasta el nivel siguiente, IIS 7.0 instala menos características de forma predeterminada, lo que ofrece un servidor incluso más bloqueado. Además, si aprovecha la naturaleza modular del servidor para eliminar todas las características no usadas, puede reducir la superficie de ataque del servidor al mínimo, lo que minimiza considerablemente el riesgo del servidor de verse amenazado por un atacante.
Si se encuentra una vulnerabilidad en cualquiera de los componentes que no estén en uso en el servidor, no es necesario desactivar el servidor para evitar vulnerabilidades de seguridad, ni revisar el componente vulnerable inmediatamente. Esto puede tener como resultado una mayor disponibilidad de la aplicación y unos menores costos de administración de revisiones
Además de las mejoras principales de seguridad, IIS 7.0 ofrece una serie de características de seguridad que puede usar para bloquear aún más e implementar aplicaciones de seguridad en el servidor. IIS ha ofrecido siempre una gran compatibilidad para proteger el contenido de aplicación con la autenticación. Ahora, con el modo integrado de ASP.NET, puede usar las características de seguridad populares de ASP.NET tales como los controles de autenticación de formularios, pertenencia e inicio de sesión para ofrecer una solución completa de autenticación y control de acceso para toda la aplicación. A menudo, puede realizar estas operaciones en pocos minutos y sin escribir una sola línea de código.
La característica nueva de autorización de URL, inspirada en la característica de autorización de URL de ASP.NET, se puede usar para configurar las reglas declarativas de control de acceso para toda la aplicación. Las reglas de acceso se pueden usar para permitir o denegar el acceso a direcciones URL en la aplicación según los nombres de usuario y las funciones. La autorización de URL se integra sin problemas con las características de pertenencia y administración de funciones de ASP.NET 2.0 y se puede usar de forma eficaz con los controles de autenticación de formularios e inicio de sesión de ASP.NET para habilitar de forma rápida la seguridad de usuario para las aplicaciones.
La nueva característica de filtrado de solicitudes ofrece la funcionalidad eficaz de bloqueo, parte de la cual estaba disponible en la conocida herramienta URLScan. Puede usar el filtrado de solicitudes para bloquear aún más el sitio mediante el rechazo de solicitudes que contengan datos sospechosos, la protección de recursos confidenciales o el refuerzo de los límites de solicitud agresivos.
IIS 7.0 también presenta una serie de cambios que pretenden simplificar la implementación y la administración de la configuración de seguridad. La nueva cuenta anónima de IIS_IUSR está integrada, lo que significa que no se verá afectada por caducidades de contraseñas y que no requiere la sincronización de contraseñas entre equipos. El nuevo grupo IIS_IUSRS, que reemplaza al grupo IIS_WPG, se inserta automáticamente en la identidad del proceso de trabajo en tiempo de ejecución, lo que alivia la necesidad de agregar manualmente la identidad del proceso de trabajo al grupo al usar cuentas personalizadas.
Debido a la cuenta IIS_USR y al grupo IIS_USRS integrados, el contenido de la aplicación que especifica listas de control de acceso (ACL) para la cuenta y el grupo de IIS anónimos se puede copiar simplemente de un servidor IIS a otro sin ningún paso adicional necesario para conservar la configuración de seguridad. Esto simplifica enormemente la implementación de la aplicación a través del ciclo de desarrollo, prueba y producción.
El sistema de configuración distribuido que se ha tratado anteriormente permite a los propietarios de aplicaciones administrar la configuración necesaria de servidor web directamente en sus aplicaciones sin tener acceso administrativo al servidor. Los administradores de aplicaciones pueden especificar la configuración necesaria en los archivos de web.config dentro del contenido de sus aplicaciones al cargar las aplicaciones en el servidor o usar la herramienta Administrador de IIS para configurar sus aplicaciones de forma remota.
La herramienta de Administrador de IIS ofrece una administración remota segura a través de conexiones HTTP fáciles de usar con firewall. Con la capacidad de autenticar a administradores de aplicaciones como usuarios de Windows o cuentas de usuario personalizadas mediante el servicio de pertenencia, la herramienta de administración permite la administración remota de la aplicación sin que el propietario tenga ningún acceso a Windows en el servidor.
Como administrador de servidor, tiene el control total sobre los valores de configuración que son configurables por la aplicación mediante la compatibilidad de bloqueo flexible del sistema de configuración. Asimismo, puede controlar las características de la herramienta de Administrador de IIS que están disponibles para los administradores de la aplicación que administran sus aplicaciones de forma remota.
Diagnóstico mejorado
Entre todas las características nuevas compatibles en Windows, IIS 7.0 y su aplicación web, un servidor web es un sistema muy complicado cuyos problemas suele costar mucho resolver. IIS 7.0 introduce varias características nuevas para ayudarle a supervisar el funcionamiento del servidor y a depurar los problemas de la aplicación.
En primer lugar, IIS 7.0 permite ver el estado del servidor en tiempo real. Esta característica, llamada Runtime State and Control API, o RSCA (se pronuncia "risca"), expone el estado activo de sitios y grupos de aplicaciones, procesos de trabajo en ejecución e incluso permite ver las solicitudes del servidor actualmente en ejecución. También permite controlar el estado del servidor, como iniciar o detener sitios, o reciclar grupos de aplicaciones. En Windows Vista, puede tener acceso a esta información en el Administrador de IIS, a través de la herramienta de línea de comandos appcmd.exe o bien usando la API Microsoft.Web.Administration mediante programación.
Por ejemplo, puede ver las solicitudes en ejecución actualmente y las fases del servidor donde se bloqueen. Esto permite resolver rápidamente problemas de solicitudes bloqueadas y localizar qué script hace girar la CPU (consulte la figura 6).
Las capacidades de RSCA resultan muy útiles al investigar los problemas del servidor o al optimizar el rendimiento del mismo, en ambos casos al poder ver rápidamente qué ocurre en el sistema y controlar el servidor al realizar la solución de problemas. A menudo termino usando appcmd.exe para ver el estado de los grupos de aplicaciones, para examinar los procesos de trabajo e iniciar o detener grupos de aplicaciones infractores, con el fin de apuntar directamente al problema al investigar errores en la oficina.
Figura 6 Localización de scripts bloqueados en Administrador de IIS (Hacer clic en la imagen para ampliarla)
Cuando se producen errores en la aplicación web, pueden deberse a una configuración incorrecta del servidor, a errores de aplicación, o a varios factores del entorno. El código de estado y los mensajes de error estándar ofrecen pocas pistas sobre lo que no ha funcionado correctamente y pueden convertir la solución de problemas del servidor en una pesadilla. IIS 7.0 ofrece información de errores detallada acerca de la mayoría de los errores e indica exactamente dónde está el error, por qué se ha producido y cómo corregirlo (consulte la figura 7).
Figura 7 Detalles de error que indican el problema y la solución (Hacer clic en la imagen para ampliarla)
Los errores detallados siguen un esquema de seguridad semejante a los errores detallados de ASP.NET. De forma predeterminada, sólo obtendrá información detallada al examinar el sitio web desde el equipo local. Como antes, también puede configurar páginas de error personalizadas para códigos de error diferentes o redireccionar a una dirección URL personalizada. Las páginas de error detalladas ahora también están localizadas y ofrecen la descripción del error en el idioma preferido del cliente, si el paquete del idioma correspondiente está instalado.
Diagnóstico de errores sin depuración
¿Qué ocurre si la condición de error que se produce es desconocida o está provocada por una interacción compleja de varios componentes del servidor web? No hay por qué preocuparse: IIS 7.0 ofrece un mecanismo de seguimiento completo que genera un rastro en papel detallado para cada solicitud, que se puede usar para localizar el problema rápidamente.
IIS 7.0 agrega más eventos de información a partir de los eventos de Seguimiento de eventos para Windows (ETW) agregados a IIS 6.0 en Windows Server 2003 Service Pack 1 (SP1). Estos eventos contienen información útil acerca de cada fase de procesamiento de servidor que puede examinar para realizar un seguimiento regresivo de la ejecución de la solicitud y localizar con toda precisión el lugar donde se produjeron los errores. Estos eventos se pueden enrutar a la infraestructura de seguimiento de Windows, que permite que varios componentes de Windows entre los que se incluyen ASP.NET y SQL Server™ vinculen su información de seguimiento en un único seguimiento de ejecución lógico para la solicitud.
También se pueden enrutar a la nueva característica Failed Request Tracing (Seguimiento de solicitudes con error) (también denominada FREB), que guarda los registros de seguimiento en archivos de registro XML que se pueden ver con la hoja de estilos XSLT proporcionada (consulte la figura 8) o consumir mediante programación.
Figura 8 Visualización de archivos de registro XML (Hacer clic en la imagen para ampliarla)
La característica más destacada del seguimiento de solicitudes con error es que se puede dejar habilitado en el servidor. Permite capturar registros de seguimiento para solicitudes que hayan tenido un error configurable automáticamente, a la vez que evita la penalización del rendimiento por guardar registros de seguimiento para solicitudes que hayan terminado correctamente. Por ejemplo, puede activarla para solicitudes que tengan como resultado errores de servidor o que tarden más de un cierto tiempo en terminar.
Con la característica de seguimiento de solicitudes con error, siempre puede capturar la información de seguimiento valiosa cuando se producen los errores, incluso si son intermitentes o difíciles de reproducir. Esto puede ayudar a diagnosticar y corregir problemas difíciles que anteriormente precisaban una depuración extrema.
La infraestructura de seguimiento subyacente está expuesta a los módulos IIS a través del modelo de extensibilidad del servidor, lo que permite a todos los componentes del servidor, tanto si se suministran con IIS como si los desarrollan terceros, emitir información de seguimiento detallada durante el procesamiento de solicitudes. El seguimiento de IIS 7.0 se integra con el seguimiento de ASP.NET a través de la API System.Diagnostics y el seguimiento de páginas de ASP.NET, lo que permite a los módulos administrados beneficiarse del modelo de seguimiento unificado. Para ir un poco más allá, puede escribir sus propios módulos de seguimiento que ofrecen nuevas maneras de procesar y obtener la información de seguimiento. Por ejemplo, puede ser el primero en escribir un módulo para guardar información de seguimiento de IIS en SQL Server o en un archivo de texto.
Rendimiento mejorado
Mientras que Windows Vista es un lanzamiento de sistema operativo de cliente y no está diseñado para la implementación de producción de alto rendimiento (IIS en Windows Vista está limitado a 10 solicitudes simultáneas a la vez), ya presenta parte de las mejoras de arquitectura dirigidas a aumentar considerablemente el rendimiento de aplicaciones web. Paralelo al amplio trabajo de rendimiento que estamos realizando en Windows Server "Longhorn", estas mejoras ayudarán a IIS 7.0 a elevar el rendimiento del servidor.
La primera es, por supuesto, la formación por componentes La naturaleza modular del servidor permite a los administradores eliminar características innecesarias de servidor, ahorrando memoria y uso de CPU durante el procesamiento de solicitudes. Esto puede tener como resultado mejoras considerables en el rendimiento y en la capacidad del equipo. La capacidad de habilitar características de manera granular (activándolas y desactivándolas en el servidor) permite aún más a las aplicaciones lograr ganancias de rendimiento en caso de que sólo ciertas partes del sitio requieran una característica concreta.
La otra característica notable de rendimiento en IIS 7.0 es la nueva caché de resultados de IIS. Esta característica ofrece compatibilidad para volver a usar respuestas a páginas dinámicas costosas en el servidor, con lo que alivia la necesidad de realizar las transacciones costosas de representación y de base de datos con el objeto de devolver la respuesta al cliente. La caché de resultados de IIS es una alternativa más rápida a la característica enriquecida de almacenamiento en caché de resultados de ASP.NET, que admite un conjunto más pequeño de funciones de caché, pero que ofrece suficiente flexibilidad para almacenar en caché el contenido dinámico de una manera que mejora el rendimiento.
Mediante el almacenamiento en la caché de resultados del contenido dinámico, ya sean páginas de ASP.NET, scripts de PHP o aplicaciones de CGI, puede obtener con frecuencia una mejora de rendimiento entre 5 y 10 veces superior con mucha menos carga en el disco y la base de datos.
Compatibilidad con versiones anteriores
IIS 7.0 debe poder ejecutar la mayoría de las aplicaciones existentes sin modificarlas. Esto fue un gran logro debido al alcance de los cambios arquitectónicos que fueron necesarios para obtener la compatibilidad con las novedades de esta versión. El sistema de configuración ha experimentado la mayor parte de los cambios, sustituyendo un almacén de configuración centralizado con establecimiento flexible de tipos por una jerarquía de archivos de configuración XML delegada. Tanto la estructura como el almacenamiento de la información de configuración son completamente diferentes de la metabase de IIS 6.0 y no habilitan el acceso mediante las API de configuración heredadas.
IIS 7.0 soluciona este problema mediante una capa de emulación para la metabase, que realiza traducciones sobre la marcha entre los datos subyacentes del sistema de configuración y las interfaces que han expuesto las API de ABO de metabase. A su vez, esto permite que el código escrito para la metabase funcione correctamente al obtener acceso a la misma mediante ABO o scripts de WMI o ADSI de nivel superior. Sin embargo, asegúrese de instalar los componentes de instalación de compatibilidad para obtener dicha funcionalidad.
Mientras que IIS 7.0 proporciona un modelo de extensibilidad nuevo para componentes de IIS en desarrollo, los componentes de ISAPI aún son compatibles. Si instala extensiones de ISAPI y componentes de instalación de filtros ISAPI, podrá ejecutar las extensiones y los filtros como anteriormente. Sin embargo, si desarrolla componentes nuevos, deberá asegurarse de poder usar el modelo de extensibilidad nuevo para conseguir una experiencia de desarrollo más eficaz y mejorada.
Puede que se deba mover un porcentaje reducido de aplicaciones de ASP.NET que presentan incompatibilidades de tiempo de ejecución con el modo integrado a un grupo de aplicaciones que se ejecuten en modo clásico. En este caso, puede ejecutar varias aplicaciones en ambos modos de forma paralela en el mismo servidor mediante la colocación de las mismas en grupos de aplicaciones independientes. Para obtener una lista completa de los cambios más radicales de ASP.NET e información general de compatibilidad de ASP.NET con IIS 7.0, asegúrese de consultar las notas del producto sobre la compatibilidad de ASP.NET en
iis.net/default.aspx?tabid=2&subtabid=25&i=1223.
Conclusión
El lanzamiento de IIS 7.0 para Windows Vista tiene como objetivo ofrecer la mejor base arquitectónica para la plataforma de aplicación web de la próxima generación, centrándose en la idoneidad de los principales aspectos, es decir, la arquitectura, la extensibilidad y la plataforma de administración para el servidor web. Windows Vista le ofrece la posibilidad de desarrollar y probar las aplicaciones en la misma plataforma del servidor que se usará para su implementación cuando la versión del servidor de Windows Vista esté disponible.
Cuando se lance IIS 7.0 en Windows Vista, se cambiará el enfoque del equipo Web Platform and Tools Team hacia la preparación del servidor web para entornos de producción y la mejora de la estabilidad y el rendimiento para situaciones de producción. Sin embargo, las características de desarrollo y administración principales incluidas en Windows Vista seguirán siendo las mismas; más adelante, cuando se termine la versión del servidor de IIS 7.0, se espera que las mejoras se pongan a disposición del usuario mediante un Service Pack de Windows Vista. En ese momento, los equipos de cliente y servidor volverán a ejecutar exactamente la misma versión de IIS para que se puedan seguir desarrollando y probando aplicaciones web en los escritorios con Windows Vista.
Para empezar en IIS 7.0, asegúrese de comprobar la multitud de recursos de gran utilidad disponibles en la web, comenzando por el sitio web de
iis.net, que es la página principal nueva del equipo de IIS. Nuestro sitio nuevo presenta un portal sobre todo lo relacionado con IIS 7.0, incluidos artículos y tutoriales detallados para todas las características de IIS 7.0. No dude en usar los foros para hacer preguntas y tratar problemas con el equipo y la comunidad de IIS.
También puede encontrar un tratamiento exhaustivo de IIS 7.0 e información interna en mi blog,
www.mvolo.com. No se olvide de visitarlo. Cuénteme cuál es su tema favorito sobre IIS 7.0 y haré todo lo posible por tratarlo en el blog.
Mike Volodarsky es administrador técnico de programas del equipo Web Platform and Tools Team de Microsoft. A él pertenece la infraestructura de servidor de núcleo de ASP.NET e IIS. Michael ahora está centrado en mejorar la plataforma de aplicaciones web en el servidor web de próxima generación, IIS 7.0.