Welcome to TechNet Blogs Sign in | Join | Help

Hola

A estas alturas ya he instalado un par de veces la Beta de System Center Virtual Machine Manager 2008 y quería compartir con vosotros el proceso, que tampoco es que tenga mucho misterio.

SCVMM 2008 (también conocida como vNext) se puede definir como la adaptación de SCVMM a Windows Server 2008 e Hyper-V. Con ella podremos gestionar entornos de virtualización basados en Virtual Server 2005, Hyper-V y VMWARE ESX a través de Virtual Center. La funcionalidad de P2V se ha mejorado y ampliado para soportar Windows Vista y Windows Server 2008, se ha incluido el soporte de configuraciones de alta disponibilidad y clustering, la gestión y optimización de recursos, etc. Tenéis todas las novedades en estos enlaces, además de un WhitePaper y el site de Microsoft Connect desde donde descargar la Beta

El proceso de instalación sobre Windows Server 2008 es bastante mas sencillo que el de System Center Virtual Machine Manager 2007, principalmente porque nos evita la instalación previa de los prerequsitos. Una máquina recién instalada que hayamos hecho miembro de un dominio bastará para pasarnos las pantallas de instalación sin sobresaltos.

El siguiente proceso corresponde a una instalación de pruebas con la arquitectura más sencilla de las que se exponen en el documento anterior, en el que la base de datos es local y basada en un SQL Express. Tras descomprimir la descarga, simplemente ejecutamos el setup y seguimos los pasos:

Setup1 Setup2 Setup3

Setup4 Setup5 Setup6

Hasta aquí, preguntas banales. en las dos siguientes ventanas se nos pregunta que bases de datos vamos a utilizar o si queremos instalar SQL Express, y en la siguiente los puertos que utilizaremos pata que se conecte la consola de administración, los agentes y para la trasferencia de ficheros.

Setup7 Setup8

Setup9Setup10Setup11

Con esto habremos terminado la instalación. Volvemos a la primera ventana, e instalamos también la consola, que no pide ningún tipo de información relevante. Con ella podremos conectarnos al servidor para empezar a desplegar los agentes a los servidores de virtualización y gestionar sus máquinas virtuales. De eso ya hablaremos otro día, pero aquí os dejo tres pantallazos:

 scvmm2008-1 scvmm2008-2 scvmm2008-3

Saludos

David Cervigón

 

Excelente artículo de mi compañero Jose Barreto en relación a la relación entre Hyper-V y los diferentes sistemas de almacenamiento disponibles hoy en día en el mercado. La información está en inglés, pero aunque solamente sea por las talas merece la pena pasarse

http://blogs.technet.com/josebda/archive/2008/02/14/storage-options-for-windows-server-2008-s-hyper-v.aspx

José, a ver si alguna vez que vaya para allá me enseñas el laboratorio. ¡Con lo que siempre me han gustado a mi estas cosas y voy andando por la vida con unos discos USB externos :-( ).

Saludos

David Cervigón

Etiquetas de Technorati:

Esta es una pregunta/queja que se recibe bastante a menudo cuando se cuenta cómo encaja cada unos de los diferentes roles de Exchange Server 2007 en la topología de una organización. Y es que como el role de Transporte de Perímetro no puede ser instalado junto a ninguno de los demás, y es en él donde se habilitan por defecto los diferentes agentes anti-spam, es justo pensar que no queda más remedio que montar al menos dos servidores para mantener una infraestructura de Exchange 2007 completamente segura:

Roles           topología

Sin embargo esto, aunque deseable, no es así. Vamos a ver como se monta una organización de Exchange Server 2007 con toda la funcionalidad en un solo servidor, por supuesto ya sobre Windows Server 2008, y de paso vamos a protegerlo contra malware utilizando Forefront Security for Exchage Server with Service Pack 1.

Paso 1: Instalar Windows Server 2008 x64, hacerle miembro de un dominio o controlador de dominio.

Paso 2: Instalar los roles y funcionalidades de Windows Server 2008 que son requisitos para la instalación de Exchange Server 2007 SP1 (http://technet.microsoft.com/en-us/library/bb691354.aspx)

ServerManagerCmd -i RSAT-ADDS (solamente si la máquina NO es un DC)
ServerManagerCmd -i Web-Server
ServerManagerCmd -i Web-ISAPI-Ext
ServerManagerCmd -i Web-Metabase
ServerManagerCmd -i Web-Lgcy-Mgmt-Console
ServerManagerCmd -i Web-Basic-Auth
ServerManagerCmd -i Web-Digest-Auth
ServerManagerCmd -i Web-Windows-Auth
ServerManagerCmd -i Web-Dyn-Compression
ServerManagerCmd -i RPC-over-HTTP-proxy
ServerManagerCmd -i PowerShell
ServerManagerCmd -i Desktop-Experience

Paso: 3: Instalar Exchange Server 2007 con el SP1 integrado. Solamente esta versión (no la RTM) se puede instalar en Windows Server 2008). Elegir la instalación personalizada y marcar todos los roles, menos el Edge. Siguiente, siguiente, finalizar. Ya os pude los pantallazos en este post: http://blogs.technet.com/davidcervigon/archive/2008/01/15/exchange-2007-sp1-y-un-cluster-ccr-en-windows-server-2008.aspx

