introducción internet information services 7.0 (iis 7) iván gonzález vilaboa...
TRANSCRIPT
IntroducciónInternet Information Services 7.0 (IIS 7)
Iván González [email protected]
Develoment AdvisorMicrosoft MVP – Windows Server IISPlain Concepts
Agenda
• Introducción
• Núcleo del servidor Web
• Extensibilidad
• Configuración
• Administración
• Despliegue
• Seguridad
• Diagnóstico y resolución de problemas
Más fácil de administrar
IIS7 contiene docenas de nuevas características que permiten administrarlo de forma más fácil que nunca:
Núcleo del servidor WebProcesado de peticiones en IIS 6
Send ResponseLog Compress
NTLM Basic
Determine Handler
CGI
Static File
AuthenticationAnon
Implementación monolíticaInstala todo o nada…
Extensión de la funcionalidad del servidor sólo a través de ISAPI…
ASP.NET
PHP
ISAPI
…
…
Núcleo del servidor Web Procesado de peticiones en IIS 7
Send ResponseLog Compress
NTLM Basic
Determine Handler
CGI
Static File
ISAPI
AuthenticationAnon
SendResponse
Authentication
Authorization
ResolveCache
ExecuteHandler
UpdateCache
…
…
La funcionalidad del servidor se reparte en ~ 40 modulos...
Los módulos se conectan en un pipeline de peticiones genérico
Los módulos extienden la funcionalidad del servidor a través de un API pública de módulos
…
…
Núcleo del servidor Web Muchos, muchos módulos
Instala, gestiona, y actualiza sólo los módulos que uses…
• Reduce la superficie de ataque
• Reduce la huella del servidor en memoria
• Proporciona mayor granularidad de control
• Permite reemplazar componentes del núcleo del servidor con nuestros propios componentes
Instalar de forma consistente el mismo conjunto de módulos…
Evitar:
– 503 “Service Unavailable”
[el módulo está habilitado pero no instalado]
– La aplicación no funciona cómo se esperaba
[web.config referencia un módulo que no está instalado]
[un módulo inesperado entra en conflicto con un módulo personalizado]
DemoNúcleo del servidor Web
basicauth.dll
Extensibilidad
• Modelo nativo
– API en C++
– Modelo de objetos IIS
• Modelo manejado
– Continua usando los interfaces IHttpModule y IHttpHandler
– Podemos conectar handlers y módulos ASP.NET ya existentes
httpserv.h:
IHttpContext{ IHttpRequest IHttpResponse IHttpUser ...};
IHttpServer{ GetConfig LogEvent Recycle ... };
Authentication
...
ExecuteHandler
...
SendResponse
HTTP Request
HTTP Response
Authorization
UpdateCache
ResolveCache
Basic
ExtensibilidadIntegración de ASP.NET en IIS 6
• Implementación basada en ISAPI
• Sólo ve las peticiones ASP.NET
• Características duplicadas
Send ResponseLog Compress
NTLM Basic
Determine Handler
CGI
Static File
ISAPI
AuthenticationAnon
…
…
AuthenticationForms Windows
Map Handler
ASPX
Trace
……
…
aspnet_isapi.dll
ExtensibilidadIntegración de ASP.NET en IIS 7
• Dos modos
– Clásico (se ejecuta como un ISAPI)
– El modo integrado
• Módulos .NET y handlers se conectan directamente en el pipeline
• Procesa todas las peticiones
Log
Compress
Basic
Static File
ISAPI
Anon
SendResponse
Authentication
Authorization
ResolveCache
ExecuteHandler
UpdateCache
…
…Authentication
Forms Windows
Map Handler
ASPX
Trace
……
…
aspnet_isapi.dll
Migrar al modo integrado
• La configuración de los módulos y los Handler se ha movido de:
– system.web/httpHandlers → system.webServer\handlers
– system.web/httpModules → system.webServer\modules
• Buscar conflictos entre módulos en el procesado de las peticiones
• Establecer la precondición “managedHandler” para un módulo significa “ejecutar sólo para peticiones ASP.NET”
DemoExtensibilidad
ConfiguraciónLa metabase se mueve a ficheros .config
• El fichero principal de configuración es ahora applicationHost.config
• No más ficheros metabase.bin o metabase.xml !
• Permite configurar propiedades de IIS y de ASP.NET en el mismo fichero
• Construida para ser simple, y con extensibilidad basada en un esquema
ConfiguraciónMapa de la configuración
root configuration
machine.config
root web.config
applicationHost.config web.config.NET
Framework
ASP.NET
IIS
IIS + ASP.NET +
.NET Framework
web.config
Herencia…
ConfiguraciónCompatibilidad: ABO Mapper
• Proporciona compatibilidad para:
– Scripts
– Herramientas en línea de comandos
– Llamadas nativas a ABO
• Sólo puede hacer lo que IIS 6 hace…
– No puede leer/escribir nuevas propiedades de IIS7 o acceder a los nuevos datos del runtime
– No puede leer/escribir las propiedades de ASP.NET o los ficheros web.config
• No se instala por defecto
– Los scripts existentes de ADSI/WMI/instalación no funcionarán sin esto
applicationHost.config
IISADMIN
ABOMapper
IIS6 ADSI Script
ConfiguraciónReplicar el contenido y la configuración
• Bienvenido al mundo del despliegue XCOPY!
• Replicar la configuración de IIS en applicationHost.config…
– Cuenta built-in “Internet User”, no más SID’s específicos de la máquina
– Simplemente copiar los ficheros, no se necesitan herramientas en línea de comandos
– Ojo a la información específica de la máquina como IP’s y letras de unidad
• Replicar la configuracion de IIS en los ficheros web.config…
– XCOPY con la aplicación
ConfiguraciónCentralizar el contenido y la configuración
• La configuración de IIS en los ficheros web.config se puede centralizar en un servidor de ficheros
• El sistema de ficheros de Vista/Longhorn proporciona:
– Client Side Caching (CSC)
• Proporciona una caché de disco local
– Distributed File System Replication (DFSR)
• Múltiples servidores de ficheros abstraidos en un sólo nombre de carpeta compartida
• Proporciona replicación de contenido
ConfiguraciónDelegación de configuración
• Dos tipos de bloqueos de configuración:
– overrideMode (similar a "allowOverride")
– Bloqueo granular, e.j. lockItem, lockElements
• Por defecto…
– Todas las secciones de IIS bloqueadas (overrideMode=“Deny”) excepto:
• Documento por defecto, Navegación de directorios,
Cabecera HTTP, Redirecciones HTTP, Validación
– Todas las secciones de .NET Framework / ASP.NET están no bloqueadas
ConfiguraciónEl esquema de configuración
• Podemos usar el fichero con el esquema para ver todas las posibilidades que nos ofrece la cofiguración:
%windir%\system32\inetsrv\config\schema\IIS_schema.xml
• El esquema describe:
– Tipos de propiedades
– Valores por defecto
– Validaciones
– Etc.
Nota: Los valores de configuración son case sensitive
Determinar la política de bloqueo de la configuración …
– Ser conservador al principio
– Desbloquear según sea necesario (bloquear más tarde puede romper las aplicaciones)
DemoConfiguración
AdministraciónNuevo IIS7 Manager
• Acceso remoto sobre HTTP, lo hace firewall friendly
(La gestión remota no se instala por defecto)
• Soporta la gestión delegada de sitios y aplicaciones por parte de no administradores
• Proporciona un API manejada de extensibilidad para su personalización
AdministraciónHerramientas de gestión IIS7
• Gestionar IIS y ASP.NET simultáneamente
• Ver datos del runtime:
– worker processes, appdomains, executing requests
GUILínea ComandosScriptCódigo Manejado
IIS ManagerappcmdWMI (root\WebAdministration)Microsoft.Web.Administration
AdministraciónScripting: Proveedor WMI de IIS6
Set oIIS = GetObject("winmgmts:root\MicrosoftIISv2")
' Crear binding para nuevo sitioSet oBinding = oIIS.Get("ServerBinding").SpawnInstance_oBinding.IP = ""oBinding.Port = "80"oBinding.Hostname = "www.sitio.com"
' Crear un sitio y extraer el nombre del sitio como valor de retornoSet oService = oIIS.Get("IIsWebService.Name='W3SVC'")
strSiteName = oService.CreateNewSite("NuevoSitio", array(oBinding), "C:\inetpub\wwwroot")
Set objPath = CreateObject("WbemScripting.SWbemObjectPath") objPath.Path = strSiteNamestrSitePath = objPath.Keys.Item("")
Set oSite = oIIS.Get("IIsWebServer.Name='" & strSitePath & "'")oSite.Start
' Crear el vdir para nuestra aplicacion
Set oVDirSetting = oIIS.Get("IIsWebVirtualDirSetting").SpawnInstance_ oVDirSetting.Name = strSitePath & "/ROOT/bar" oVDirSetting.Path = "C:\inetpub\bar" oVDirSetting.Put_
' Hacer que el VDir sea una aplicacionSet oVDir = oIIS.Get("IIsWebVirtualDir.Name='" & strSitePath & "/ROOT/bar'")
oVDir.AppCreate2 1
Crear Sitio
Crear Directorio Virtual
Crear Aplicación
NO ES CONSISTENTE
AdministraciónScripting: nuevo proveedor WMI
Set oService = GetObject("winmgmts:root\WebAdministration")
' Crear binding para sitioSet oBinding = oService.Get("BindingElement").SpawnInstance_oBinding.BindingInformation = "*:80:www.sitio.com"oBinding.Protocol = "http"
' Crear sitio oService.Get("Site").Create _ "NuevoSitio", array(oBinding), "C:\inetpub\wwwroot"
' Crear aplicación oService.Get("Application").Create _ "/foo", "NuevoSitio", "C:\inetpub\wwwroot\acme"
Métodos estáticos Create
CONSISTENTE
AdministraciónAppcmd – Listar y Filtrar
C:\> appcmd list sitesSITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started)SITE "Site1" (id:2,bindings:http/*:81:,state:Started)SITE "Site2" (id:3,bindings:http/*:82:,state:Stopped)
C:\> appcmd list requestsREQUEST "fb0000008000000e" (url:GET /wait.aspx?time=10000,time:4276 msec,client:localhost)
C:\> appcmd list requests /apppool.name:DefaultAppPool
C:\> appcmd list requests /wp.name:3567
C:\> appcmd list requests /site.id:1
C:\>
C:\>
Podemos filtrar los resultados por Application Pool, Worker Process o Sitio
C:\>
AdministraciónAppcmd – Viewing Config Schema
C:\> appcmd list config /section:? | findstr system.webServersystem.webServer/globalModulessystem.webServer/serverSideIncludesystem.webServer/httpTracing...
C:\> appcmd list config /section:directoryBrowse<system.webServer> <directoryBrowse enabled="true" /></system.webServer>
C:\> appcmd list config /section:directoryBrowse /config:*<system.webServer> <directoryBrowse enabled="true" showFlags="Extension, Size, Time, Date" /></system.webServer>
C:\> appcmd list config /section:directoryBrowse /text:*CONFIG CONFIG.SECTION: system.webServer/directoryBrowse path: MACHINE/WEBROOT/APPHOST overrideMode: Inherit [system.webServer/directoryBrowse] enabled:"true" showFlags:"Extension, Size, Time, Date"
C:\>
C:\>
Secciones de IIS – también podemos probar “system.web” y “system.applicationHost”
C:\>
C:\>Muestra aquellos atributos que no están establecidos explicitamente
AdministraciónMicrosoft.Web.Administration
• Primer API manejada para administrar IIS
– Mismos objetos y funcionalidad que WMI, o appcmd
• ¿Por qué no System.Configuration?
– System.Configuration:
• Configuración de ASP.NET y .NET Framework fuertemente tipada
– Microsoft.Web.Administration:
• Configuración de IIS, ASP.NET, y .NET Framework debilmente tipada
• Objetos de IIS fuertemente tipados como Sites y ApplicationPools
AdministraciónMicrosoft.Web.Administration
ServerManager iisManager = new ServerManager();
foreach(WorkerProcess w3wp in iisManager.WorkerProcesses) { Console.WriteLine("W3WP ({0})", w3wp.ProcessId); foreach(Request request in w3wp.GetRequests(0)) { Console.WriteLine("{0} - {1},{2},{3}", request.Url, request.ClientIPAddr, request.TimeElapsed, request.TimeInState); }}
Educar a los usuarios finales, que publicarán sus aplicaciones y usarán IIS Manager para configurarlas…
Un escenario:
– El usuario publica su aplicación
– El usuario cambia el web.config de la aplicación usando IIS Manager
– El usuario copia la versión actualizada del web.config a su versión local de la aplicación
– Varios días más tarde, publica de nuevo la aplicación
** Las modificaciones realizadas al web.config desde IIS Manager se sobreescriben! **
DemoAdministración
DespliegueOpciones de instalación
• Server Manager
– Montones de componentes
– Servidor estático por defecto
– [Vista] Usar características de Windows
• Gestor de paquetes
– Reemplaza a sysocmgr
• Desatentida
– El formato de fichero es totalmente diferente
– [Vista] Podemos escoger componentes, pero no establecer su configuración
DespliegueInstalar, migrar o actualizar
• Log de instalación: \Windows\IIS7.log
• Desinstalar
– Para los servicios para evitar tener que reiniciar
– Borrar los ficheros de configuración, hacer un backup de ellos antes de desinstalar
• Migración: no hay nada en Vista, en LH Server TBD…
• Actualizar
– Se instalan todos los componentes web y/o FTP, desinstalar después los componentes no necesarios…
– Los Application Pools estarán en modo ISAPI, no configurados para ejecutar código manejado => todas las peticiones ASP.NET fallarán
DespliegueASP.NET: Migración
• Application Pools
– Modo integrado con ASP.NET por defecto
– Configurar para cargar una versión específica del .NET Framework
• Modo integrado
– Entorno de servidor diferente para mismas notificaciones del pipeline
• e.j. la petición no es autenticada para BeginRequest
– Configuración de Handlers y módulos integrada en IIS
• system.webServer/handlers, system.webServer/modules
DespliegueASP.NET: Migración
– Advertencias de validación sobre httpHandlers, httpModules, o la configuración de identidad
– Eliminar la precondición “managedHandler” en un módulo ASP.NET que se va a ejecutar para todo tipo de contenido
• Modo ISAPI
– No podemos configurar los HTTP handlers ni los módulos desde el UI
DespliegueReplicación de applicationHost.config
• Provocará que todos los application pools se reciclen:
– Cambios a los valores por defecto para todos los application pools
– Cambios a la lista <globalModules>
• Provocará que un application pool se recicle:
– Cambios en la configuración para ese application pool
• Debemos usar solo encriptación RSA a nivel de máquina (por defecto), replicar la clave RSA de la máquina
– http://msdn2.microsoft.com/en-us/library/yxw286t2(VS.80).aspx
DespliegueReplicación de applicationHost.config
• Cosas a tener en cuenta:
– Datos específicos de la máquina, como direcciones IP o letras de unidad
– Los servidores deben de tener el mismo conjunto de módulos instalado (referencias a módulos no existentes en <globalModules> causarán errores 503)
DemoDespliegue
Seguridad
• Reduce la superficie de ataque
– Menos componentes instalados reduce la superficie de ataque disponible para un atacante
– Menos componentes instalados significa menos cosas que gestionar, actualizar y mantener
– Menos componentes en memoria significa mejor rendimiento, escalabilidad y fiabilidad
Seguridad
• Gestión más sencilla de la seguridad
– Soporte para la delegación de la administración
– Gestión unificada de la autenticación y la autorización
– Dos nuevas cuentas built-in.
• La cuenta de usuario IUSR reemplaza a la cuenta
IUSR_MachineName y se crea sólo cuando instalamos
el servidor FTP
• El grupo IIS_IUSRS reemplaza al grupo IIS_WPG
DemoSeguridad
Diagnóstico y resolución de problemasNuevas características• Errores personalizados detallados, como con
ASP.NET
• Failed Request Tracing
– Se acabaron las trazas a ETW y esperar por una respuesta…
• Nuevos datos en tiempo de ejecución:
– worker processes
– appdomains
– peticiones en ejecución
Diagnóstico y resolución de problemas Failed Request Tracing• No tenemos un método claro de reproducir
aquellas peticiones que fallan
• Podemos definir las condiciones de fallo por URL
– Tiempo que ha llevado ejecutar la petición
– Códigos de estado/subestado
– Nivel de error
• Persistimos en un log las trazas
• ¿Me dirá lo que está mal?
– A veces… por ejemplo, problemas con ACLs
– Buscar indicios
• Se puede usar para todas las peticiones para ver qué está sucediendo
DemoDiagnóstico y resolución de problemas
Resumen
Despliegue…• ~ 40 módulos, instalar solo los necesarios• Migrar al modo integrado con ASP.NET• Centralización/replicación más fácil
Administración…• Administrar IIS y ASP.NET desde las mismas
herramientas• Usar la compatibilidad hacia atrás con el ABO Mapper (no
instalado por defecto)• Determinar la política de bloqueo de la configuración
• Resolución de problemas…• Usar: Errores detallados, Failed Request Tracing,
Currently Executing requests
• Geeks.ms
– http://geeks.ms/blogs/iis
• Plain Concepts
– http://www.plainconcepts.com
© 2006 Plain Concepts. All rights reserved.This presentation is for informational purposes only. Plain Concepts makes no warranties, express or implied, in this summary.