viernes, 5 de diciembre de 2008

Monitoreo de Red con Nagios2

Nagios2 es una aplicación open source que verifica el estado de los hosts y servicios especificados, y posee la capacidad de alertar (ya sea en forma gráfica, sonora, mediante mails al adminsitrador, sms, o incluso un sistema de desarrollo propio) cuando el comportamiento no sea el adecuado y cuando el mismo retorne a su estado normal.














Instalación

El método de instalación que se utilizó en este caso fué mediante el comando apt-get (disponible en las versiones de Linux derivadas de Debian), que nos brinda la versión 2.9-1 la cual hemos testeado, analizado, modificado y usado desde hace más de un año. Desde el sitio oficial, http://www.nagios.org, se encuentran disponibles los fuentes de la versión estable 3.0, a partir de mediados de marzo de este año, para c
ompilar1. Al igual que el resto de las aplicaciones, los archivos de configuración de nagios se encuentran disponibles en /etc/nagios2, donde como primera instancia se puede verificar la configuración del servidor web (Apache 2.x), dentro del archivo /etc/nagios2/apache2.conf. Para ejecutar el cliente se abre desde un explorador web la dirección http://localhost/nagios2 . Dicha url está protegida por el servidor web. Para crear el usuario con permisos se emplea el comando htpasswd de la siguiente manera:

root@pablo-laptop:/etc/nagios2# htpasswd -c /etc/nagios2/htpasswd.users nagiosadmin
New password: XXXXXXXX

Re-type new password: XXXXXXXX

Adding password for user nagiosadmin
root@pablo-laptop:/


Durante la instalación se crearon algunos directorios donde se ubican los principales componentes del nagios2:

  • /etc/nagios2: Archivos de configuración de la aplicación.
  • /var/log/nagios2: Logs de la aplicación.
  • /usr/sbin/nagios2: Binarios de la aplicación.
  • /etc/nagios-plugins/config: Archivos que definen los plugins de nagios2.
  • /usr/lib/nagios/plugins: Comandos que son utilizados por los plugins de nagios2.

Configuración
Los archivos de configuración del monitoreo en sí se enuentran en el directorio /etc/nagios2/conf.d/ y es allí donde se establecen los parámetros de qué hosts y servicios se verificarán, en qué período de tiempo, a quién dar aviso y de qué manera.

Los principales objetos que maneja nagios2 se enumeran a continuación:

host: Unidades físicas como servidores, routers y firewalls.
# Generic host definition template
define host{
name generic-host ; The name of this host

template - referenced in other host definitions, used for template recursion/res
olution
notifications_enabled 1 ; Host notifications are enabled
event_handler_enabled 1 ; Host event handler is enabled
flap_detection_enabled 1 ; Flap detection is enabled
process_perf_data 1 ; Process performance data
retain_status_information 1 ; Retain status information acro
ss program restarts
retain_nonstatus_information 1 ; Retain non-status information
across program restarts
register 0 ; DONT REGISTER THIS DEFINITION
- ITS NOT A REAL HOST, JUST A TEMPLATE!
}

define host{
use generic-host
host_name windows2003
alias NT 2003 Server

address 192.168.0.10
check_command check-host-alive
contact_groups nt-admins
max_check_attempts 10
notification_interval 480
notification_period 24x7
notification_options d,u,r
}

hostgroup: Colecciones de hosts que generalmente tienen alguna característica en común como por ejemplo la ubicación.
define hostgroup{
hostgroup_name winservers
alias Windows Servers
members windows2003,windows2000
}

service: Servicios que corren en los hosts que pueden incluir tanto servicios en sí como SMTP o HTTP, o metricas como espacio en disco o uso de memoria.
define service{
host_name paginac,paginag
service_description PING
is_volatile 0
check_period 24x7
max_check_attempts 4
normal_check_interval 5
retry_check_interval 1
contact_groups web-admins

notification_interval 240
notification_period 24x7
notification_options c,r
check_command check_ping!1050.0,30%!1550.0,60%
}

servicegroup: Al igual que los grupos de host, son colecciones de servicios que poseen alguna característica en común.
define servicegroup{
servicegroup_name pingservices
alias Ping Services

members paginac,Ping Service,paginag,Ping Service,switch,Ping Service
}


contact: Personas u objetos que pueden ser contactados durante un determinado evento.
define contact{
contact_name pablo
alias Nagios Super Admin
contactgroups nt-admins ;podemos agregar desde aquí los grupos
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email pablo@saru.com.ar
}

contactgroup: Colección de contactos que poseen determinada característica en común, como por ejemplo la consultora responsable del host o servic
io que se verifica.
# 'network-admins' contact group definition
define contactgroup{
contactgroup_name network-admins
alias Network Administrators
members pablo
}

timeperiod: Definición de una ventana de tiempo, por ejemplo el tiempo de trabajo en horas (7x24, 8horas, lun-vie, etc.).
define timeperiod{

timeperiod_name workhours
alias Standard Work Hours
monday 09:00-17:00
tuesday 09:00-17:00
wednesday 09:00-17:00
thursday 09:00-17:00
friday 09:00-17:00
}

command: Comando que puede ser usado durante el proceso de chequeo, como por ejemplo el comando ping utilizado para verificar es estatus de un host.
hostextinfo: Presenta información extendida que se mostrará en el cliente como decripción detallada de un host.
define hostextinfo{
hostgroup_name debian-servers
notes Debian GNU/Linux servers
notes_url http://webserver.localhost.localdomain/hostinfo.pl?host=netware1
icon_image base/debian.png

icon_image_alt Debian GNU/Linux
vrml_image debian.png
statusmap_image base/debian.gd2
}