Paso 4: Habilitar los agentes de anti-spam en el transporte de concentrador. Este es el truco para poder prescindir de servidor de perímetro. Estos agentes no están activados por defecto en los servidores con este role, pero pueden habilitarse de manera rápida y sencilla. Basta con ejecutar el script de Powershell Install-AntiSpamAgents.ps1 que se encuentra en la carpeta %Programfiles%\Microsoft\Exchange Server\Scripts

Install-AntispamAgents.ps1

A partir de este momento podemos configurar ya los diferentes filtros contra el correo no deseado tanto a nivel de toda la organización como a nivel del servidor en que han sido habilitados:

AntiSpam-Tranport-Org AntiSpam-Tranport-Server 

La solución que estamos exponiendo aquí pasa por publicar en el firewall los puertos pertinentes para que el correo entre y salga y para que los clientes se puedan conectar. Me parece importante mencionar que otra funcionalidad importante del Edge Transport es seleccionar de manera muy cuidadosa la información de la organización y del Directorio Activo que se expone directamente a Internet.

Paso 5: Instalar Forefront Security for Exchange Server SP1. La versión de evaluación puede descargarse desde aquí, y su instalación es de las de "pinta y colorea". Dado que Forefront Security es una solución multimotor, con 10 motores diferentes de antivirus con sus propias firmas, solo tendremos que elegir hasta cuatro de ellos que acompañen al de Microsoft para funcionar simultáneamente en cada servidor (en instalaciones con varios servidores, lo suyo es combinarlas de manera que cuando el correo haya llegado a un destinatario haya pasado por los diez motores)

FS Ex SP1 - 1 FS Ex SP1 - 2 FS Ex SP1 - 3

 FS Ex SP1 - 4 FS Ex SP1 - 5 FS Ex SP1 - 6

  FS Ex SP1 - 7FS Ex SP1 - 8 FS Ex SP1 - 9

 FS Ex SP1 - 10 FS Ex SP1 - 11 FS Ex SP1 - 12

 FS Ex SP1 - 13 FS Ex SP1 - 14 FS Ex SP1 - 15

 FS Ex SP1 - 16 FS Ex SP1 - 17 FS Ex SP1 - 18

Si te apetece probarlo y además contarlo, tanto Exchange Server 2007 como Forefront Security están actualmente cubiertos en nuestro programa IT Pro Momentum para soporte a pilotos.

Saludos

David Cervigón

Hola

A raíz de este post, Pablo San Juan, uno de nuestros participantes en el IT Momentum Program me preguntaba acerca de la disponibilidad de System Center Essentials SP1 y cuales son los prerequisitos de Windows Server 2008 para poder hacer la instalación del producto. Hay que matizar que solamente la versión de SCE 2007 con el SP1 integrado se puede instalar sobre 2008. Se puede descargar de aquí, tanto en su versión de evaluación como un VHD preconfigurado:

Aprovechando que me ha tocado reinstalar una buena parte de mis máquinas virtuales (un fallo lo tiene cualquiera, y claro, para qué un simple backup...), he aprovechado para documentarlo un poco.

Estos son los roles y funcionalidades necesarios para que la instalación del producto y del SQL 2005 SP2 y sus Reporting Services (How to: Install and Configure Reporting Services on Windows Server 2008) vaya sin sobresaltos. Espero no olvidarme de ninguno:

servermanagercmd -i FS-FileServer
servermanagercmd -i Web-Common-Http
servermanagercmd -i Web-Http-Redirect
servermanagercmd -i Web-Asp-Net
servermanagercmd -i Web-Health
servermanagercmd -i Web-Windows-Auth
servermanagercmd -i Web-Stat-Compression
servermanagercmd -i Web-Mgmt-Console
servermanagercmd -i Web-Mgmt-Compat
servermanagercmd -i NET-Framework-Core

