miércoles, 30 de diciembre de 2015

Instalar vCenter Server Appliance 6 manualmente


En ocasiones me he encontrado con problemas para instalar el vCenter Server Appliance 6 usando el soporte de instalación que incorpora.

Si seguís el manual de instalación de vmware os indicará que la instalación es bastante simple y se completa con un asistente siguiendo unos sencillos pasos:
  1. Descagar todos los archivos de la pagina web de vmware .
  2. Instalar ESXi en un equipo host. 
  3. Instalar el VMWare Client Integration plugin que se encuentra la carpeta \vcsa del soporte de instalación.
  4. Abrir con un navegador el archivo vcsa-setup.html que se encuentra en la raíz.
  5. En la web hacer click en Instalar y seguir los pasos del asistente.


Los problemas los he encontrado en el paso 4, la web que abre el navegador intenta abrir el plugin pero no muestra ninguna opción:


miércoles, 11 de noviembre de 2015

Mostrar NICs ocultas después de virtualizar un equipo

Después de virtualizar un equipo al intentar configurar la misma IP que tenia anteriormente, Windows nos indica que la IP ya existe. Esto pasa porque al importar la VM, el sistema detecta nuevas NICs y las antiguas en vez de eliminarlas, las oculta.

Lo que hay que hacer es abrir el administrador de dipositivos, mostrar los dipositivos ocultos y eliminar las NICs antiguas para que no entren en conflicto con las nuevas.

Los pasos son los siguientes:

1. Entrar en la consola CMD (Inicio -> Ejecutar -> CMD)

2. Dentro de la consola CMD executar el siguiente comando:
> SET DEVMGR_SHOW_NONPRESENT_DEVICES=1

3. Después hay que entrar en la consola de administración de dispositivos en la misma sesión de CMD obierta con el comando:
> start devmgmt.msc

4. En la consola de "Administrador de dispositivos, hay que hacer click en la opción del menú: Ver -> Mostrar dispositivos ocultos.

5. En la sección de "Adaptadores de red" hay que eliminar las NICs antiguas, que generalmente son les que están en gris, pero id con cuidado.

viernes, 6 de noviembre de 2015

GTD con iOS y Microsoft Exchange (Parte 4) : Recordatorios con Siri



Una de las grandes ventajas (en teoría) de usar Recordatorios es la posibilidad de usar Siri. Estoy convencido que Siri tiene un gran potencial que no se aprovechar, así que me he propuesto tratar de explotarlo.



El principal problema que encontramos, y que ya comenté en el primer artículo de esta serie, es el idioma. Siri solo habla un número limitado de idiomas, así que si tenemos el dispositivo configurado con un idioma diferente del de Siri, nos va a tocar cambiarlo.


Aquí os dejo una serie de comandos con el formato que entiende Siri para realizar las procesos más simples de la creación de tareas.

Es importante evitar que las listas de diferentes cuentas tengan el mismo nombre. Así podremos decirle a Siri en que lista queremos dejar una tarea.

Comandos de Siri

Añadir una tarea a una hora
Formato:
Recordar <fecha> <hora> <tarea a recordar> 
Ejemplo:
Yo: Recordar el jueves a las 10 llamar a Microsoft.



Añadir una tarea a una lista
Formato:
Recordar <tarea a recordar> en lista <nombre de lista>
Ejemplo:
añadir cosas el comando de Siri seria:

Yo: Recordar quitar nodo del Lync del clúster en lista Urgente .






miércoles, 28 de octubre de 2015

Montar un servidor OTP con Radius

No hace mucho he montado un servidor de autenticación fuerte basado en el algoritmo de One Time Password que usan las librerías de Google Authenticator.

He recopilado la información y los pasos realizados en un tutorial y lo he dejado como sección fija en la página principal ya que me parece que es un servicio bastante interesante y que puede ser muy útil para casi cualquier entorno que requiera una auntenticación segura.

http://www.lasendadeladmin.com/p/lsda-token.html


También he aprovechado que me pidieron una App para Autenticación en iOS personalizada con el logo de la empresa, y con el codigo he hecho mi propia App con el logo del Blog y lo he colgado en iTunes.



Si alguien tiene interes en tener una App personalizada con su propio logo, que no dude en contactar.

jueves, 22 de octubre de 2015

GTD con iOS y Microsoft Exchange (Parte 3) : Recordatorios

Sigo con el proceso en el que pretendo conseguir usar los Recordatorios de iOS vinculados con una cuenta de MS Exchange como herramienta de soporte al usar la metodología de GTD.

El primer paso es configurar la cuenta Exchange en el iOS como si se tratara de una cuenta de correo normal. Cuando nos pida que servicios queremos sincronizar, tenemos que indicarle que queremos sincronizar los Recordatorios.



He comprobado que la mejor manera de tener sincronizados los recordatorios del dispositivo móvil con la cuenta de Exchange es activando la sincronización por Push. Con la sincronización manual no funciona bien y no se actualizan correctamente las tareas cuando las creas en un sitio o las marcas como realizadas en el otro.


La cuenta de iCloud también tiene la opción de sincronizar los recordatorios con otros dispositivos de Apple. Yo uso esta cuenta para almacenar la lista de los recordatorios personales.


miércoles, 7 de octubre de 2015

GTD con iOS y Microsoft Exchange (Parte 2) : Wunderlist

Como comente en el post anterior, mi objetivo final es usar para el GTD el Recordatorios de iOS con Siri y sincronizado con Exchange. Sigo trabajando en ello, adaptando el método que usaba con Wunderlist a este nuevo sistema.

Cuando empeze con esto del GTD, me encontre con un par de necesidades para poder gestionar las tareas sin volverme loco. Entre las diferentes opciones que encontre (Trello, RememberTheMilk,Tasks) Wunderlist era la que era la más sencilla de utilizar, compatible con todos los dipositivos y que incluía notificaciones.


  • Porque sencilla? porque cuando más completo és una herramienta, más complejo es de gestionar y más tiempo requiere. La idea es que puedas introducir lo más rapido posible en tu lista para poder registrarlas y olvidarte de ellas hasta que sea el momento de realizarlas. 
  • Porque compatible con todos los dispositivos? podria gestionarlo todo desde una único dispositivo y tal vez seria más sencillo, pero para Procesar y Organizar las tareas es más comodo hacerlo con un teclado y raton y en una grande que con una pantalla de telefono. Tambien es compatible con Android. 
  • Para que las notificaciones? Aunque se supone que tenemos planificadas las tareas que vamos a realizar durante el dia de hoy, siempre va bien tener añadir una alerta de alguna tarea, realizar una llamada, etc...