serviceextinfo: Presenta información extendida que se mostrará en el cliente como decripción detallada de un servicio.


Durante la instalación por defecto se crean archivos de configuración genéricos que luego se pueden ir incrementando y detallando a medida que se recolecta información de la red, pero lo que realmente hace poderoso este sistema es la colección de pluggins que lo componen.


















Plugins

En este apartado se definen y ejemplifican los plugins más utilizados, pero para ello es necesario marcar la diferencia entre plugins
de nagios2 y comandos. Los plugins de nagios se definen en /etc/nagios-plugins/config y son archivos similares a los que se describieron en el apartado 2.2.4.2 de Configuración, donde mantienen una estructura determinada con un nombre que los define y una línea de comando que se ejecuta. El listado original es el siguiente, agrupados por la definición de comandos :

root@pablo-laptop:/etc/nagios-plugins/config# ls
apt.cfg disk.cfg dummy.cfg ftp.cfg http.cfg load.cfg mysql.cfg nt.cfg ping.cfg real.cfg ssh.cfg users.cfg

breeze.cfg disk-smb.cfg flex
lm.cfg games.cfg ifstatus.cfg mail.cfg netware.cfg ntp.cfg procs.cfg rpc-nfs.cfg tcp_udp.cfg vsz.cfg
dhcp.cfg dns.cfg fping.cfg hppjd.cfg ldap.cfg mrtg.cfg news.cfg pgsql.cfg radius.cfg snmp.cfg telnet.cfg
root@pablo-laptop:/etc/nagios-plugins/config#


Y como ejemplo se muestra un resúmen del archivo /etc/nagios-plugins/config/ping.cfg que contiene la descripción de los plugins que verifican disponibilidad mediante este comando.

root@pablo-laptop:# cat /etc/nagios
-plugins/config/ping.cfg
# 'check_ping' command definition
define command{

command_name check_ping
command_line /usr/lib/nagios/plugins/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
}

# 'check-host-alive' command definition
define command{
command_name check-host-alive
command_line /usr/lib/nagios/plugins/check_ping -H $HOSTADDRESS$ -w 5000,100% -c 5000,100% -p 1

}

# 'check-printer-alive' command definition
define command{
command_name check-printer-alive
command_line /usr/lib/nagios/plugins/check_ping -H $HOSTADDRESS$ -w 5000,100% -c 5000,100% -p 1
}

# 'check-switch-alive' command definition
define command{

command_name check-switch-alive
command_line /usr/lib/nagios/plugi
ns/check_ping $HOSTADDRESS$ -w 5000,100% -c 5000,100% -p 1
}

# 'check-router-alive' command definition
define command{
command_name check-router-alive
command_line /usr/lib/nagios/plugins/check_ping -H $HOSTADDRESS$ -w 5000,100% -c 5000,100% -p 1
}

root@pablo-laptop:#

Como se mencionó anteriormente, estos plugins utilizan los comandos que se encuentran en el directorio /usr/lib/nagios/plugins y se enumeran a continuación:

root@pablo-laptop:# ls /usr/lib/nagios/plugins
check_apt check_disk check_ftp check_imap check_mailq check_nntps check_ping check_simap check_tcp urlize
check_bgpstate check_disk_smb check_game check_ircd check_mrtg check_nt check_pop check_smtp check_time utils.pm

check_b
reeze check_dns check_hpjd check_jabber check_mrtgtraf check_ntp check_procs check_snmp check_udp utils.sh
check_by_ssh check_dummy check_http check_ldap check_mysql check_nwstat check_radius check_spop check_ups
check_clamd check_file_age check_icmp check_ldaps check_mysql_query check_oracle check_real check_ssh check_users
check_dhcp check_flexlm check_ifoperstatus check_load check_nagios check_overcr check_rpc check_ssmtp check_wave
check_dig check_fping check_ifstatus check_log check_nntp check_pgsql check_sensors check_swap negate
root@pablo-laptop:#


Los mismos pueden ser ejecutados directamente desde la línea de comandos para su prueba inicial y posterior implementacion en un nuevo plugin.

root@pablo-laptop:# /usr/lib/nagios/plugin/check_ping
check_ping: Could not parse arguments
Usage:check_ping -H -w ,% -c ,%
[-p packets] [-t timeout] [-4|-6]
root@pablo-laptop:#

Ejecución:
Para un ambiente de producción, es recomend
able tener instalado, configurado y en ejecución constante, el nagios desde un host dedicado que se encuentre ubicado cercano a la posición del administrador de red, así ante algún evento, este lo identifica al instante mediante la comunicación en pantalla y los avisos sonoros.
Es una buena práctica armar un mapa de red con la arquitectura propia donde se ubican los hosts en el mismo orden que se encuentran físicamente para una mejor interpretación del estado del mismo.


















Conclusión

Una de las principales necesidades para reaccionar en forma rápida y así contrarestar a tiempo posibles ataques es estar informado sobre la situación actual del sistema en su conjunto, es por eso que durante este capítulo se intentaron plantear diferentes herramientas que se encuentran disponibles para verificación de estados y monitoreo de hosts y servicios, de diferentes vistas y altamente configurables.

No hay comentarios: