jueves, 13 de junio de 2013

DNS block list en Windows Server

Hola.

Un olvidado a la hora de aumentar la seguridad de nuestra red es el servicio de blocklist de nuestro DNS, este servicio es administrable en su totalidad e incorpora una lista de direcciones, que para no ahondar mucho más en él, podemos decir que no se resolverán aunque tengamos una entrada host , alias, etc. creada.

El ejemplo más claro lo vemos cuando queremos publicar un servicio proxy pac vía dns y creamos la entrada, que debería resolver wpad.dominio.local por ejemplo.

Captura donde podéis ver que no podemos hacer ping a la dirección:

image

Gestión de la Blocklist

Comandos comunes en la gestión de este servicio son:

  • dnscmd servidor /info /globalqueryblocklist    - Nos enseña la lista de direcciones bloqueadas.
  • dnscmd Servidor /config /globalqueryblocklist nombre nombre nombre …   - Añade una o varias direcciones
  • dnscmd servidor /config /enableglobalqueryblocklist 0|1  - 0 Deshabilida  1 Habilita Blocklist
  • dnscmd /config /globalqueryblocklist  - Vacia la lista de direcciones.

Por defecto tenemos en la lista wpad y Isatap:

image

Y tras el reseteo de la lista:

image Saludos.

lunes, 3 de junio de 2013

Nuevas funcionalidades en Hyper-V dentro de Windows Server 2012 R2

 

Hola.

Hoy se han presentado bastantes novedades de lo que va a ser el nuevo rol de Hyper-V dentro de Windows Server 2012 R2 y que junto a System Center 2012 R2, también se ha dicho que en Junio será pública una Release Candidate.

Nuevas funcionalidades:

1. Replica extendida. El servidor que recibe la réplica, podrá ser a su vez un emisor hacia otro servidor de backup = Server A replica a server B y a su vez, replica a server C. También podremos controlar el intervarlo de envío de los logs al servidor de réplica.

2. Máquinas virtuales de nueva generación. Este es un concepto que a todos nos resulta nuevo, pero a falta de una exhaustiva investigación Sonrisa, son máquinas virtuales sin relación con el hardware, no dispositivos legados, no bios, todo virtual y sin dependencias.

3.Remote Desktop Services integrado en el VM Bus, lo que le va a hacer, independiente del adaptador de red.

4.Redimensionamiento Online de VHDX. Creo que la descripción lo explica todo.

5.USB como pass-trough Hoy mismo lo he echado en falta Sonrisa.

6.Compatibilidad total con Azure ya que, según Microsoft, en Azure contaremos con la misma versión de host de la que ofrece el sistema operativo que adquiriremos.

7.Online VM Export. Podremos exportar máquinas virtuales sin interrupción.

8.Live migration más rápido. Se comprimirá los datos antes de ser migrados lo que acelerará la migración en vivo. A esto se suma que se podrá combinar con las ventajas que aporta SMB direct y las nuevas versiones de SMB.

9.Activación automática de VMS. Veremos como funciona pero sabiendo que las VMS ya se puede decir que se licencian gracias a la compra del host, lo que he leido está relacionado con la activación única del host (esto es una teoría personal a falta de analizar al 100% esta funcionalidad).

10. Qos para el almacenamiento. Podremos controlar y gestionar los I/o y peso de una VM en relación a la ocupación del almacenamiento. Lo que se suma al ya antiguo Sonrisa control del peso en cuanto al uso del procesador y control de la memoria que ofrecía Dynamic Memory.

Saludos.

Limpiar Proxy pac cacheado en equipos

 

Hola.

Las últimas semanas he estado trabajando mucho en relación a la publicación de proxy pac que está detrás de la opción “Detectar automáticamente la configuración” a la hora de que el equipo, encuentre la salida correcta por internet.

En los próximos días colgaré bastante información bajo la etiqueta Proxypac, la cual espero que os sea útil si tenéis que realizar pruebas y su posterior puesta en producción.

Por el momento quería dejar publicados los pasos necesarios para limpiar todo rastro de la caché del archivo proxy pac. Esta información es útil ya que como el S.O. cachea este archivo, comprobar cada cambio se convierte en una verdadera pesadilla:

Limpiar caché manualmente:

1. Borrar  por completo el historial del navegador .

2. Abrir un CMD como Administrador.