Como organizo las tareas con Wunderlist

Wunderlist tiene cuatro de listas automáticas y predeterminadas muy útiles y que he podido aprovechar:

  • Bandeja de entrada: Aquí es donde automáticamente entran todas las tareas que apunto, y se quedan a la espera de ser ordenadas. 
  • Destacados: Existe una etiqueta especial para destacar ciertas tareas. 
  • Hoy: Las tareas que tienen fecha límite para hoy ( o más antiguas y se están acumulando! Hay que hacer algo!!) 
  • Semana: Las próximas tareas a una semana vista. 


Después tengo una serie de listas y carpetas de listas para poder organizarme. Concretamente tengo:

  • Lista de la compra: Una lista de la compra compartida con mi pareja 
  • Trabajo 
    • Importante: La lista de las cosas a hacer. 
    • Urgente: Como dice Fito, no siempre lo Urgente es lo Importante, pero las Urgencias son las urgencias y si no se apagan los fuegos se te quema, el Arbol, el Bosque y todo el Active Directory. 
    • Algún dia: Cajon desastre de tareas que seguramente no llegaran a buen puerto y están a la espera que las borre definitivamente. 
    • Pendiente: Las tareas que quedan pendientes de que otra persona algo. 
  • Personal
    • Proyectos: Una lista de ideas que se me van ocurriendo y que hace falta desarrollar y desglosar.
    • Personal: Las tareas personals que tengo que hacer. Llevar el coche al tallar, colgar tal cuadro, Ir a recoger resultados, etc. Ese tipo de cosas. 
    • Debo o me deben: Una lista con las cosas que me han prestado o he prestado y que estaría devolver o recuperar algún día. 

Como proceso las tareas


  1. Cuando alguien interrumpe lo que sea que estoy haciendo y me pide que haga algo, si no és una urgencia o lo puedo realizar en menos de 2 minutos, lo escribo como una tarea por alguno de los múltiples métodos de entrada que ofrece Wunderlist: widgets, email, plugins, etc.
  2. Cada dos horas o cada vez que he completado dos tareas reviso la Bandeja de Entrada para procesar y organizar la tareas. La asigno a una lista según su prioridad y propongo una fecha en la que voy a realizarla.Una vez completo el dia, media hora antes de irme para casa, vuelvo a revisar la Bandeja de Entrada para que no me haya quedado ninguna tarea pendiente de revisar. 
  3. Después reviso las tareas que tengo programadas para el día siguiente, muchas de ellas según el criterio que según la propuesta que hice cuando la procesé por primera vez. Reviso las tareas para el día siguiente y compruebo que no haya ninguna que tenga prioridad y que sea necesario adelantar la fecha de acción.
  4. Una vez llego al trabajo por la mañana, solo tengo que revisar la lista de tareas para Hoy y pasar a la acción.  






miércoles, 30 de septiembre de 2015

GTD con iOS y Microsoft Exchange (Parte 1)

Antes de nada, si lee esto algún purista de GTD que no explote de indignación y ruego que me perdone, he interpretado el método a mi manera, a mi me funciona. Pero si alguien cree que hay cosas que puedo mejorar, le agradecere que me lo comente. 

Uno de los principales problemas que me encuentro a la hora de trabajar es la necesidad de controlar a que dedico el tiempo, algo que es bastante difícil entre los proyectos que están en marcha, los que me gustaría poner en marcha, los que me piden que colabore y las interrupciones habituales en un Administrador de Sistemas (altas de usuario express, bajas fulminantes, asignaciones de quota superimportantes, recuperaciones a vida o muerte...) .

Intente varias opciones para lograr mantener el control: decir que sí a todo, decir que no a todo, aislarme en una burbuja, responder solo a las peticiones de mi jefe, etc. Ninguna de ellas logro un buen resultado, si bien con algunas lograba acabar mi trabajo en tiempo record, en la mayoria de ocasiones el precio era el ostracismo y la marginación de los compañeros. En algún momento tal vez tenga que volver a valorar si esta era el precio o la recompensa.

Un buen dia procastinando entre blogs y artículos web alguien escribía sobre el método Getting Things Done de David Allen (GTD), un método para gestionar el tiempo basado en varios conceptos, como el de divide y vencerás y en la idea de concentrar la mente en una sola tarea a la vez. Para tener una idea general, el método de David Allen consiste en cinco principios:

  1. Recopilar todas las tareas en una lista, que podemos llamar Bandeja de Entrada. 
  2. Procesar, analizar y dividir todas las tareas en subtareas, hasta el punto en que estas tareas no se puedan dividir más. 
  3. Organizar las tareas según prioridades, cuales son Urgentes, cuales son Importantes, cuales pueden esperar, etc... Ademas de ordenar y clasificar las tareas según prioridades se pueden hacer otras divisiones: por proyectos, por clientes, por empleados, etc... Yo prefiero simplificar estas listas lo máximo para hacer el proceso mucho más sencillo. Menos és más
  4. Revisar las tareas que ya tenias procesadas y organizadas y ver cuales son las que puedes realizar Hoy.  
  5. y Hacer las tareas.  
Diagrama de flujo de tareas



miércoles, 23 de septiembre de 2015

Formulario Powershell para alta de usuarios (parte 1/3)


Estoy descubriendo la herramienta genial que es Powershell .

Como comente en el post anterior , estamos preparando una serie de scripts para automatizar la gestión de usuarios. Investigando un poco sobre como hacer estos scripts, descubrí que en PowerShell han implementado una librería para hacer un interfaz gráfico: Forms .

Después de revisar algunos tutoriales del technet, dedicí usar lo aprendido para hacer una aplicación de alta de usuarios con esta librería.

El objetivo de la aplicación es completar en un solo formulario el Alta de un usuario en Active Directory, Exchange, Lync y agregar los grupos necesarios para poder acceder a las aplicaciones corporativas de su departamento.

El script de la aplicación nos deberá permitir seleccionar lo siguiente:

  • Si queremos dar de alta la cuenta de Active Directory, de Exchange, de Lync y añadir los Grupos.
  • Escoger al entorno o país al que pertenecerá el usuario.
  • Escoger la base de datos donde se creara el buzón de Exchange
  • Escoger la plantilla que usaremos para añadir los grupos. 


Para ello necesitamos acceso a los diferentes powershell de estos servicios, que ya resolvimos en el post de Automatizar el inicio de sesiones remotas en PowerShell y unas plantillas de usuarios que dejaremos en una OU.


