Contents

Monitorizar la autenticación LDAP con PowerShell

Una vez tenemos en nuestra infraestructura una herramienta de monitorización como Nagios con la que comprobamos aspectos básicos de la misma como el uso de recursos o el estado de servicios, es el momento de plantearnos monitorizar otros aspectos que nos den una visión más real del estado de nuestro entorno. En la entrada de hoy vamos a ver cómo podemos monitorizar la autenticación LDAP con PowerShell para estar siempre seguros de que la validación en nuestros controladores de dominio está funcionando de forma correcta.

/wp-content/uploads/2018/09/Logo_ActiveDirectory.png
Monitorizar la autenticación LDAP con PowerShell

Compobar con PowerShell que un dominio autentica de forma correcta

La mejor forma para comprobar de forma inequívoca si algo funciona es probando su uso. Dado que nuestro objetivo es comprobar que la validación en un dominio está funcionando correctamente lo que vamos a hacer será realizar una query en el dominio en la que necesitemos validarnos con usuario y contraseña. Si dicha query devuelve el valor que estamos esperando podremos determinar que la autenticación está funcionando de forma correcta.

Para realizar la query una de las formas más sencillas y portables es valernos de una clase de .Net como System.DirectoryServices.DirectoryEntry. Con ella instanciaremos un objeto con el que haremos una query al root del dominio utilizando unas credenciales creadas para la ocasión:

1
2
3
4
5
PS C:\> New-Object System.DirectoryServices.DirectoryEntry('LDAP://192.168.168.168/DC=sobrebits,DC=local','test_dc','Password123.')


distinguishedName : {DC=beservices,DC=local}
Path              : LDAP://192.168.168.168/DC=sobrebits,DC=local

Vamos a repasar paso a paso la línea:

  • New-Object System.DirectoryServices.DirectoryEntry: Con New-Object instanciamos un objeto de la clase System.DirectoryServices.DirectoryEntry que, como hemos apuntado anteriormente, nos servirá para hacer nuestra query.
  • LDAP://192.168.168.168/DC=sobrebits,DC=local: El path del dominio al que vamos a hacer la query.
  • test_dc: El usuario con el que autenticaremos en el dominio.
  • Password123.: El password con el que autenticaremos en el dominio.

Si la ejecución del parámetro nos devuelve el objeto que vemos en las líneas anteriores con el distinguishedName y el Path implica que la autenticación se ha realizado correctamente y se ha podido ejecutar la query, si lo que se nos retorna es un error evidentemente tenemos algún problema de autenticación.

Aplicando un poco de lógica a la query

Por último vamos a crear un mini script como el que vimos en la creación de checks de Nagios. Utilizaremos la propiedad Name del objeto que nos devuelve la query para comprobar que realmente se llama como el dominio al que estamos atacando. De no ser así devolveremos un estado “Critical”.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# Declaramos las variables del dominio
$name = 'sobrebits'
$path = 'LDAP://192.168.168.168/DC=sobrebits,DC=local'
$user = 'test_dc'
$password = 'Password123.'

# Realizamos la query al servidor de dominio
$query = New-Object System.DirectoryServices.DirectoryEntry($path,$user,$password)

# Si el valor devuelto es el mismo que el de nuestra propiedad $name devolvemos un OK (0). De no serlo devolvemos un Critical (2).
if ($query.Name -eq $name) {
    Write-Host 'OK! La autenticación funciona.'
    Exit 0
}
else {
    Write-Host 'CRITICAL! Error de autenticación.'
    Exit 2
}

Con esto hecho ya somos capaces de monitorizar la autenticación LDAP con PowerShell en nuestros servidores de dominio y tener la certeza en todo momento de que no tenemos problemas en esta parte de la infraestructura. Replicar esto mismo a cualquier sistema de monitorización no debería ser un problema ya que solo deberíamos cambiar la salida del script.