3. Ejecutar el comando: Del \wpad*.dat /s  (cuidado, borrará cualquier archivo proxy pac que tengáis en el disco.

4. Ejecutar el archiconocido: ipconfig /flushdns

5. Ejecutar: nbtstat –r

6. Abrir navegador.

También deciros que por mi experiencia, Firefox parece que al menos a mí, no me cachea el proxy pac, por lo que en producción va a resultar un tanto pesado, pero para hacer troubleshooting es ideal.

Si quisierais desactivar el cacheado del proxy en todo o parte del parque, os dejo un KB de Microsoft donde podéis ver como se hace, pero, de todas formas, yo limpiaría manualmente la caché en los equipos donde aunque hayáis aplicado esta política o modificación de registro, queráis estar completamente seguros que está cogiendo el proxy pac publicado.

http://support.microsoft.com/kb/271361/es

 

Saludos.

Instalar características de ws2012 offline eligiendo fuente de datos

 

Hola.

Cuando instaláis una  característica (Feature) o Rol en Windows Server 2012 o Windows 8, os podéis encontrar que sin conexión a internet o contando con una conexión filtrada a través de un proxy, no la activación de estas, no pueda realizarse.

Para solucionar este problema, debéis indicar una fuente de datos correcta ya que Internet, como tal, no es una posibilidad.

Por tanto:

1. Debéis descomprimir el Iso de Ws2012 y/o W8 o copiar el contenido del dvd en una carpeta.

2. Utilizar este comando para la activación de:

dism.exe /online /enable-feature /featurename:Feature /Source:Unidad:\sources\sxs /LimitAccess /all

Ejemplo .Net Framework:

dism.exe /online /enable-feature /featurename:NetFX3 /Source:e:\isos\sources\sxs /LimitAccess /all

Esta es una consulta más o menos común en los foros, pero atentos, pocas instrucciones dadas en estos, añaden la variable /all la cual habilita la activación de dependencias y por tanto, el comando falla fácilmente.

Saludos

viernes, 31 de mayo de 2013

Lista de actualizaciones y hotfix publicados para Hyper-V en WS2012

 

Hola.

En Technet han actualizado la tabla con la lista de actualizaciones y hotfix sacados hasta la fecha para Hyper-V en Windows Server 2012

Aquí lo tenéis:

http://social.technet.microsoft.com/wiki/contents/articles/15576.hyper-v-update-list-for-windows-server-2012.aspx

En este web también podéis encontrar algo similar en relación a actualizaciones y hotfix para el rol de Failover Clúster:

http://support.microsoft.com/kb/2784261

Saludos.

miércoles, 29 de mayo de 2013

Sacar tipo index de una imagen .wim

 

Hola.

Hacía tiempo que no me liaba con esto, pero como tampoco es que esta información sea fácil de encontrar por internet, os detallo el comando necesario para ver cual es la versión de sistema operativo que comprende el index X de una imagen .wim.

dism /get-wiminfo /WimFile:G:\w2012wims\install.wim /index:Número

image

Voy a ver si me lio con el script para que todo vaya del tirón en un despliegue con vhds. Espero subirlo por aquí pronto.

viernes, 5 de abril de 2013

Hyper-V: Top Free programs

Hola.

Os dejo un enlace de un compañero MVP donde relaciona las principales herramientas que solemos usar con Hyper-V. Veréis que siempre se descubre algo ;).

http://social.technet.microsoft.com/wiki/contents/articles/2325.hyper-v-top-free-programs.aspx

miércoles, 27 de marzo de 2013

Script: inventario donde se relaciona usuario con equipo.

 

Un problema común y fácilmente solucionable en todas los dominios, es el de asociar equipos con usuario.

Para tener un inventario y registro de usuarios que han pasado por cada uno de los equipos, hice un script bastante simple, el cual deja en una carpeta oculta en la red un registro con cierta información, como es: Usuario,dominio, nombre de equipo, fecha e ip. en un archivo de texto separado por comas.

$Date = Get-Date -format MM-dd-yyyy
$Time =     "{0:h:mm:ss tt zzz}" -f (get-date) #finalmente no se guarda para que funcione la búsqueda de duplicados.