Formulario Powershell para alta de usuarios (parte 2/3)


Ahora empieza lo interesante. Vamos a buscar dentro de nuestro servidor de exchange (que tenemos hemos almacenado antes en la constante $mailboxserver )y escoger en que base de datos queremos crear el nuevo buzón. Para listar las bases de datos, usaremos el comando get-mailboxes y el listado obtenido lo presentaremos en una ListBox igual que la que hemos creado para seleccionar el entorno: 

# Add Mailbox Database ==================================
$objLabelMailDatabase = New-Object System.Windows.Forms.Label
$objLabelMailDatabase.Location = New-Object System.Drawing.Size(50,290)
$objLabelMailDatabase.Size = New-Object System.Drawing.Size(180,20)
$objLabelMailDatabase.Text = "Selecciona una base de datos:"
$objForm.Controls.Add($objLabelMailDatabase)
$objMailDatabaseListbox = New-Object System.Windows.Forms.Listbox
$objMailDatabaseListbox.Location = New-Object System.Drawing.Size(50,310)
$objMailDatabaseListbox.Size = New-Object System.Drawing.Size(150,400)
$objForm.Controls.Add($objMailDatabaseListbox)
$mailDatabases = Invoke-Expression "get-mailboxdatabase -server $mailboxserver | sort-object Name"
foreach ($mailDatabase in $mailDatabases)
{
      [void] $objMailDatabaseListbox.Items.Add($mailDatabase.Name)
}
Para seleccionar la plantilla necesitamos tener estas creadas en una OU del Active Directory, que hemos definido como constante al principio. Estas plantillas no son otra cosa que usuarios de AD con los grupos a los que deben pertenecer segun su entorno y departamento. Estas plantillas se pueden crear y modificar directamente sobre el Active Directory sin tener que hacer modificaciones en el script del formulario. 

El código seria el siguiente: 

# Add Groups from Template =================================
$objLabelUserTemplate = New-Object System.Windows.Forms.Label
$objLabelUserTemplate.Location = New-Object System.Drawing.Size(250,290)
$objLabelUserTemplate.Size = New-Object System.Drawing.Size(180,20)
$objLabelUserTemplate.Text = "Selecciona una plantilla:"
$objForm.Controls.Add($objLabelUserTemplate)
$objUserTemplateListbox = New-Object System.Windows.Forms.Listbox
$objUserTemplateListbox.Location = New-Object System.Drawing.Size(250,310)
$objUserTemplateListbox.Size = New-Object System.Drawing.Size(150,400)
$objForm.Controls.Add($objUserTemplateListbox)
$userTemplates = get-AdUser -Filter * -SearchBase $templateBase
foreach ($userTemplate in $userTemplates)
{
      [void] $objUserTemplateListbox.Items.Add($userTemplate.SamAccountName)
}

Lo que hace el código es leer los usuarios de la OU (en la constante $templateBase) y listarlo en un textbox.

El resultado es el siguiente: 


En este caso los objetos de Base de Datos de Exchange y Plantillas no muestran datos. Pero en un entorno consulando a servidores reales el resultado es este:


Los siguientes elementos que definiremos son los Check Box y los usaremos para definir que funciones queremos habilitar de el nuevo usuario que estamos creando.

# Add ActiveDirectory CheckBox
$objADCheckbox = new-object System.Windows.Forms.checkbox
$objADCheckbox.Location = new-object System.Drawing.Size(450,290)
$objADCheckbox.Size = new-object System.Drawing.Size(200,20)
$objADCheckbox.Text = "Crear Usuario AD"
$objADCheckbox.Checked = $false
$objForm.Controls.Add($objADCheckbox)  
 
# Add Exchange CheckBox
$objMailCheckbox = new-object System.Windows.Forms.checkbox
$objMailCheckbox.Location = new-object System.Drawing.Size(450,310)
$objMailCheckbox.Size = new-object System.Drawing.Size(200,20)
$objMailCheckbox.Text = "Habilitar Mailbox"
$objMailCheckbox.Checked = $false
$objForm.Controls.Add($objMailCheckbox)
 

# Add Group CheckBox
$objGroupCheckbox = new-object System.Windows.Forms.checkbox
$objGroupCheckbox.Location = new-object System.Drawing.Size(450,330)
$objGroupCheckbox.Size = new-object System.Drawing.Size(200,20)
$objGroupCheckbox.Text = "Habilitar "
$objGroupCheckbox.Checked = $false
$objForm.Controls.Add($objGroupCheckbox)  
# Add Lync CheckBox
$objLyncCheckbox = new-object System.Windows.Forms.checkbox
$objLyncCheckbox.Location = new-object System.Drawing.Size(450,350)
$objLyncCheckbox.Size = new-object System.Drawing.Size(200,20)
$objLyncCheckbox.Text = "Habilitar Lync"
$objLyncCheckbox.Checked = $false
$objForm.Controls.Add($objLyncCheckbox)  

Con este codigo solo añadimos los checkbox en el formulario. Estos checkbox los marcaremos para confirmar si queremos crear el usuario del AD, si queremos que habilitar el buzon de Exchange, añadir los grupos de la plantilla o habilitar las funciones de Lync.




Parte 3/3

Formulario Powershell para alta de usuarios (parte 3/3)


La última parte de este articulo/trilogia es la parte donde recogemos todos los datos que introducimos en los elementos y damos el alta del usuario en sí y mostramos un output amigable en un elemento tipo textbox.

El primer paso es crear el textbox:

# Add a text box to the form  ==================================
$objOutputBox = New-Object System.Windows.Forms.TextBox
$objOutputBox.Location = New-Object System.Drawing.Size(680,40)
$objOutputBox.Size = New-Object System.Drawing.Size(460,500)
$objOutputBox.Multiline = $True
$objOutputBox.Font = New-Object System.Drawing.Font("Courier New", "8.5")
$objOutputBox.Wordwrap = $True
$objOutputBox.ReadOnly = $True
$objOutputBox.ScrollBars = [System.Windows.Forms.ScrollBars]::Vertical
$objForm.Controls.Add($objOutputBox)



Usaremos el nuevo objeto para mostrar toda la información y los pasos que estamos dando en el proceso de creación del usuario.

El siguiente paso es añadir un boton de OK, para lanzar el procedimiento de crear el usuario.

# Add OK Button ========================================
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(500,720)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click(
{
# TODO: Substituir por procedimiento de alta de usuario
$objForm.Close()
})
$objForm.Controls.Add($OKButton)

