Descargué el script check_wmi_eventid de:
http://exchange.nagios.org/directory/Plugins/Operating-Systems/Windows/WMI/Check-eventlog-2Feventid-by-WMI/detailsDamos permisos de ejecución al script:
# chmod a+x ./check_wmi_eventid
Lo ejecutamos sin parámetros para ver la ayuda:
# ./check_wmi_eventid
usage: ./check_wmi_eventid options
check_wmi_eventid is a script to check windows event log , for a certian eventid..
Simple example : check application log , for eventtype error(-t) and eventid 9003(-e) with in the last 60 mins(-m60),
set warning (-w) if greater than 1 ,and set error(-c) if greater than 3
check_wmi_eventid -H 172.10.10.10 -u domain/user -p password -l application -e 9003 -w 1 -c 3 -t1 -m60
Adv. example : same as above , but with arguments -O -W -C, these are custom plugin output for OK,Warning and Critical
Marco ITEMCOUNt,LASTSTR , can be used!!
check_wmi_eventid -H 172.10.10.10 -u domain/user -p password -l application -e 9003 -w 1 -c 3 -t1 -m60 -O "Every thing is OK"
-W "Warning : something is not right" -C "It is totaly bad , found ITEMCOUNT events"
Try it out :)
If you find any error , please let me know
OPTIONS:
-h Show this message
-H Host/Ip
-u Domain/user
-p password
-l Name of the log eg "System" or "Application" or any other Event log as shown in the Windows "Event Viewer".
-t Eventtype: # 1=error , 2=warning , 3=Information,4=Security Audit Success,5=Security Audit Failure
-e Eventid
-s Sting search for string in message
-m Number of past min to check for events.
-w Warning
-W Custom waring string - ITEMCOUNT,LASTSTR marco can be used ex. -W "ITEMCOUNT Wanings with in the LASTSTR"
-c Critical
-C Custom critical string - ITEMCOUNT,LASTSTR marco can be used ex. -W "ITEMCOUNT Critical with in the LASTSTR"
-O Custom ok sting - ITEMCOUNT,LASTSTR marco can be used ex. -W "Everything ok with in the LASTSTR"
-U CUstom unknown string - ITEMCOUNT,LASTSTR marco can be used ex. -W "ITEMCOUNT Unknowns with in the LASTSTR"
-d Debug
-v Version
Eligiendo los parámetros, ejecuté lo siguiente y me aparecía que no encontraba el cliente de WMI (wmic)
# ./check_wmi_eventid -H hostname -u administrator -p password -l application -e 9003 -w 1 -c 3 -t1 -m60
WMIC ERROR : ./check_wmi_eventid: line 252: /bin/wmic: No such file or directory
Descargamos WMIC del siguiente enlace:
http://sourceforge.net/projects/pandora/files/Tools%20and%20dependencies%20%28All%20versions%29/RPM%20CentOS%2C%20RHEL/wmic-4.0.0SVN-2.1.el5.centos.noarch.rpm/download
Lo instalamos con rpm:
# rpm -hiv wmic-4.0.0SVN-2.1.el5.centos.noarch.rpm
warning: wmic-4.0.0SVN-2.1.el5.centos.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 155987ef
Preparing... ########################################### [100%]
1:wmic ########################################### [100%]
Lo ejecutamos si parámetros para ver los parametros requeridos:
# wmic
Usage: [-?] [-?] [-?] [-?NP] [-?NPV] [-?|--help] [--usage] [-d|--debuglevel DEBUGLEVEL]
[--debug-stderr] [-s|--configfile CONFIGFILE] [--option=name=value]
[-l|--log-basename LOGFILEBASE] [--leak-report] [--leak-report-full]
[-R|--name-resolve NAME-RESOLVE-ORDER]
[-O|--socket-options SOCKETOPTIONS] [-n|--netbiosname NETBIOSNAME]
[-S|--signing on|off|required] [-W|--workgroup WORKGROUP]
[--realm=REALM] [-i|--scope SCOPE] [-m|--maxprotocol MAXPROTOCOL]
[-U|--user [DOMAIN/]USERNAME[%PASSWORD]] [-N|--no-pass]
[--password=STRING] [-A|--authentication-file FILE] [-P|--machine-pass]
[--simple-bind-dn=STRING] [-k|--kerberos STRING] [-V|--version]
[--namespace=STRING]
//host query
Example: wmic -U [domain/]adminuser%password //host "select * from Win32_ComputerSystem"
Una vez instalado al querer ejecutar nuevamente el comando, nos tiraba error que no lo encontraba:
# ./check_wmi_eventid -H hostname -u administrator -p password -l application -e 9003 -w 1 -c 3 -t1 -m60
WMIC ERROR : ./check_wmi_eventid: line 252: /bin/wmic: No such file or directory
Viendo donde fue instalado, vemos que no encontraba la ruta:
# which wmic
/usr/bin/wmic
Editamos el script que descargamos (check_wmi_eventid):
# vim check_wmi_eventid
Cambiar:
WMIC=/bin/wmic
Por:
WMIC=/usr/bin/wmic
Ahora ejecutando el comando nuevamente, todo me devolvía el mismo valor, siempre era = 12:
# ./check_wmi_eventid -H server_name-u administrator -p password -l application -e 9003 -w 20 -c 30 -t1 -m60
OK 12 with Severity Level Error in application with in the last 1 hour|eventid9003=12;20;30;;
# ./check_wmi_eventid -H server_name-u administrator -p password -l security -e 4625 -w 20 -c 30 -t1 -m60
OK 12 with Severity Level Error in application with in the last 1 hour|eventid9003=12;20;30;;
Entonces decidí hacer mi propio script con WMIC, con el siguiente comando (cambiando las variables en rojo por los valores correspondientes):
# wmic -U USUARIO%PASWORD //HOSTNAME "select EventCode,EventIdentifier,EventType,TimeGenerated from Win32_NTLogEvent"
Obtenía algo como lo siguiente:
CLASS: Win32_NTLogEvent
EventCode|EventIdentifier|EventType|Logfile|RecordNumber|TimeGenerated
.....
.....
902|1073742726|0|Application|4506|20100615130231.000000-000
5615|3221231087|0|Application|4507|20100615130239.000000-000
5617|3221231089|0|Application|4508|20100615130243.000000-000
34|1073872930|3|Application|4509|20100615130247.000000-000
4|1073872900|3|Application|4510|20100615130250.000000-000
5|1073872901|3|Application|4511|20100615130251.000000-000
5|1073872901|3|Application|4512|20100615130251.000000-000
5|1073872901|3|Application|4513|20100615130251.000000-000
5|1073872901|3|Application|4514|20100615130251.000000-000
5|1073872901|3|Application|4515|20100615130251.000000-000
5|1073872901|3|Application|4516|20100615130251.000000-000
5|1073872901|3|Application|4517|20100615130251.000000-000
5|1073872901|3|Application|4518|20100615130251.000000-000
5|1073872901|3|Application|4519|20100615130251.000000-000
5|1073872901|3|Application|4520|20100615130251.000000-000
5|1073872901|3|Application|4521|20100615130251.000000-000
34|1073872930|3|Application|4522|20100615130251.000000-000
34|1073872930|3|Application|4523|20100615130251.000000-000
.....
Modificando un poco la query que hacía al server por WMI llegué a obtener todos los Eventos del visor de sucesos de un windows que tuvieran id=4625 (loguin erroneo) del registro de seguridad:
# wmic -U USUARIO%PASSWORD //HOSTNAME "select EventCode,EventIdentifier,EventType,TimeGenerated from Win32_NTLogEvent where EventCode='4625' AND Logfile='security'"
Pero yo en nagios quería monitorear los loguins erroneos del día actual, entonces quedó así:
#HOY=`date +%d/%m/%Y`
# wmic -U USUARIO%USUARIO //HOSTNAME "select EventCode,EventIdentifier,EventType,TimeGenerated from Win32_NTLogEvent where EventCode='4625' AND Logfile='security' AND TimeGenerated>='$HOY'"
Inicialmente la consulta comenzaba pero se cortaba, así que borré el visor de sucesos de seguridad de windows e hice un par de logueos erroneos para que aparezcan y aparecieron correctamente:
CLASS: Win32_NTLogEvent
EventCode|EventIdentifier|EventType|Logfile|RecordNumber|TimeGenerated
4625|4625|5|Security|2774019|20140103151300.184621-000
4625|4625|5|Security|2774020|20140103151325.320732-000
4625|4625|5|Security|2774027|20140103151335.353332-000
4625|4625|5|Security|2774047|20140103153339.520120-000
4625|4625|5|Security|2774048|20140103153339.535719-000
Una vez obtenido el comando correcto armamos el script para testear los visores de sucesos de windows con nagios:
# vi check_wmi_eventWindows.sh
#!/bin/bash
#
# Script creado el 03-01-2013 por Hernán Tirado
# Descripción: Chequea por WMI el visor de sucesos de windows del día actual
# Verifica si hay mas de 10 loguins erroneos en el visor de sucesos => Critical
# Verifica si hay mas de 5 loguins erroneos en el visor de sucesos => Warning
#
# NOTA:
# Tener en cuenta que si el visor de suscesos es muy largo la query tarda y se corta
#
# Setear las variables de entorno antes de ejecutarlo.
################## INICIO DE CONFIGURACION DE VARIABLES
# Ruta de ubicación del comando wmic:
WMIC=/usr/bin/wmic
# Fecha de HOY:
HOY=`date +%d/%m/%Y`
# Usuario administrador del windows:
USER=
# Contraseña del usuario administrador de windows:
PASSWORD=
# Nombre de host ó ip del windows:
HOST=jdeenterprise
# Tipo de Visor de Suceso (Application, Security, Setup, System):
EVENT_TYPE='security'
# Tipo de Evento (Ej: 4625 testea loguins erroneos):
ID_EVENTO=4625
################## FIN DE CONFIGURACION DE VARIABLES
# Ejecución del comando WMIC:
CANT_ERRONEA=`$WMIC -U $USER%$PASSWORD //$HOST "select EventCode,EventIdentifier,EventType,TimeGenerated from Win32_NTLogEvent where EventCode='$ID_EVENTO' AND Logfile='$EVENT_TYPE' AND TimeGenerated>='$HOY'" | grep -v CLASS | grep -v Event | wc -l`
# Testeamos los valores que devuelve, si:
# CANT_ERRONEA <= 5 => OK (exit 0)
# CANT_ERRONEA > 5 => WARNING (exit 1)
# CANT_ERRONEA > 10 => CRITICAL (exit 2)
if [ $CANT_ERRONEA -lt 5 ]; then
{
echo OK - Cantidad de Logins Erroneos = $CANT_ERRONEA;
exit 0;
}
fi
if [ $CANT_ERRONEA -gt 10 ]; then
{
echo CRITICAL - Cantidad de Logins Erroneos = $CANT_ERRONEA;
exit 1;
}
fi
if [ $CANT_ERRONEA -gt 4 ]; then
{
echo WARNING - Cantidad de Logins Erroneos = $CANT_ERRONEA;
exit 1;
}
fi
En el commands de nagios agregamos lo siguiente:
# vi /etc/nagios/commands.cfg
define command{
command_name check_wmi_eventWindows.sh
command_line $USER1$/check_wmi_eventWindows.sh
}
En el services de nagios agregamos lo siguiente:
# vi /etc/nagios/services.cfg:
define service{
use generic-service,srv-pnp
host_name nombre_de_host
service_description Check_Bad_Logins
check_command check_wmi_eventWindows.sh
}
Chequeamos la config de nagios y si no da errores, reiniciamos el servicio:
# bin/nagios -v /etc/nagios.cfg
...
Total Warnings: 0
Total Errors: 0
...
# /etc/init.d/nagios reload
Running configuration check...done.
Reloading nagios configuration...done
NOTA: Tener en cuenta que en Windows debe estar habilitada la auditoría de logins erroneos. En esta entrada del blog les dejo como habilitarlo: http://www.redes-seguridad.com.ar/2014/01/logins-erroneos-en-windows-event-viewer.html
1 comentario:
Buenas tardes amigo, estoy ocupando el script de visor de eventos y al momento de ejecutar el comando me trae la data sin mayor problema, ahora cuando egregue el script a nagios y lo probe me trae de vuelta "No output returned from plugin". porque sucede esto ? que debo configurar para poder ver la salida del archivo ?. De antemano muchas gracias.
Publicar un comentario