System Center Essentials requiere que la máquina en la que se instala sea miembro de un Directorio Activo. Una vez ejecutados los comandos anteriores (mejor en un .cmd con un "pause" al final) es necesario reiniciar antes de ponerse con el SQL 2005 SP2 y los Reporting Services. Una ver instalados es conveniente ejecutar el asistente de configuración de los Reporting Services, asegurarse de que en el directorio virtual ReportsServer estén configurados los permisos de ejecución de scripts para extensiones ISAPI (http://support.microsoft.com/default.aspx?scid=kb;EN-US;938245) y que la cuenta "Network Service" tenga permisos de lectura y ejecución en las carpetas "ReportManager" and "ReportServer" que se encuentran en la carpeta MSSQL.* corresponda a su instancia (por ejemplo, “%ProgramFiles%\Microsoft SQL Server\MSSQL\Reporting Services).

Saludos

David Cervigón

image

Si te interesa la virtualización, y sobre todo si estas probando Hyper-V y trabajas también con ESX, este producto va a dar bastante que hablar. Se trata de la evolución de SCVMM 2007 para gestionar también hosts con Hyper-V y VMWARE ESX como venía haciendo hasta ahora con Virtual Server 2005 R2 SP1.

He de reconocer que hace unos días que lo tengo en uno de los equipos, y tanto el proceso de instalación, como el de agregar los hosts y trabajar con sus VMs es bastante sencillo. No le he dado mucho más uso aún porque me hubiera resultado complicado estarme calladito, y teníamos órdenes explicitas de no enseñarlo hasta ahora.

imageOs lo podés descargar de http://connect.microsoft.com (debería bastar con hacer clic aquí para solicitar la participación en la "conexion", o aquí si ya lo habéis hecho):

 

image

Más información aqui: http://www.microsoft.com/systemcenter/scvmm/default.mspx

y pronto, más por mi parte.

Saludos

David Cervigón

Ya está publicado para los subscriptores de TechNet y MSDN (http://technet.microsoft.com/es-es/subscriptions/bb545043.aspx):

image

Pronto estará disponible para descarga general en el Windows XP Service Pack 3 website. Por ahora lo que sí se ha publicado es información general sobre el mismo, además del Windows XP Service Pack 3 Overview, un documento con detalles más técnicos, organizado por mejoras a las funcionalidades ya existentes, y las nuevas características que se han introducido.

Mi recomendación es lógicamente probarlo e desplegarlo en las máquinas con Windows XP. Yo de hecho voy a ponerlo raudo y veloz en mis máquinas virtuales para poder instalar las Integration Components de Hyper-V. Pero supongo que ahora tocará escuchar (o leer) cantarle alabanzas y desearle larga vida a todos los que en su dia denostaron el SP2, que era malo malísimo y un paso en la dirección equivocada. Veremos estudios sobre lo estupenda y niquelada que te deja la máquina, sobre todo si se compara con el SP1 de Windows Vista, y sabremos de casos milagrosos en los que Office abre archivos en menos de 2 segundos, y equipos que arrancan en menos de medio minuto, incluso desde discos de 5 1/4. Todo ello superado de largo, como no podía ser de otra manera, por cualquier otro SO que el investigador, o alguien a quien conoce, tiene instalado, con arranque dual.

En fin, lo de siempre.

Piensa por ti mismo.

Saludos

David Cervigón

Hola

El viernes nos preguntábamos si para poder instalar los Language Interface Packs (LIP) del Catalá, Euskera y Galego en Windows Vista era necesario que el Sistema Operativo base estuviese en Español o si con el Inglés también se podía. Dado que el requerimiento de estos LIP es que la interfaz de usuario esté en Español la duda era si la base en Inglés con el MUI en Español bastaba para poder instalarlos.

Los MUI (Multillingual User Interface) están incluidos como extra en Windows Vista Ultimate y hasta ahora yo había probado tanto a instalar Vista en inglés y aplicar el Language Pack en español como a la inversa; instalar Windows Vista en Español y aplicarle el MUI en Inglés. Y lo mismo con Office 2007. De hecho, es la configuración del equipo desde el que estoy escribiendo, a contracorriente de lo que se suele hacer dentro de Microsoft.

Estos pantallazos confirman que si es posible usar una instalación base en Inglés, instalar el Language Pack en Español, y luego aplicar los LIP del Catalán, el Gallego y el Euskera.

Partimos de una máquina virtual con una versión de windows Vista Ultimate en Inglés, instalamos el Language Pack en Español, que aparece como un extra, iniciamos sesión con la interfaz en el nuevo idioma, nos descargamos los LIPs, y los agregamos todos a la vez si queremos (nótese que el Euskera y el Catalán pueden usar como base un Vista en Francés):

Spanish Language PackLIPSLIP-EULALIPS-InstalledLIPS-Choose

CatalaEuskera Galego  

Para entender mejor todo esto de los Sistemas Operativos base, los MUI y los LIP lo mejor es leerse la Guide to Windows Vista Multilingual User Interface. Si lo que queremos es integrarlos en despliegues de Windows Vista, las instrucciones están en la Windows Vista Multilingual User Interface Step-by-Step Guide

Saludos

David Cervigón

Hola

Pablo, uno de nuestros participantes en el IT Momentum que está muy animado probando Windows Server 2008, me pregunta acerca del compartamiento de una instalación Server Core con respecto a las actualizaciones automáticas.

La respuesta corta es que Server Core mantiene intacto el Agente de Windows Update. Por tanto, correctamente configurado, puede descargar e instalar actualizaciones tanto de Microsoft Update como de un servidor WSUS.

Con respecto a cómo configurarlo, pues igual que siempre. O bien por políticas de grupo, o a mano. Para una configuración rápida del agente, hay un comando rápido:

c:\windows\system32> cscript scregedit.wsf /AU 4

NOTA: Aqui podríamos poner 1, 2, 3 o 5. En Server Core no podemos recibir notificaciones, por lo que no tienen demasiado sentido, asi es que cuidado con los las GPOs que afecten a los Server Cores de la red. El valor 0 deshabilita la descarga e instalación automática de las actualizaciones, pero aun asi se pueden hacer a mano (ver más abajo)

Ahora bien. ¿Como sabemos si esto esta funcionando?. ¿Como fuerzo el chequeo contra Microsoft Update o contra el servidor WSUS en su caso?. ¿Como forzar la instalación de una actualización en particular?

Aqui os dejo algunos scripts que he fusilado de aquí y de allá. Hay que ejecutarlos mediante cscript.

ListInstalledUpdates.vbs

Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcher
intHistoryCount = objSearcher.GetTotalHistoryCount

Set colHistory = objSearcher.QueryHistory(1, intHistoryCount)

For Each objEntry in colHistory
    Wscript.Echo "Title: " & objEntry.Title
    Wscript.Echo "Date: " & objEntry.Date
    Wscript.Echo "Service ID: " & objEntry.ServiceID
    Wscript.Echo "Support URL: " & objEntry.SupportURL
    Wscript.Echo
Next

CheckUpdates.vbs

Set objSearcher = CreateObject("Microsoft.Update.Searcher")
Set objResults = objSearcher.Search("Type='Software'")
Set colUpdates = objResults.Updates

For i = 0 to colUpdates.Count - 1
    Wscript.Echo "Title: " & colUpdates.Item(i).Title
    Set objIdentity = colUpdates.Item(i).Identity
    Wscript.Echo "Revision number: " & objIdentity.RevisionNumber
    Wscript.Echo "Update ID: " & objIdentity.UpdateID

    Set objInstallationBehavior = colUpdates.Item(i).InstallationBehavior
    Wscript.Echo "Can request user input: " & _
        objInstallationBehavior.CanRequestUserInput
    Wscript.Echo "Support URL: " & colUpdates.Item(i).SupportURL
    Wscript.Echo "Type: " & colUpdates.Item(i).Type
    For Each strArticle in colUpdates.Item(i).KBArticleIDs
        Wscript.Echo "KB article: " & strArticle
    Next
    Wscript.Echo
Next

InstallUpdate.vbs (necesita como parámetro el UpdateID que suelta CheckUpdates.vbs)

Set objArgs = WScript.Arguments
Update = objArgs(0)

Set objCollection = CreateObject("Microsoft.Update.UpdateColl")

Set objSearcher = CreateObject("Microsoft.Update.Searcher")
Set objResults = objSearcher.Search _
    ("UpdateID='" & Update & "'")
Set colUpdates = objResults.Updates
objCollection.Add(colUpdates.Item(0))

Set objInstaller = CreateObject("Microsoft.Update.Installer")
objInstaller.Updates = objCollection
Set objInstallResults = objInstaller.Install
Wscript.Echo objInstallResults.RebootRequired
Wscript.Echo objInstallResults.ResultCode

SCWindowsUpdate.vbs (todo lo anterior junto)

Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateupdateSearcher()

WScript.Echo "Searching for updates..." & vbCRLF

Set searchResult = _
updateSearcher.Search("IsInstalled=0 and Type='Software'")

WScript.Echo "List of applicable items on the machine:"

For I = 0 To searchResult.Updates.Count-1
    Set update = searchResult.Updates.Item(I)
    WScript.Echo I + 1 & "> " & update.Title
Next

If searchResult.Updates.Count = 0 Then
    WScript.Echo "There are no applicable updates."
    WScript.Quit
End If

WScript.Echo  vbCRLF & "Would you like to install updates now? (Y/N)"
strInput = WScript.StdIn.Readline
WScript.Echo

If (strInput = "N" or strInput = "n") Then
    WScript.Quit
ElseIf (strInput = "Y" or strInput = "y") Then

    WScript.Echo vbCRLF & "Creating collection of updates to download:"

    Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")

    For I = 0 to searchResult.Updates.Count-1
        Set update = searchResult.Updates.Item(I)
        WScript.Echo I + 1 & "> adding: " & update.Title
        updatesToDownload.Add(update)
    Next

    WScript.Echo vbCRLF & "Downloading updates..."

    Set downloader = updateSession.CreateUpdateDownloader()
    downloader.Updates = updatesToDownload
    downloader.Download()

    WScript.Echo  vbCRLF & "List of downloaded updates:"

    For I = 0 To searchResult.Updates.Count-1
        Set update = searchResult.Updates.Item(I)
        If update.IsDownloaded Then
           WScript.Echo I + 1 & "> " & update.Title
        End If
    Next

    Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")

    WScript.Echo  vbCRLF & _
    "Creating collection of downloaded updates to install:"

    For I = 0 To searchResult.Updates.Count-1
        set update = searchResult.Updates.Item(I)
        If update.IsDownloaded = true Then
           WScript.Echo I + 1 & "> adding:  " & update.Title
           updatesToInstall.Add(update)   
        End If
    Next

End If

WScript.Echo  vbCRLF & "Would you like to install updates now? (Y/N)"
strInput = WScript.StdIn.Readline
WScript.Echo

If (strInput = "N" or strInput = "n") Then
    WScript.Quit
ElseIf (strInput = "Y" or strInput = "y") Then
    WScript.Echo "Installing updates..."
    Set installer = updateSession.CreateUpdateInstaller()
    installer.Updates = updatesToInstall
    Set installationResult = installer.Install()
    'Output results of install
    WScript.Echo "Installation Result: " & _
    installationResult.ResultCode
    WScript.Echo "Reboot Required: " & _
    installationResult.RebootRequired & vbCRLF
    WScript.Echo "Listing of updates installed " & _
     "and individual installation results:"
    For I = 0 to updatesToInstall.Count - 1
        WScript.Echo I + 1 & "> " & _
        updatesToInstall.Item(i).Title & _
        ": " & installationResult.GetUpdateResult(i).ResultCode        
    Next
End If

Saludos

David Cervigón

Hola

Para los que hayáis echado de menos en Hyper-V el comando VHDMount.exe que incorporaba Virtual Server 2005 R2 SP1, aquí va un pequeño truco que os puede facilitar la vida cuando se trabaja con máquinas virtuales con el hypervisor de Windows Server 2008.

Lo he hecho mediante un script de powershell, pero se puede hacer también con VBScript (basta utilizar como base este artículo de The Virtual PC Guy). Se trata de lograr que nos aparezca lo siguiente cuando se hace clic con el botón derecho en un fichero .vhd:

VHDFILE-Options

MountVHD.ps1:

Primeramente, el script de powershell que monta, desmonta o compacta un .vhd. Lógicamente, puede usarse también desde la consola de powershell:

$VHDService = get-wmiobject -class "Msvm_ImageManagementService" -namespace "root\virtualization" -computername "."
if($args[1] -eq "Mount"){$Result = $VHDService.Mount($args[0])}
elseif($args[1] -eq "UnMount"){$Result = $VHDService.UnMount($args[0])}
elseif($args[1] -eq "Compact"){$Result = $VHDService.CompactVirtualHardDisk($args[0])}

El script acepta dos parámetros. El primero es el path completo al .vhd y el segundo es la acción a llevar a cabo, que puede ser Mount, UnMount o Compact. Por ejemplo:

  • PS> mountvhd c:\VirtualMachines\server1.vhd Mount
  • PS> mountvhd c:\VirtualMachines\server1.vhd UnMount
  • PS> mountvhd c:\VirtualMachines\server1.vhd Compact

NOTA: Para que esto funcione, será necesario tener una política de ejecución en powershell que permita la correcta ejecución de scripts (p.e set-executionpolicy unrestricted).

VHDfile.reg:

Lo segundo es meter las entradas necesarias en el registo para que la UI nos muestre las opciones deseadas al hacer clic con el botón derecho del ratón sobre un .vhd:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.vhd]
@="vhdfile"
[HKEY_CLASSES_ROOT\vhdfile]
@="Virtual Hard Disk"
[HKEY_CLASSES_ROOT\vhdfile\shell]
@="Mount"
[HKEY_CLASSES_ROOT\vhdfile\shell\Mount]
[HKEY_CLASSES_ROOT\vhdfile\shell\Mount\command]
@="powershell mountvhd '%1' Mount"
[HKEY_CLASSES_ROOT\vhdfile\shell\UnMount]
[HKEY_CLASSES_ROOT\vhdfile\shell\Unmount\command]
@="powershell mountvhd '%1' UnMount"
[HKEY_CLASSES_ROOT\vhdfile\shell\Compact]
[HKEY_CLASSES_ROOT\vhdfile\shell\Compact\command]
@="powershell mountvhd '%1' Compact"

Tras importar este .reg, ya tendremos las opciones Mount, Compact y UnMount disponibles en la interfaz gráfica. Dado que la opción por defecto es "Mount", eso es lo que sucederá si hacemos doble clic sobre un .vhd

Algunas consideraciones importantes:

  • Si MountVHD.ps1 no está en unca carpeta incluida en el path del sistema, será necesario incluir su path completo en el .reg
  • Cuando se monta un .vhd, no aparece necesariamente una letra de unidad asociada en el Explorador, ya que el disco estará offline. Es necesario ir al Disk Management y ponerlo online a mano.
  • La operación de compactar no muestra interfaz gráfica alguna. Es necesario fijarse en cuando desaparece la unidad que se asocia en el explorador, y tener la precaudicón de no hacer ninguna operación con ese disco ni intentar desmontarlo mientras dure el proceso.
  • Algo similar a esto puede lograrse con Virtual Server 2005 R2 SP1. Más información aquí

Si tengo un rato buscaré la manera de incorporar algunas mejoras al script.

Saludos

David Cervigón

Hola

Antes de nada es importante mencionar que la única manera soportada de sacar una VM de un host de virtualización para llevarla a otro, o moverla su fichero de configuración a otra localización del sistema de almacenamiento, es mediante la funcionalidad Importar/Exportar de la consola.

Esto funciona de la siguiente manera. Cuando se crea una nueva máquina virtual se genera un fichero .xml que almacena su configuración, y que tiene por nombre un GUID que la representa de manera unívoca (así se pueden crear máquinas virtuales que tengan el mismo nombre sin que haya conflictos). Este fichero se genera en una carpeta llamada "Virtual Machines" dentro del path por defecto que hayamos configurado para ello, o bien dentro del que especifiquemos explícitamente durante la creación de la máquina virtual. Además se genera un "Simbolic Link" a dicho fichero en la carpeta %Allusersprofile%\Application Data\microsoft\Windows\Hyper-V\Virtual Machines, que es lo que realmente lee la pila de gestión de Hyper-V para mostrar dicha VM en la consola. Resumiendo:

  • Asumiendo que el path por defecto es F:\VMs
  • Creamos una nueva VM en el path por defecto
  • Se genera el fichero F:\VMs\Virtual Machines\<GUID unico>.xml
  • En la carpeta %Allusersprofile%\Application Data\microsoft\Windows\Hyper-V\Virtual Machines se genera un symbolic link que apunta a F:\VMs\Virtual Machines\<GUID unico>.xml

Mencionar también que si se borra la máquina virtual desde la consola, todo lo anterior se elimina del sistema, preservándose únicamente el .vhd.

Cambiar la localización de VHD no es demasiado traumático, ya que basta con editar el fichero de configuración con la interfaz gráfica y cambiar su path. Sin embargo, si lo que queremos es que una misma VM este dada de alta en diferentes hosts, o trasladar el fichero de configuración de un path a otro, la cosa cambia.  Esto no es algo que se vaya a hacer de manera frecuente, pero en entornos como el nuestro, en los que almacenamos gran parte de las máquinas virtuales en discos externos que vamos pinchando en diferentes equipos puede resultar útil. No obstante, es muy posible que tengamos que modificar posteriormente a mano algunas cosas, como la asignación de las NICs a los switches virtuales y redes definidas en el nuevo host.

Una vez explicado cómo funciona, aquí va un pequeño procedimiento para registrar/desregistrar a mano VMs en los hosts con Hyper-V, y que cada cual lo aplique como quiera. A partir de este momento entramos dentro del campo de lo no soportado.

Cómo "desregistrar" una máquina virtual

Basta con usar un script "desregistrar.cmd" que contenga:

del "%Allusersprofile%\Application Data\microsoft\Windows\Hyper-V\Virtual Machines"\%1.xml

Este script lo copiamos allí donde resida el <GUID unico>.xml, abrimos un CMD, nos situamos en ese path y lo ejecutamos pasándole como parámetro el <GUID unico> (sin el .xml):

desregistrar.cmd <GUID unico>

Cómo registrar una VM

En este caso el script "registra.cmd" será:

mklink "%Allusersprofile%\Application Data\microsoft\Windows\Hyper-V\Virtual Machines"\%1.xml "%cd%"\%1.xml
icacls "%Allusersprofile%\Application Data\microsoft\Windows\Hyper-V\Virtual Machines"\%1.xml /grant "NT VIRTUAL MACHINE\%1":F /L

Nuevamente, lo copiamos allí donde resida el <GUID unico>.xml, abrimos un CMD, nos situamos en ese path y lo ejecutamos pasándole como parámetro el <GUID unico> (sin el .xml):

registrar.cmd <GUID unico>

Con esto, creamos el enlace simbólico al .xml, y le damos permisos de control total a un SID "invisible" que representa a dicha máquina virtual. Hasta donde yo sé, éste último paso no era necesario antes de la RC0 de Hyper-V, pero ahora si no se hace la VM da un error no especificado al arrancar.

Saludos

David Cervigón

Hola

SSL se inventó para proteger el tráfico HTTP de miradas indiscretas y malintencionadas. Al igual que pasa con el cada día más utilizado SIP, no es necesario tener demasiados conocimientos ni herramientas muy complejas para saber qué información se está intercambiando simplemente echando una ojeada a las tramas en texto claro.

SSL es un ejemplo clásico de doble cifrado en el que el intercambio de la clave simétrica que se utilizará para cifrar el flujo de datos se protege a su vez con cifrado asimétrico. Aquí está muy bien explicado:

http://support.microsoft.com/kb/257591/en-us

Me ha dado por contar esto por dos razones. La primera es porque SSL es un engorro a la hora de diagnosticar problemas u obtener información acerca del intercambio de datos entre cliente y servidor, ya que el clásico método de capturar el tráfico de red es inútil al estar los datos cifrados. La segunda es porque esto que voy a contar es una de las cosas que una pieza de malware para obtener datos privados y enviarlos a aquel a quien sirve.

Por lo general esto mismo de suele hacer mediante herramientas que usan técnicas de "man in the middle", que falsean el certificado que presenta el servidor al cliente, permitiendo el descifrado y cifrado del flujo de datos en tiempo real y que permiten a la herramienta. Sin embargo, lo que hacen las herramientas que vamos a utilizar es inyectar una dll en el proceso que va a utilizar SSL, de manera que se interceptan las llamadas a EncryptMessage y DecryptMessage (secur32.dll) además de algunas otras de Windows Sockets (ws2_32.dll / wsock32.dll) y se guardan en un log. Esto permite sacar los datos de la conversación cifrada no solamente de Internet Explorer, sino de cualquier otro navegador, aplicación o servicio que usen SSL.

Estas herramientas son STRACE y HTTPREPLAY, desarrolladas por Emmanuel Boersma, y que se pueden descargar gratuitamente de la web de Microsoft. Solo están soportadas para x86 y al instalarlas simplemente se copian los ficheros necesarios en  %ProgramFiles%\STRACE y %ProgramFiles%\HTTPREPLAY respectivamente. En ambos casos hay un Readme.txt con las instrucciones detalladas.

Para capturar el tráfico, hay que hacer lo siguiente (dependiendo del entorno, es posible que tengamos que usar STRACE.dll_IE6 en ligar de STRACE.dll_IE7):

  • Si queremos utilizar IE: Ejecutar el script STRACE.CMD
  • Si queremos usar Firefox: Ejecutar el script STRACE_FIREFOX.CMD
  • Si queremos usar una aplicación que usa SSL: withdll /d:STRACE.dll_IE7 MYAPPLICATION.EXE
  • Si queremos inyectar la DLL en un proceso ya existente: injdll /p:PID /d:STRACE.dll_IE7

Esto nos generará automáticamente un LOG en el escritorio con todo el tráfico en texto claro, bastante incómodo de interpretar. Es aquí donde entra en juego HTTPREPLAY, cuya misión es la de "recrear" el tráfico generado sin que el servidor web esté presente y sin necesidad de tener que montar uno alternativo. Aqui solamente lo vamos a utilizar para echar un vistazo al tráfico almacenado en el log de una manera más amigable:

  • HTTPREPLAY.CMD %userprofile%\desktop\STRACE_IEXPLORE_PID_10032.log

En este ejemplo he intentado hacer login en Live.com con una cuenta de passport, obviamente falsa:

image

Simplemente haciendo clic sobre los métodos se ve la información completa de la traza, y lo mismo con el status para ver las respuestas. Por ejemplo, el usuario y la contraseña utilizados en el formulario están en el POST:

SSL-Live

Por último, algunos temas relacionados con esto:

Saludos

David Cervigón

Hola

Antes de nada, hay que dejar claro que la unica manera efectiva de evitar este tipo de ataques es mediante un desarrollo adecuado de la aplicación web. Sin embargo, al margen del buen hacer de los desarrolladores, el administrador puede y debe también llevar a cabo tareas preventivas y de detección de este tipo de ataques, y configurar el sistema para minimizar su impacto lo más posible.

El principio de defensa en profundidad establece que se debe securizar de manera independiente cada una de las capas de la torre OSI, implementando las contramedidas adecuadas en cada caso. El SQL Injection, como otros ataques similares, sucede a nivel de aplicación y es ahí donde debe ser evitado. Sin embargo, una interpretación libre de ese mismo principio introduce el concepto de "sana desconfianza constructiva" entre los responsables de securizar cada una de las capas. Dicho de otra manera, no debemos contar con la efectividad de las contramedidas que serán implementadas en los niveles superior o inferior, y establecer también en el nuestro todas las que estén en nuestra mano como si la seguridad de todo el sistema dependiera única y exclusivamente de la securización de nuestra capa. Trabajando de esta manera aumenta la probabilidad de tener simultáneamente unos firewalls bien configurados, hosts con el SO y los servicios fortificados, bases de datos bien diseñadas desde el punto de vista de la seguridad, y desarrollos web seguros.

Lo que vamos a utilizar es la funcionalidad de Request Filtering de IIS7 (equivalente a URLScan en IIS6) junto con la herramienta LogParser 2.2. La idea es ser capaces de identificar cuales son las longitudes máximas de URL y consultas que un site/aplicación va a utilizar de manera legítima, y evitar que el servidor web sirva nada que supere esas longitudes. Esto tiene además como efecto colateral que en los casos en que eso suceda, se producirán errores http específicos, que podremos trazar y que se pueden utilizar como un método de detección de intentos de intrusión.

Lo que propongo aquí es una metodología de trabajo sencilla, que luego cada cual puede complicar o refinar lo que quiera. Parto de la base de que existen tres entornos completamente diferentes:

  • El entorno de producción, que es donde viven los servicios y aplicaciones que están dando servicio a clientes internos y/o externos.
  • El entorno de preproducción, donde se prueban los cambios que se van a hacer en el entorno de producción. Debe ser un reflejo exacto del entorno de producción, para que las pruebas que se realicen tengan sentido y podamos aplicarlos con tranquilidad al entorno de producción.
  • El entorno de pruebas/desarrollo, donde los programadores trabajan durante el proceso de creación y depuración de la aplicación web, y los administradores ponen a prueba nuevos servicios, aplicaciones y configuraciones del sistema. Generalmente es un entorno más relajado en cuanto a sus restricciones, donde se busca más la funcionalidad que la seguridad, el rendimiento y la estabilidad.

Una vez se ha terminado el desarrollo de la aplicación, se pasa al entorno de preproducción donde se realizará toda la batería de pruebas necesarias para comprobar que cada una de sus características funcionarán correctamente en el entorno de producción. Para el caso que nos ocupa, es importante que dichas pruebas funcionales contemplen la totalidad de las consultas que la aplicación puede llegar a hacer a las bases de datos. La idea es utilizar posteriormente los logs de IIS en busca de los datos que necesitamos para configurar el servidor web de manera que no sirva URLs o consultas de mayor longitud.

Insisto en que esta metodología no es la panacea universal, y esa es la razón por la que titulo el post "minimizando" y no "evitando".

Request Filtering

En la versión de IIS7 incluida en la RTM de Windows Server 2008, la configuración del Request Filtering se lleva a cabo directamente sobre el fichero web.config a nivel de site, aplicación, o carpeta, ya que no existe interfaz gráfica para hacerlo (la sintaxis esta documentada aqui). Por fortuna, al instalar el IIS7 Administration Pack Technical Preview esta carencia se resuelve y podemos configurar cómodamente con el IIS Manager las extensiones de ficheros que no serviremos, los verbos HTTP permitidos, las secuencias de URL denegadas, los segmentos ocultos y las longitudes de determinadas cabeceras.

Request Filtering - IIS Manager Resquest Filtering 

En nuestro caso estamos interesados en encontrar los valores adecuados para la "Maximum URL lenght" y Maximum query string", aunque es muy posible que queramos afinar también el resto de opciones. Para evitar este tipo de ataques, es frecuente encontrar diccionarios de palabras en la lista de secuencias de URL denegadas, que contemplan la mayor parte de los comandos SQL que se suelen utilizar para construir las sentencias de las consultas.

Formato de los logs de IIS

Por defecto IIS7 guarda sus logs en formato W3C, y podemos elegir qué información queremos almacenar en ellos:

W3C Logging

Los campos del log que nos interesan a nosotros son el URI Stem (cs-uri-stem) y el URI Query (cs-uri-query) del log de IIS que corresponda a la fecha en la que se han realizado las pruebas funcionales de la aplicación.

LogParser 2.2

Como dice en su sitio de descarga, esta es una herramienta muy potente que da acceso universal a datos almacenados en ficheros de texto con diferentes formados (CSV, XML, Logs) y a fuentes de datos del sistema operativo como los logs de eventos, el registro, el sistema de archivos o el directorio activo. Lo curioso es que accedemos a ellos como si estuviésemos haciendo consultas a una base de datos, independientemente de cual sea su origen, y podemos presentar los resultados de diferentes maneras. Lógicamente, utilizarla no es precisamente trivial. De hecho en el IIS7 Administration Pack Technical Preview se ha incluido una nueva funcionalidad, "IIS Logs", basada en algunas de las cosas que se suele hacer con esta herramienta.

LogParser se suele utilizar en ocasiones como herramienta de análisis forense en IIS. En este artículo de Securityfocus se explica cómo hacerlo, y de hecho basta retocar un poco alguna de las consultas que aparecen citadas en él para obtener la información que andamos buscando:

Para sacar la máxima longitud de URL, asi como el número de veces en los que cada URL se ha solicitado:

logparser "SELECT cs-uri-stem, Count(*) As Total, STRLEN(cs-uri-stem) as Longitud FROM C:\inetpub\logs\LogFiles\W3SVC2\u_ex080403.log GROUP BY cs-uri-stem ORDER BY Longitud DESC" -rtp:100

y para la máxima longitud de query, asi como el número de veces que se ha realizado cada consulta:

logparser "SELECT cs-uri-query, Count(*) As Total, STRLEN(cs-uri-query) as Longitud FROM C:\inetpub\logs\LogFiles\W3SVC2\u_ex080403.log GROUP BY cs-uri-query ORDER BY Longitud DESC" -rtp:100

Lo único que hay que variar en los comandos es el path al log que nos interesa. Un ejemplo de los resultados que se obtienen son los siguientes (he utilizado un site con Mediawiki al que he hecho un par de consultas rápidas)

cs-uri-stem

cs-uri-query 

Según esto los datos que tendríamos que utilizar serían 50 para la URL y 84 para la query (no pongáis esto para mediawiki, que os la cargáis seguro), con lo que el fichero web.config quedaría, al margen de las otras opciones de filtrado que queramos introducir:

<configuration>
<system.webServer>
  <security>
   <requestFiltering>

       <requestLimits
       maxAllowedContentLength="30000000"
       maxUrl="30"
       maxQueryString="25"
       />

   </requestFiltering>
  </security>
</system.webServer>
</configuration>

Comprobando si el filtrado esta sirviéndonos o no

Como decía más arriba, el filtrado nos va a dejar errores HTTP personalizados, en particular el 404.14 para las URLs y el 404.15 para las consultas (ver la tabla del final del ya citado How to Use Request Filtering). Nuevamente podemos usar LogParser para buscar en todos los logs ocurrencias de dichos errores y poderlos analizar con detalle para ver si son intentos de ataque o falsos positivos:

logparser "SELECT sc-status, sc-substatus, cs-uri-stem, cs-uri-query, Count(*) As Total FROM C:\inetpub\logs\LogFiles\W3SVC2\u_ex*.log WHERE sc-status='404' and (sc-substatus='14' or sc-substatus='15') GROUP BY sc-status, sc-substatus, cs-uri-stem, cs-uri-query ORDER BY sc-substatus DESC" -rtp:100

Seguramente hay otros muchos métodos, herramientas, etc. pero esto lo usé para preparar una demo de seguridad en IIS7, y al menos quería dejarlo documentado.

Muchas gracias a Maligno por haber inspirado este post con sus comillas y sus asteriscos, y a Nacho Alonso por echarme una mano con las queries SQL, como ha hecho siempre con otras muchas cosas (este tipo es de los que si que saben, y mucho, y adem