I el aspecto final es este:


En la procedimiento al ejecutar el Click es donde devemos introducir nuestro script para el alta de usuario que deve recoger todos los datos del formulario y teniendo en cuenta los check que haya marcados, realizar unas tareas u otras. Como esta es la madre del cordero de todo este formulario, aquí os dejo un ejemplo de el script que usamos nosotros:

# TODO: Substituir por procedimiento de alta de usuario
$country = $objEnviromentsListbox.SelectedItem
$name = $objTextBoxName.Text
$surname = $objTextBoxSurname.Text
$username = $objTextBoxUsername.Text
$password = $objTextBoxPassword.Text
$alias = $objTextBoxAlias.Text
$database = $objMailDatabaseListbox.SelectedItem
$template = $objUserTemplateListbox.SelectedItem
$groups = Invoke-Expression "get-AdUser -Identity $template -Properties memberof | select-object -ExpandProperty memberof"
$enabledAD = $objADCheckbox.Checked
$enabledExchange = $objMailCheckbox.Checked
$enabledLync = $objLyncCheckbox.Checked
$enabledGroup = $objGroupCheckbox.Checked
$profpath = "\\fileserver\prof$country`$\profile\$username"
$homepath = "\\fileserver\prof$country`$\home\$username"
$objOutputBox.Text = " Los datos del nuevo usuario son:
Nuevo uusuario es $name $surname
Su usuario es $username y el password $password
Su Alias de email es $alias y su direccion de email $alias@dominio.com
La base de datos de correo es $database
Y usara los grupos de la plantilla $template" $objOutputBox.Text += "`r`n  "
$objOutputBox.Text += "`r`n Profile Path = $profpath"
$objOutputBox.Text += "`r`n Profile Path = $homepath"
if ($enabledAD) {
$upn = "$username" + "$intdomain"
$completename = "$name $surname"
$objOutputBox.Text +=  "`r`n  Creando AD User..."
new-aduser -Name $completename -GivenName $name -Surname $surname -UserPrincipalName $upn -Path $altaOU -SamAccountName $username -AccountPassword (ConvertTo-SecureString $password -AsPlainText -Force) -Enabled $true
$objOutputBox.Text +=  "`r`n  Esperar durante 5 segundos los cambios del AD"
Start-Sleep -s 5
if($enabledGroup)
{ $objOutputBox.Text +=  "`r`n  Habilitar perfil de TS ..."
$objOutputBox.Text += get-AdUser -Identity $template -Properties memberof | select-object -ExpandProperty memberof | Add-ADGroupMember -Members $username
$adUser = Get-ADUser $username | select -ExpandProperty disting*
$adUser = [ADSI]"LDAP://$ADUser"
$adUser.psbase.invokeset('TerminalServicesProfilePath',$profpath)
$adUser.psbase.invokeSet('TerminalServicesHomeDirectory',$homepath)
$adUser.psbase.invokeSet('TerminalServicesHomeDrive',"Y:")
$adUser.setinfo()
# Pause 10 for AD changes
$objOutputBox.Text += "`r`n  Esperar durante 10 segundos para la creación del perfil de TS"
Start-Sleep -s 10 } if($enabledExchange)
{
$objOutputBox.Text +=  "`r`n  Habilitando Mailbox..."
$objOutputBox.Text += enable-mailbox -Identity $upn -Database $database -Alias $alias
# Pause for 30 seconds for AD
$objOutputBox.Text +=  "`r`n  Esperar durante 30 segundos la creación del Mailbox"
Start-Sleep -s 30
if($enabledLync)
{
$objOutputBox.Text +=  "`r`n  Habilitando Lync ..."
$objOutputBox.Text += Get-mailbox -identity $completename | Enable-csuser -registrarpool $registrar -sipaddresstype EmailAddress
$objOutputBox.Text +=  "`r`n  Lync Habilitado"
}
} }
else
{
$objOutputBox.Text += "`r`n  NO SE HA MARCADO LA OPCION DE CREAR USUARIO DE AD"
}
Lo primero que hace el script es leer todos los elementos de entrada de datos del formulario y guardarlos dentro de variables. Despues mediante los CheckBox y con las expresiones de condicion IF..THEN.. ejecutamos los comandos para crear el usuario. En un caso completo hariamos de forma simplificada:

  1. Crear el usario en AD mediante New-ADUser
  2. Añadimos los grupos de la plantilla mediante el comando Get-ADUser $template | Add-ADGroupMember $username
  3. Creamos el perfil de Terminal Server con el InvokeSet
  4. Habilitamos el buzón de Exchange en la base de datos que hemos seleccionado Enable-Mailbox .
  5. Habilitamos el servicio de Lync usando la direccion de email como SIP Address Enable-CSUser .

El procedmiento es sencillo y el flujo de condiciones es bastante intuituvo, se puede modificar y adaptar a cualquier empresa.

Lo más importante y que hay que tener en cuenta, es que para ejecutar este formulario y poder dar de alta los usuario y todos sus servicios hay que tener sesiones abiertas con todas las consolas de gestión de estos servicio.



jueves, 23 de julio de 2015

Automatizar el inicio de sesiones remotas en PowerShell



Estamos preparando, junto con un compañero de trabajo, un script de powershell para dar de alta usuarios en Active Directory, Exchange y Lync, y de paso agregar los grupos de seguridad para Citrix y parámetros de perfiles de Terminal Server .

El primer paso es conseguir acceso a todas las consolas de PowerShell de los diferentes servicios. Para hacerlo solo hay que crear nuevas sesiones de PoweShell con el comando New-PSSession.

Aquí dejo un pequeño script para iniciar sesión en los diferentes servicios en una misma consola PowerShell . Solo tenéis que copiar el texto, guardarlo en un archivo .ps1 y modificar los parámetros iniciales.


lunes, 25 de mayo de 2015

Como instalar SQL 2014 en un clúster de Windows 2012 R2


Este es el tercer y último post de la serie de sobre como crear un Failover Cluster con Windows 2012 R2 e instalar una instancia de SQL 2014.

Requisitos:

- Tener un Failover Cluster de Windows 2012 R2 montado (Thanks Captain Obvious!)
- .NET Framework 3.5
- El Instalable del SQL 2012 R2
- Un disco compartido en el clúster sobre el que instalar la instancia.
- Una IP libre para la instancia SQL.
- Añadir un regitro DNS tipo A con la IP y el nombre de la instancia que queremos instalar.


Pasos:

1. En el wizard de instalación, escogemos la opción de preparar el clúster en las opciones avanzadas.



miércoles, 13 de mayo de 2015

Como añadir un disco de Quorum en un Failover Cluster


Este es la segunda parte de el post anterior donde indicavamos como configurar un Failover Clúster con Windows 2012 R2 .

Una vez hemos completado la instalación del servicio de clúster, procederemos a instalar el disco de Quorum. En palabras llanas, el quorum es el número de elementos que tienen que estar online para seguir ofreciendo el servicio del clúster, el disco de quorum sirve para verificar que nodos del servicio siguen activos cuando hay un fallo de red. Ambos nodos escriben información en el disco de quorum y esta información se mantiene sincronizada.

Requisitos: 


  • Parece tonto decirlo pero... tener un Failover Cluster
  • Tener una unidad de disco compartida en los dos servidores que usaremos para el Quorum. 

miércoles, 6 de mayo de 2015

Como instalar XenClient 5.5


Nos han pedido realizar una demostración del servicio de Citrix XenClient. Para realizar la demo instalaremos el servicio de Hyper-V en un Windows 2008 R2, XenClient 5.5 y el SQL express en el mismo equipo, no montaremos un servicio de clúster (es una demo, no un piloto).

Requisitos:

- Un equipo con Windows 2008 R2 o superior (XCSRV01)
- 6GB de RAM o más
- Una unidad de disco con más de 200GB libres (preferiblemente una unidad adicional)
- .NET Framework 4


miércoles, 29 de abril de 2015

Como crear un Failover Cluster con Windows 2012 R2

Este manual es el primero de tres partes. La primera parte son los pasos para crear un Failover Cluster con Windows Server 2012 R2, y la segunda parte incluiremos un disco de Quorum y en la tercera parte indicaremos los pasos para instalar el SQL 2014 en este clúster.

No voy a detallar los motivos, ventajas e inconvenientes de porque montar Windows Server Failover Clúster, no estoy aquí para juzgar solo para alimentar la locura de haberse convertido en un Admin. Para cualquier detalle sobre el funcionamiento de Failover Clúster, podéis consultarlo en la documentación oficial de Microsoft .  

Como crear un Failover Cluster con Windows 2012 R2

Requisitos: 
  • 2 Nodos: 2 servidores idénticos: con los mismos recursos, las mismas unidades de disco, conexiones de red, etc...
  • SO: Windows Server 2012 R2 Standard es la versión necesaria para montar el clúster
  • Tener el Windows Update al mismo nivel en ambos nodos.
  • 2 tarjetas de red conectadas a dos redes diferentes. 
    • Una interfície para dar servicio
    • la otra para comprobar el estado del clúster (la llamaré Heartbeat).
  • 2 Discos mapeados en las dos servidores. 
    • Un disco lo usaremos para una unidad de Quorum
    • El otro disco será el recurso que queremos mostraremos en el clúster.
  • 5 IPs 
    • 3 IPs en la red de servicio. 2 para los nodos y 1 para la instancia del clúster.
    • 2 IPs en la la red Hearbeat
  • Todo el proceso hay que realizarlo con servidores dentro del dominio y desde una cuenta con privilegios para crear objetos en el Active Directory. 
Configuración de la red: 

Para configurar la red he optado por llamar a las dos interfícies con los nombres:
LAN: para la red que esta conectada al dominio
Heartbeat: para una red privada entre los dos nodos que se usara solo para comprobar el estado.
Una cosa importante a tener en cuenta es la prioridad de las redes. La red de dominio siempre tiene que tener prioridad sobre la red de Heartbeat, ya que los servicios del clúster serán ofrecidos a los equipos del dominio.

Una vez tenemos las dos interficies configuradas, en la ventana de Network Connections apretando la tecla Alt del teclado desplegamos el menú. Clicamos en la opción Advanced > Advanced Settings... 


En la ventana de Advances Settings solo tenemos que mover la red del dominio (LAN) a lo alto de la lista.




Configuración de los discos:

Para poder pasar los test de validación previos a la creación del clúster es necesario que tengamos los discos que van a formarlo presentados y activos en ambos nodos. Para hacerlo solo tenemos que ir a la ventana de Computer Management y en la seccion de Disk Management poner los discos Online y después inicializarlos.




Pasos: 

1. El primer paso es instalar los Features necesarios para montar el clúster. En este caso necesitamos el Failover Clustering en los dos nodos.





2. Una vez instalado el Feature, abrimos la consola y con el botón derecho sobre el Manager clicamos sobre la opción de Validate Configuration... para comprobar que los servidores cumplen los requisitos para crear un clúster. 






3. Indicamos los nombres de los dos servidores/nodos que formaran el clúster.






4. Una vez completada la verificación con todos los checks OK, proseguimos a crear el clúster.


5. Indicamos en nombre que hemos escogido para el clúster y la IP que tenemos reservada.








Y ya tenemos la estructura del Failover Cluser. 



El siguiente paso es crear un disco de Quorum para garantizar la integridad del servicio. Pero eso lo incluiré en el próximo post.

Links:


martes, 24 de marzo de 2015

INCIDENCIA 24/3/2014: Virus Cryptolocker secuestra datos

Esta mañana me he encontrado con uno de esos días "divertidos" de los departamentos de IT.

Alguien ha decidido que era un buen día lanzar un ataque masivo del virus Cryptolocker, como mínimo no lo ha hecho en lunes o en fin de semana, es todo un detalle. Este virus responde a la categoría de ransomware, que básicamente lo que hace es impedir de alguna manera que trabajes o tengas acceso a tu equipo y te fuerza a pagar un rescate para recuperarlo.

El ciclo de vida del virus es el siguiente: 


El usuario recibe un email de un dominio @supportpiece.com con el asunto "carta certificada no entregado a usted" y que tiene que ir a recogerla o pagar una multa de unos 7€ .

08/04/2015 EDITADO: Durante el dia de hoy hemos detectado una nueva oleada del virus enviado desde los dominios @sda-poste.net y @sda-courier.com .

El email parece que se ha colado a traves de la mayoría de los servicios de antispam.


Como es lo mas normal del mundo, la gente hace click en alguno de los links y descarga el virus en cuestión. 

Parece que el ejecutable tambien se les ha colado a la mayoria de antivirus. 

Una vez infectado el equipo, un proceso que cifrará con RSA de 2048bits todos los archivos de Office que encuentre en el equipo y en las unidades de red. 

Allá donde haya pasado el virus cifrando archivos dejará un documento .txt y un .html indicando que te han secuestrado los archivos y que para poder recuperarlos tienes que pagar 299€  a través de un enlace a la red TOR, facilitando las instrucciones para instalar un navegador TOR donde podremos conectarnos y poder pagar el rescate. 


Que hacer como Admin? 

  • Detectar y bloquear los posibles orígenes de los emails.
  • Informar a todo el personal de la empresa que no abran este correo. 
  • Estar a punto para cuando las empresas de antivirus saquen la firma de este nuevo virus y actualizar todos los equipos lo antes posible. 


Y para los equipos ya infectados?

Según parece no queda otra que esperar a la actualización del antivirus para detectar y eliminar el Cryptolocker. 
Para los archivos no he visto ninguna herramienta segura que permita descifrarlos, y las que he visto no tienen buena pinta, así que parece que habrá que tirar de copias de seguridad. 

Como se podría haber evitado?

Por lo que parece, el email se ha colado a través de los antispam y el antivirus ha permitido ejecutarlo, así que las herramientas habituales de prevención no han hecho bien su trabajo. 
Se me ocurren soluciones pero ninguna user-friendly: A parte de sustituir el email por palomas mensajeras o dar manoplas a los usuarios, una buena configuración de las directivas que solo permitiere ejecutar los archivos autorizados podría haber evitado esto.



ANEXO 1:

Solo por curiosidad añado una captura de la web a la que te redirigen para pagar el rescate:


ANEXO 2: 

08/04/2015 EDITADO: Durante el dia de hoy hemos detectado una nueva oleada del virus enviado desde los dominios @sda-poste.net y @sda-courier.com .

27/04/2015 EDITADO: Voy a añadir un listado con los dominios que he detectado que se usan para entregar este ransomware:
@supportpiece.com
@sda-poste.net
@sda-courier.com
@ppt-takip.com
@ppt-takip.net 
@sda-courier.biz 
@sda-courier.nfo 
@sdacourier.net 
@sdacourier.org 
@ptt-esube.com 
@ptt-gonderi.net 
@ptt-gonderi.biz  

viernes, 20 de marzo de 2015

Como gestionar las máquinas virtuales de Java de forma centralizada

No creo que diga ninguna mentira si afirmo que uno de los mayores dolores de cabeza de los Admins son las aplicaciones y webs con módulos de Java. Las directivas de seguridad, la poca integración con las políticas de sistema, el constante cambio de versiones y de criterio convierte en una quimera conseguir que Java se comporte en toda la organización.

Un compañero me ha pasado para el blog el manual que ha creado el para poder gestionar la configuración de Java:

Lo primero que hay que hacer es tener instaladas las versiones de 32 o 64 bits de la Máquina Virtual de Java.

Una vez instaladas las dos versiones, hay que crear el directorio C:\WINDOWS\SUN\Java\Deployment .

Dentro de esta carpeta crear dos archivos Deployment.config y Deployment.properties con los siguientes parámetros:

Deployment.config
deployment.system.config=file\:C\:/Windows/Sun/Java/Deployment/deployment.properties
deployment.system.config.mandatory=true

Deployment.properties
deployment.javaws.shortcut=never
deployment.security.level=MEDIUM
deployment.security.mixcode=DISABLE
deployment.javaws.autodownload=never
deployment.expiration.check.enabled=false
deployment.expiration.check.enabled.locked
deployment.expiration.decision.suppression=true
deployment.expiration.decision.suppression.locked
deployment.expiration.decision=NEVER
deployment.expiration.decision.locked
deployment.user.security.exception.sites=c\:/Windows/Sun/Java/Deployment/exception.sites
deployment.system.security.trusted.certs=C\:\\Windows\\Sun\\Java\\Deployment\\trusted.certs

exception.sites
<URL QUE QUEREMOS AÑADIR COMO EXCEPCION>

trusted.certs
< Este archivo contiene los certificados de cada URL que queremos añadir para confiar. Este se genera en la carpeta c:\Users\<usuario> \AppData\LocalLow\Sun\Java\Deployment\security al entrar en la web y aceptar el Applet Java. Hay que copiarlo en cada equipo. >

Una vez creado la lista de excepciones que permiten que los applets de java se ejecuten, nos encontramos con los molestos mensajes de advertencia al intentar abrirlos. Yo he contado 5 mensajes de advertencia al abrir la consola de gestión de una VNX de EMC, un infierno...


Para evitar que aparezcan mensajes de advertencia como el anterior tenemos que configurar un conjunto de reglas en las que añadiremos todas las URLs que queremos permitir ejecutar sin preguntar al usuario.

Para poder configurar el ruleset tenemos que crear un archivo ruleset.xml y firmarlo con un certificado para poder distribuirlo en todos los equipos.

ruleset.xml
<ruleset version="1.0+">
<rule>
<id location="http://*.lasendadeladmin.com" />
<action permission="run" />
</rule>
<rule>
<id location="https://*.aeat.es" />
<action permission="run" />
</rule>
<rule>
<id />
<action permission="default">
<message>Este applet ha sido bloqueado por Java. Por favor contacte con su departamento de informatica para recibir ayuda.</message>
</action>
</rule>
</ruleset>

El siguiente paso es copiar este ruleset.xml donde tengamos el SDK (pe. C:\Program Files\Java\jdk1.7.0_71\bin) para poder firmar el archivo y empaquetarlo en un .JAR .

Crear Keystore


Antes de continuar, hay que crear un keystore si no lo teníamos creado de antes. Los pasos para crearlo son los siguientes.

> keytool -genkey -keyalg RSA -alias Areasselfsigned -keystore "C:\Program Files\Java\jre7\lib\security\corporatekeystore.jks" -storepass 123456 -validity 9000 -keysize 2048

Donde 123456 es el password para desbloquear el keystore (no confundir con el password del certificado).

Exportamos el certificado con el comando:
> keytool -export -alias Corporateselfsigned -file c:\Corporateselfsigned.crt -keystore "C:\Program Files\Java\jre7\lib\security\corporatekeystore.jks"
Y lo importamos como entidad certificadora (CA) :
> keytool -importcert -alias Corporateselfsigned -file c:\Corporateselfsigned.crt -trustcacerts -keystore "C:\Program Files\Java\jre7\lib\security\cacerts"
El password por defecto es changeit  


Y podemos distribuir el cacerts del equipo que estamos trabajando en los del resto de servidores y equipos, machacando el que pueda existir en el equipo de destino. Hay que copiarlo en la siguiente ruta:
C:\Program Files (x86)\Java\jre7\lib\security (es necesario copiarlo en la de 32bits)

