martes, 23 de febrero de 2016

MONITORIZACION. NAGIOS y WMI. Añadir todos los hosts de mi red.


La finalidad de este post es como añadir todos nuestros servidores windows a nuestro nuevo sistema Nagios evitando pasar uno por uno, através de consultas WMI. 

¿Porque WMI? porque es más seguro que poner un cliente y viene instalado por defecto en todos nuestros servidores Windows.

Importante!!! Recomiendo que antes de aplicar los cambios que a continuación voy a detallar aconsejo leer todo el artículo mínimo una vez. El gestionar GPOs puede tener consecuencias graves el en AD.

Nagios nos ofrece el procedimiento manual de como hacerlo uno por uno: https://assets.nagios.com/downloads/nagiosxi/docs/Monitoring-Windows-Using-WMI-and-Nagios-XI.pdf

Para esta explicación crearé un usuario, ya que no le veo muchos más uso que el alcance de permitir que el Nagios consulte nuestros servidores, si viese más utilidades crearía un grupo en el que a medida me salga la necesidad iría añadiendo usuarios. Llamaremos a nuestro nuevo usuario "nagiosuser"

Previamente nos tenemos que asegurar que el servicio siguiente esté arrancado:





[ ] Crearemos un usuario o grupo de seguridad para permitir consultas wmi y lo asociamos “Member of” a los grupos  “Perfomance Log Users”, “Performance Monitor User” y “Distributed DCOM”.



Estar parte también la podemos hacer por GPOs o manualmente a los grupos comentados.



 [ ] Creamos una GPO con los siguientes autorizaciones

·  Act as part of the opering system
·  Log on as a batch job
·  Log on as a service
·  Replace a process level token




[ ] Ahora toca la parte que no se puede hacer con las opciones que nos den las GPOs, con lo que nos vemos obligados a hacer un script
  • Abrimos la consola con el comando “compmgmt.msc”.

  • Le damos al boton derecho en "WMI Control" y  nos vamos a la pestaña "Security".


  • Añadimos nuestro usuario


  • Le concedemos los permisos de : Execute Methods, Enable Acount, Remote Enable y Read Security 


                            Aplicamos permisos en  “This namespace and subnamespaces”



[ ] Usaremos la consulta wmic, "The WMI command-line (WMIC) utility provides a command-line interface for WMI. WMIC is compatible with existing shells and utility commands" :


wmic /namespace:\\root\CIMV2  /output:MyInfo_sd.txt path __systemsecurity call getSD


Su contenido será parecido al siguiente:


Ahora abrimos el fichero generado “MyInfo_sd.txt



Tenemos que quitar todos los espacios entre cada número, lo podemos hacer con un buscar y sustituir:
 Nos quedará toda la lista de números solo separados por ","





Ahora tenemos que crear un script con lo que crearemos un fichero con el nombre Myscript.vbs con el siguiente código:



strSD = array(!!! Poner los número aqui!!!)
set namespace = createobject("wbemscripting.swbemlocator").connectserver(,"root\ \CIMV2")
set security = namespace.get("__systemsecurity=@")

nStatus = security.setsd(strSD)



En algunos caso hay que hacer

strSD = array(!!! Poner los número aqui!!!)
set namespace = createobject("wbemscripting.swbemlocator").connectserver(,"root\CIMV2")
set security = namespace.get("__systemsecurity=@")


nStatus = security.setsd(strSD)



Dentro de “array()” deberemos poner la cadena de números sin espacios en blanco ni salto de línea, con el resultado:




[ ] Ahora para probarlo hay que ejecutarlo con un usuario administrador y verificamos el resultado.

Ejecutar en el interprete de comandos como administrador de la siguiente manera

cscript fichero.vbs

[ ] Faltaría la parte de permisos WMI, que si lo hacemos en un servidor RECIEN instalado bastaría con poner 

   [A] Buscamos la cadena de SID de nuestro usuario “nagiosusr”
 Comando: wmic useraccount where name='nagiosusr' get sid

Resultado: S-1-5-21-3406756-4123087055-1055211938-1    -> Referencia del usuario 

 IMPORTANTE: Esta cadena variara para cada persona!!!

   [B] La documentación que encuentro en Internet pone que añadamos el comando siguiente sustituyendo <SID> por el número SID que hemos obtenido en el paso 1, se añade “LO” para poder ver todos los servicios.
sc sdset SCMANAGER D:(A;;CCLCRPRCLO;;;S-1-5-21-3406756-4123087055-1055211938-1)(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

Este punto esta ampliamente documentado en otros post de este blog http://gonsystem.blogspot.com.es/2016/03/nagios-permisos-en-hosts-para-verificar.html

[ ] Ahora tenemos dos opciones o ponemos este script al arranque o cierre de los servidores o lo ejecutamos manualmente.

Si tenemos prisa esta claro que mejor ejecutarlo manualmente, a veces se tarda mucho en ver reiniciado todos nuestro parque de servidores.

Para ejecutarlo manualmente podemos usar la utilidad PsExec


Tenemos que dejar nuestro script en un lugar donde puedan acceder todos nuestros hosts o si es por GPO que lo puedan leer las políticas, en este ejemplo lo dejaré en MiDominio\SYSVOL\MiDominio.local\script\MiScript.vbs

Cuando el PsExec da como resultado "error code 0" es que ha ido bien.

Si lo que queremos hacer es forzar a un grupo de host, podemos tener un txt con una lista y ejecutar el .bat siguiente:


@ECHO OFF
FOR /F %%A IN (c:\gon\WindowsServerlist.txt) DO (
@ECHO %%A
psexec \\%%A.dominio.local -u dominio\useradmin –p contraseña c:\windows\system32\cscript //B \\dominio.local\SYSVOL\dominio.LOCAL\scripts\WMI_NAGIOS.vbs
psexec \\%%A.dominio.local -u dominio\useradmin - p contraseña gpupdate /force
)


Puede salir un problema, las G`POs no se pueden aplicar a los hosts que están en la DMZ ya que los hosts de dmz no pueden acceder al dominio, con lo que hay que poner otro origen de nuestro vbs.

El resultado podría ser:


Se podría añadir:

También es sencillo que la GPO abra reglas de FW

Antes de ponerlo en producción probar con algunos servidores, se han dado caso que se han parado algún servicio o los conectores COM de Windows.


MUY IMPORTANTE: Haz pruebas antes de poner en producción este procedimiento, si puedes ser ten copias de seguridad,  snapshots, reinicia las veces que haga falta, mira servicios, comprueba los eventos, etc ... 

Si no tienes muy claro lo que vas hacer NO lo hagas, la responsabilidad de los servidores es tuya. Antes de hacer algo tan delicado contrasta con otras webs o consúltalo con un experto.

Es importante vuestra opinión, no hay mucha documentación de este tema, así que si lo probáis sería bueno que lo comentéis.

Artículo relacionado: http://gonsystem.blogspot.com.es/2016/03/nagios-permisos-en-hosts-para-verificar.html

REF:

https://www.solucions-im.com/blogs/tecnic/usuario-no-administrador-en-dominio-para-wmi/
http://blogs.msdn.com/b/spatdsg/archive/2007/11/21/set-wmi-namespace-security-via-gpo-script.aspx


Gon. Marzo2016 v2