$computer=get-content env:computername
$user= [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$Netip = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -computername localhost

add-content \\servidor\share$\Repositorio\infoequipos.txt -value ($user + "," + $computer + "," + $date + "," + $netip.ipaddress)

Saludos.

martes, 26 de marzo de 2013

Script que permite limpiar o subir fotografía a AD.

 

Hola.

Os cuelgo a continuación un Script que he terminado y que permite al usuario subir o limpiar su foto del directorio activo, para que luego se alimente, ya sabéis, Exchange, Lync, etc.

Diréis, ¿Por qué no lo haces en C# y lo compilas?, pues porque lo he ido haciendo en mis ratos libres y como muchas otras cosas, nació para algo diferente. Pero me gusta porque el usuario lo puede lanzar con unas simples instrucciones (botón derecho, ejecutar con poweshell) y al contrario de algunas aplicaciones, no tiene por qué, tener derechos de administrador local para instalarse nada. Sonrisa

Como es común en estas cosas, solo tenéis que localizar y adaptar esta línea de aquí:

$root = [ADSI]'GC://dc=dominio,dc=local' #Inyecta el dominio con el que trabajar

Se que es mejorable,  lo se Guiño.

También tiene varias funciones que os pueden servir de utilidad.

#------------------------------------------------------
#Script encargado de guardar o limpiar fotografía en AD del campo Thumbnailphoto

#Autor: Miguel Hernández

#------------------------------------------------------

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

#-------------------------------------------------------------------------------
#Funciones
#-------------------------------------------------------------------------------

#Toma usuario y lo devuelve con valor $X0
function tomausuario
{

    $objForm0 = New-Object System.Windows.Forms.Form
    $objForm0.Text = "Fotografía en Directorio Activo"
    $objForm0.Size = New-Object System.Drawing.Size(300,120)
    $objForm0.StartPosition = "CenterScreen"

    $objForm0.KeyPreview = $True
    $objForm0.Add_KeyDown({if ($_.KeyCode -eq "Enter")
        {$x0=$objTextBox0.Text;$objForm0.Close()}})    #toma el valor X0
    $objForm0.Add_KeyDown({if ($_.KeyCode -eq "Escape")
        {$objForm0.Close()}})

    $objLabel0 = New-Object System.Windows.Forms.Label
    $objLabel0.Location = New-Object System.Drawing.Size(10,10)
    $objLabel0.Size = New-Object System.Drawing.Size(280,20)
    $objLabel0.Text = "Usuario:"
    $objForm0.Controls.Add($objLabel0)

    $objTextBox0 = New-Object System.Windows.Forms.TextBox
    $objTextBox0.Location = New-Object System.Drawing.Size(10,30)
    $objTextBox0.Size = New-Object System.Drawing.Size(260,20)
    $objForm0.Controls.Add($objTextBox0)

    $OKButton0 = New-Object System.Windows.Forms.Button
    $OKButton0.Location = New-Object System.Drawing.Size(110,60)
    $OKButton0.Size = New-Object System.Drawing.Size(75,23)
    $OKButton0.Text = "OK"
    $OKButton0.Add_Click({$x=$objTextBox0.Text;$objForm0.Close()})
    $objForm0.Controls.Add($OKButton0)

    $objForm.Topmost = $True

    $objForm0.Add_Shown({$objForm0.Activate()})
    [void] $objForm0.ShowDialog()

return $x0

}

#----------------------------------------------------------
#Función resultado
#----------------------------------------------------------

#Abre form con el valor $valor escrito.

function resultado
{

    $objForm0 = New-Object System.Windows.Forms.Form
    $objForm0.Text = "Resultado"
    $objForm0.Size = New-Object System.Drawing.Size(400,90)
    $objForm0.StartPosition = "CenterScreen"

    $objLabel0 = New-Object System.Windows.Forms.Label
    $objLabel0.Location = New-Object System.Drawing.Size(10,20)
    $objLabel0.Size = New-Object System.Drawing.Size(380,20)
    $objLabel0.Text = $valor
    $objForm0.Controls.Add($objLabel0)

       $objForm.Topmost = $True

    $objForm0.Add_Shown({$objForm0.Activate()})
    [void] $objForm0.ShowDialog()
}

#-------------------------------------------------------------
#Función donde se abre ventana donde elegir fotografía
#-------------------------------------------------------------

function Select-FileDialog
    {
        param([string]$Title,[string]$Directory,[string]$Filter="All Files (*.*)|*.*")
        [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
        $objForm = New-Object System.Windows.Forms.OpenFileDialog
        $objForm.InitialDirectory = $Directory
        $objForm.Filter = $Filter
        $objForm.Title = $Title
        $objForm.ShowHelp = $true
        $Show = $objForm.ShowDialog()

        If ($Show -eq "OK")
        {
            Return $objForm.FileName
        }
        Else
        {
            $valor = "Operación cancelada por el usuario."
            resultado $valor
        }
    }

#------------------------------------------------------
#Empieza el script
#------------------------------------------------------

#Ventana Form donde se pregunta la acción a realizar

$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Fotografía en Directorio Activo"
$objForm.Size = New-Object System.Drawing.Size(300,200)
$objForm.StartPosition = "CenterScreen"

$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter")
    {$x=$objTextBox.Text;$objForm.Close()}})
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape")
    {$objForm.Close()}})

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(75,130)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click({$x=$objTextBox.Text;$objForm.Close()})
$objForm.Controls.Add($OKButton)