Ahora que tenemos el certificado y ya lo tenemos distribuido en los equipos de destino podemos proceder a crear el paquete de distribución y firmarlo:

Creamos el jar:
> jar -cvf DeploymentRuleSet.jar ruleset.xml

Y lo firmamos con nuestro certificado:
> jarsigner -verbose -keystore "C:\Program Files\Java\jre7\lib\security\corporatekeystore.jks" -signedjar C:\DeploymentRuleSet.jar DeploymentRuleSet.jar Corporateselfsigned
En cada servidor y equipo de destino hay que copiar este DeploymentRuleSet.jar en la carpeta:

C:\Windows\Sun\Java\Deployment

Modificaciones en el ruleset.xml


Si más adelante es necesario modificar el ruleset.xml para añadir más url, hay que añadir las reglas al archivo y volver a crear, firmar y distribuir un nuevo DeploymentRuleSet.jar:
> jar -cvf DeploymentRuleSet.jar ruleset.xml
> arsigner -verbose -keystore "C:\Program Files\Java\jre7\lib\security\corporatekeystore.jks" -signedjar C:\DeploymentRuleSet.jar DeploymentRuleSet.jar Corporateselfsigned





miércoles, 11 de marzo de 2015

Como eliminar un servidor Exchange 2007 caído


Esta semana me he decidido ha hacer limpieza del AD y dejarlo todo listo para preparar la migración a Exchange 2013.

Tenia un servidor de Exchange 2007 que no retiramos de forma limpia y aun tenia información en el Active Directory. Para poder eliminar la información de Active Directory, se suelen dar dos métodos:

A) "El limpio" recuperar el servidor Exchange caído con setup.com /M:RecoverServer y posteriormente desinstalarlo.
B) "El sucio" podar el árbol del AD con el ADSI Edit

Como para ser brutos siempre se está a tiempo, empecé (y más o menos acabe) con la método limpio.

Como Recuperar un servidor Exchange 2007 caido para despúes eliminarlo


1. El primer paso és la recuperación en sí.

Los requisitos son:
  • Sistema Operativo Windows 2003 o 2008 (el R2 da problemas). 
  • Mantener la misma IP del servidor que queremos recuperar.
  • Usar el mismo nombre NETBIOS del servidor que queremos recuperar. 
  • Tambien es necesario instalar los Roles y Características que necesita el Exchange 2007. 
Para instalar abrimos un powershell y lanzamos el siguiente comando:
> Import-Module ServerManager
> Add-WindowsFeature RSAT-ADDS,Web-Server,Web-Metabase,Web-Lgcy-Mgmt-Console,Web-Dyn-Compression,Web-Windows-Auth,Web-Basic-Auth,Web-Digest-Auth,RPC-Over-HTTP-Proxy;

2. Cumplidos los prerequisitos, lanzamos el ejecutable de Exchange 2007 con el comando:
> Setup.com /M:RecoverServer
Esto instalará los roles que tenia asignados el servidor que falló, en mi caso el de Mailbox. Durante los checks tal vez indique que le falte alguna unidad (ese fue mi caso), solo tuve que montar un disco virtual y asignar las letra que indicada a cada volumen.



3. Una vez completado la recuperación, reiniciamos el servidor.

4. Si no quedan flecos sueltos, eliminar el rastro del Active Directory tiene que ser tan sencillo como desinstalar el Exchange 2007 desde el panel de control de Windows.

Como nunca nada es tan sencillo como lo pintan, yo me encontré con varios problemas desde al principio hasta el final y tuve que utilizar el ADSI Edit para solucionar alguno de ellos.

jueves, 26 de febrero de 2015

Como se licencia Citrix Sharefile

Debido a los problemas de Dropbox con el gran firewall chino hemos propuesto a un cliente una alternativa basada en Sharefile de Citrix.

Como siempre el tema del licenciamiento no acaba de estar claro, así que después de preguntar a diversos distribuidores y consultar en white papers tengo una esquema con la información útil de como se licencia Sharefile.

Lo primero que hay que tener claro es la diferencia entre licencias Citrix-Managed y Customer-Managed. Las primeras son licencias tipo SaaS que usan espacio y recursos en la nube de Citrix. Las segundas son OnPremise y requieren de recursos en el datacenter del cliente o proveedor de servicios.
  • Citrix-Managed Stores:
    - El almacenamiento esta en la nube de Citrix.
    - Licencias de renovación anual.
    - Mínimo de 5 licencias.
    - El espacio se comparte entre los usuarios del mismo contrato y se pueden gestionar mediante quotas.
    - Incluye la licencia de Customer-Managed.
    • Citrix ShareFile Enterprise Edition - 1GB
      - 1 usuario, 1GB por 1 año
    • Citrix ShareFile Enterprise Edition - 20GB
      - 1 usuario, 20GB por 1 año
    • Citrix ShareFile Enterprise Edition - 100GB Storage Pack AddOn
      - No incluye licencia para usuario.

  • Customer-Managed Stores:
    El almacenamiento es ilimitado ya que lo pone el cliente. Es necesario instalar el software StorageZone Controller en un servidor.
    • Citrix ShareFile Enterprise Edition - Customer Managed StorageZones Annual License
      - Licencia de uso para un usuario durante 1 año
    • Citrix ShareFile Enterprise Edition - Customer Managed StorageZones Perpetual License
      - Licencia de uso para un usuario de por vida.
      - Aunque la licencia es perpetua Citrix ofrece un contrato de mantenimiento anual.
Si veis alguna duda o error, no dudéis en comentar en el post

Links:
Citrix Sharefile

martes, 17 de febrero de 2015

Como se licencia Citrix XenMobile 10


Hoy Citrix ha presentado el nuevo método de licenciamiento de Citrix XenMobile al estrenar la versión 10 del software. Intentare resumir un poco los nuevos nombres de las licencias ya que a primera vista parece las mismas ediciones que la versión anterior pero con diferentes nombres.


Tipo de Licencia Servicios
XenMobile MDM Edition - MDM
- WorxEdit
XenMobile Advanced Edition - MDM
- MAM
- MDX Toolkit
- WorxHome,WorxMail,WorxWeb,WorxEdit
XenMobile Enterprise Edition - MDM
- MAM
- MDX Toolkit
- WorxHome, WorxMail, WorxWeb, WorxEdit, WorxNotes, WorxDesktop
- ShareFile Enterprise