$objLabel0 = New-Object System.Windows.Forms.Label
$objLabel0.Location = New-Object System.Drawing.Size(10,10)
$objLabel0.Size = New-Object System.Drawing.Size(280,20)
$objLabel0.Text = "1. Limpiar fotografía actual"
$objForm.Controls.Add($objLabel0)

$objLabel1 = New-Object System.Windows.Forms.Label
$objLabel1.Location = New-Object System.Drawing.Size(10,30)
$objLabel1.Size = New-Object System.Drawing.Size(280,20)
$objLabel1.Text = "2. Cambiar fotografía"
$objForm.Controls.Add($objLabel1)

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(150,130)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancelar"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)

$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,70)
$objLabel.Size = New-Object System.Drawing.Size(280,20)
$objLabel.Text = "Seleccionar acción:"
$objForm.Controls.Add($objLabel)

$objTextBox = New-Object System.Windows.Forms.TextBox
$objTextBox.Location = New-Object System.Drawing.Size(10,90)
$objTextBox.Size = New-Object System.Drawing.Size(260,20)
$objForm.Controls.Add($objTextBox)

$objForm.Topmost = $True

$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()

#Devuelve el valor $X con 1 o 2 = 1: Limpiar fotografía / 2: Cambiar fotografía

$SAMName = tomausuario  #Pregunta el usuario

    $root = [ADSI]'GC://dc=dominio,dc=local'  #Inyecta el dominio con el que trabajar
    $searcher = new-object System.DirectoryServices.DirectorySearcher($root)
    $searcher.filter = "(&(objectClass=user)(sAMAccountName=$SAMName))"
    $user = $searcher.findall()
    $userdn = $user[0].path
    $userdn = $userdn.trim("GC")
    $userdn = "LDAP" + $userdn
     
      
IF ($x -EQ "1") {

    try
    {
        $user = [ADSI]($userdn)
        $user.Properties["thumbnailPhoto"].Clear()
        $user.CommitChanges()
        $valor = "La fotografía ha sido borrada del servidor"
        resultado $valor
    }
    catch
    {
        $valor = "La fotografía no ha podido ser borrada del servidor"
        resultado $valor
    }
       
}

IF ($x -EQ "2") {
  
    try
    {
        $photo = Select-FileDialog -Title "Selecciona una fotografía (ext.jpg o .png)" -Directory "%userprofile%" -Filter "JPG Images (*.jpg)|*.jpg|PNG Images (*.png)|*.png"
        [byte[]]$file = Get-Content $photo -Encoding Byte
        $user = [ADSI]($userdn)
       
        # Limpiar foto anterior
        $user.Properties["thumbnailPhoto"].Clear()

        # Guardar fotografía
        $user.Properties["thumbnailPhoto"].Add($file)
        $user.CommitChanges()
        $valor = "La fotografía ha sido guardada del servidor"
        resultado $valor
    }
    catch
    {
        $valor = "La fotografía no ha sido guardada en el servidor"
        resultado $valor
    }      
}

martes, 12 de marzo de 2013

Los 8 imprescindibles de Windows 8.

 

Hola.

Seguro que si tenéis múltiples conexiones con la blogosfera, ya conocéis los que os vengo a decir Sonrisa.

 

El amigo @samuelltr a través de @estipro, se ha currado una serie de 8 webcast sobre Windows 8, en la que participarán 8 IT pros que a pesar de la “juventud” del sistema operativo, cuenta con mucho conocimiento sobre el mismo.

Aquí tenéis toda la información y registro:

http://technet.microsoft.com/es-es/dn186239.aspx

Yo por mi parte, me encargaré del webcast sobre “recovery” que se realizará el 16 de Abril a las 18:00 gmt +1.

 

¡Saludos!.

jueves, 7 de marzo de 2013

Quitar aplicaciones de la interface Metro de una imagen / plantilla

 

Hola.

El comando para quitar aplicaciones que no queremos, en lo que va a ser nuestra imagen/plantilla corporativa, es el ya conocido dism.exe con las variables /image /remove-provisionedappxpackage y a continuación el parámetro correspondiente.

http://support.microsoft.com/kb/2769827

Saludos.

jueves, 15 de noviembre de 2012

Demo de Dynamic Access Control 2 de 2

Hola.

Cómo hoy no se qué pasa pero no me deja publicar una entrada en este blog, vía writer. Os indico que  como siempre, la he publicado también en mi blog de ITPRO.ES.

La URL es esta: http://blogs.itpro.es/mhernandez/2012/11/15/demo-de-dynamic-access-control-2-de-2/

Saludos.

miércoles, 14 de noviembre de 2012

Network policy server, 802.1x, y validación según certificado emitido de equipo o usuario.

 

Hola.

Basándonos en la configuración de NPS creada en las entradas enumeradas a continuación, vamos a realizar los cambios oportunos para validar desde un servidor NPS con certificado de servidor, equipos o usuarios que dispongan de un certificado emitido por una CA de confianza.

http://undercpd.blogspot.com.es/2012/02/integrar-wifi-con-directorio-activo.html

http://undercpd.blogspot.com.es/2012/02/integrar-wifi-con-directorio-activo_28.html

No hace falta decir que a este entrada, le complementa como requisito previo, perfectamente la existencia de una CA corporativo y Autoenrollmen de equipo o usuario.

http://technet.microsoft.com/en-us/library/cc730811.aspx

Los cambios que conseguirán esta clase de validación son:

Configurar la parte servidor para que la conectividad sea EAP (PEAP) y “por debajo” Smart card or other certificate (así le llama Microsoft), lo que realmente estamos provocando es tráfico TLS bajo EAP.

Para llegar a esa configuración solo tenéis que seguir los pasos que subrayo en la captura:

image

Indiferentemente a esto, también podéis añadir en la condiciones la pertenencia de este equipo o usuario a un grupo concreto del AD.

 

Parte cliente:

Pues lo mismo, pero en la configuración de la red inalámbrica.

Aquí veis como tenemos doble factor, por un lado debemos marcar cual es la CA que asegura el certificado de la comunicación EAP y luego, la CA que asegura el certificado individual del equipo o usuario.

image

Previamente a esto, en el equipo debemos contar con un certificado explícito del equipo o usuario, emitido por la CA. El certificado de usuario puede estar albergado en una Smart Card.

Además de esto, en la configuración de la red inalámbrica, es donde distingues si quieres enviar el certificado de equipo o usuario.

image_thumb6[1]

Network Policy Server, Wireless, 802.1x y validación de cuentas de equipo.

 

Hola.

Aunque este no es demasiado demandado, realmente es sorprendente una red wireless con validación de equipo o usuario dependiente de ciertos condicionantes establecidos en el servidor NPS de Windows Server.

Ya hace un tiempo, os mostré como montar la validación por usuario:

http://undercpd.blogspot.com.es/2012/02/integrar-wifi-con-directorio-activo.html

http://undercpd.blogspot.com.es/2012/02/integrar-wifi-con-directorio-activo_28.html

Hoy os enseño lo que tenéis que hacer para que la validación sea por equipo. Realmente son un par de cambios, pero es verdad que la red está llena de consultas de gente que no ha sabido establecer esa comprobación.

Los pasos serían:

Aseguraros que en la especificación de la red wifi en el equipo local o difundida por gpo, el modo de autentificación sea por equipo

image

 

En la parte del servidor, quitar la pertenencia a grupos de usuario y añadir como condicionante la pertenencia a un grupo del Directorio Activo.

image

Por supuesto, podemos añadir condicionantes como validación de salud, tener activdo el firewall, etc.

Saludos.

jueves, 8 de noviembre de 2012

Compartir carpeta avanzada con Server Manager (Demo Dynamic Access Control #1)

 

Hola.

Vale, aunque en esta entrada, ya utilizaremos nuevas opciones en la forma de publicar y control de carpetas compartidas, esta no es una entrada especialmente técnica ni compleja. Podríamos decir que esta es la entrada nº 1 de las demo sobre Dynamic Access Control que realicé en el webcast sobre almacenamiento.

Como dije, mi intención es ir publicando las diferentes demos.

 

Previo

El rol relacionado con estas funcionalidades es File And Storage Services.

 

Paso a paso

1. Iniciar el asistente de creación de share y elegir la modalidad SMB Share Advanced.

 

image

 

image

 

image

 

image

 

image

He aquí el kit de la cuestión, debéis marcar

image

 

image

 

image

 

Saludos.