Que es cada servicio:
  • MDM : El servicio de control de dispositivos móviles de Citrix con todas su funcionalidad. Ahora el MDM esta integrado con el antiguo XAC.
  • MAM : El servicio para la gestión de aplicaciones corporativas. 
  • MDX Toolkit : La herramienta para poder wrappear las aplicaciones de iOS y Android con la configuración y directivas de la empresa, permitiendo ejecutar dentro del contenedor seguro.
  • Suite Worx (WorxEdit, WorxMail, WorxNotex, ...) : Toda la suite de Worx ofrece un contenedor seguro (cifrado y no accesible por otras aplicaciones) para poder trabajar con el dispositivo móvil con total seguridad de que si alguna vez lo perdemos, esa información no estará disponible. 

Que tipo de licencias nos interesa, como siempre depende de lo que queramos hacer con ella:

  • XenMobile MDM Edition: Para poder gestionar dispositivos sin aplicar normas de privacidad muy estrictas. Permita gestionar todas las políticas del dispositivo, pero no incluye la capa de seguridad de datos y comunicaciones cifradas.
  • XenMobile Advanced Edition: Permite gestionar dispositivos móviles incluyendo una capa de seguridad en las aplicaciones y los datos que contienen. Tiene un contenedor seguro de los datos y permite el despliegue de apliaciones disponibles en nuestra granja XenApp.
  • XenMobile Enterprise Edition: Igual que la anterior pero incluye más Apps de la Suite de Worx y una licencia ShareFile Enterprise (que requiere de una infraestructura ShareFile StorageZone Connector en el datacenter del cliente).

También esta disponible la versión Cloud del servicio XenMobile 10.


jueves, 12 de febrero de 2015

Como distribuir Apps de iOS en un servidor web - OTA (Over The Air)


Esta semana me han pedido como podríamos distribuir una aplicación de iOS en un servidor web nuestro, firmada con una licencia Enterprise para distribución interna.

Que necesitamos:
- Una licencia de iOS Developer Enterprise, que cuesta unos 299€
https://developer.apple.com/programs/ios/enterprise/
- Un certificado para la distribución iOS Distribution.
- Un App ID para tu aplicación.
- Un Provisioning Profile para empaquetar tu aplicación.
- Un servidor web con certificado SSL firmado por una entidad de confianza.


Crear el .IPA
Todo el proceso de crear los certificados y firmar la aplicación están detallados en el siguiente link, si hace falta más información publicaré alguna otra entrada:
http://johannesluderschmidt.de/provision-ios-ipa-app-for-in-house-enterprise-distribution/2993/

Con todo el perfil de distribución instalado en un Xcode, el siguiente paso es archivar el proyecto iOS:

1. Asegurarnos que en los Build Settings de nuestro proyecto estamos usando nuestro certificado y el provisioning profile que hemos generado para la App.

2. En el menu de Xcode seleccionar Product -> Destination -> iOS Device


3. En el menú de Xcode seleccionar Product -> Archive

4. En el Organizar , en la pestaña de Archives seleccionar Export...



5. En el asistente de exportación indicar la opción "Save for Enterprise Deployment"


6. Seleccionar el Development Team que haya firmado el Provisioning Profile que hemos creado para esta App.

7. Y en la última ventana de Summary ya podemos hacer el Export del proyecto a un .IPA , indicando en que carpeta queremos guardar la App.




Distribuir la App
Una vez tenemos el .IPA el siguiente paso es publicarlo en nuestro servidor web. En versiones anteriores del Xcode, al hacer este paso generaba también el archivo .plist que incluía la información de la App para su instalación, pero a partir del Xcode 6 parece que hay que crear este archivo manualmente. Desconozco si han discontinuado esta función o es algo que Apple vaya a arreglar más adelante.

IMPORTANTE: Si estas intentando publicar la aplicación en un IIS, asegurate de incluir los tipos MIME de los archivos. En la consola de gestión de IIS, clicar con el botón derecho sobre el servidor ir a Propiedades, y dentro de propiedades clicar sobre Tipos MIME ... y añadir los dos tipos que vamos a agregar:

.IPA   - application/octet-stream 
.PLIST -  text/xml

El primer paso para publicar el .IPA es generar el archivo .plist de nuestra APP. Para el archivo necesitamos los siguientes datos:
- URL donde esta el .IPA ( siempre con https:// )
- Bundle ID del proyecto
- Versión que hemos indicado en el Xcode
- Título de la aplicación

Generamos un archivo miapp.plist ( el nombre del archivo tiene que ser el mismo que el nombre del .ipa) .
El código del .plist es el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>items</key>
        <array>
                <dict>
                        <key>assets</key>
                        <array>
                                <dict>
                                        <key>kind</key>
                                        <string>software-package</string>
                                        <key>url</key>
                                        <string>[URL del.IPA]</string>
                                </dict>
                        </array>
                        <key>metadata</key>
                        <dict>
                                <key>bundle-identifier</key>
                                <string>[Bundle ID de nuestra APP]</string>
                                <key>bundle-version</key>
                                <string>[versión de la App]</string>
                                <key>kind</key>
                                <string>software</string>
                                <key>title</key>
                                <string>[Título de la APP]</string>
                        </dict>
                </dict>
        </array>
</dict>
</plist>
Y en nuestra web tenemos que incluir un link a este archivo .plist con el siguiente formato:

<a href="itms-services://?action=download-manifest&url=[URL del .plist]">Instala mi fabulosa iOS APP</a>

Con el link publicado en nuestra web, podemos entrar desde cualquier dispositivo iOS a la web donde tenemos publicado el enlace, al hacer click sobre él nos mostrara una advertencia indicándonos si deseamos instalar la Aplicación. 
La aplicación se instalara, pero no avisará de que se haya completado el proceso, si vamos a la Home, veremos que ya tenemos el icono de la aplicación. Al tratar de iniciarlo por primera vez nos advertirá "Desarrollador no fiable" y si deseamos confiar en el equipo de desarrollo de nuestro certificado. 

Al clicar sobre confianza, ya no volverá a mostrar de nuevo esta advertencia.


Links:
https://longtrieuquang.wordpress.com/2014/08/01/how-to-distribute-your-ios-app-ota-with-enterprise-account/
http://stackoverflow.com/questions/8881609/ios-distribution-parameters-in-itms-services-protocol-link-for-plist
http://stackoverflow.com/questions/25910387/xcode-6-save-for-enterprise-deployment-does-not-create-plist-for-ipa-anymore