CaFeConf 2007 6tas. Conferencias Abiertas de Software Libre y GNU/Linux Monitorización y Seguridad de la Red CASTELLI Hernando hcastelli@gmail.com
1. Introducción 2. Funcionamiento 3. Configuración 4. Notificaciones 5. Interface 6. Avanzadas 7. Seguridad 8. Preguntas 9. Links
Introducción
Qué es Nagios? Es una herramienta de monitorización bajo licencia GNU versión 2. Monitorea hosts, servicios, routers, recursos, factores ambientales, cualquier cosa que definamos. Posee un diseño simple que nos permite desarrollar facilmente plugins personalizados. Es flexible, nos permite definir entre otras cosas que es para nosotros una alerta o no. Informa en tiempo real ( email, SMS, jabber ) problemas de red, antes que los clientes, usuarios finales o jefes los noten. Posee una interfaz web sencilla que nos permite ver el status actual de la red, las notificaciones, hacer reportes, ver historicos, etc.
Qué podemos monitorear? Servicios como: SMTP, POP3, HTTP, DHCP, DNS, etc Recursos de hosts tales como: uso de memoria, carga del procesador, espacio en los discos, cantidad de procesos corriendo, etc Recursos de routers y switch de gama alta como: carga del procesador, troughtput de red, temperatura, etc Cualquier cosa que soporte el protocolo snmp, ssh o tenga instalado algún addon de Nagios
Qué problemas resuelve? Muchos hosts, muchos servicios, muchas cosas pueden salir mal y es critico tener una imagen del estado de salud de nuestra red. Nos permite manejar mejor nuestro tiempo para ser proactivos, en vez de reactivos. Podemos generar reportes de disponibilidad de servicios. Acota el punto de falla y permite localizar el problema rápidamente (un router caído afectando los servicios conectados a ese segmento de red). Escala las notificaciones para asegurarnos que las alertas sean recibidas jerarquicamente en función de su gravedad.
Funcionamiento
Los Plugins son los encargados de recolectar la información de los hosts y servicios, con esta información Nagios determina el estado de salud de nuestra red. Los Plugins son scripts Shell, Perl o ejecutables compilados, esto le da a Nagios una gran flexibilidad. El return code del Plugin es el que define el status del host o servicio consultado. Para más información, Nagios lee la primera línea de la salida del Plugin, de esta manera tenemos una mejor idea del status dado. OK WARNING CRITICAL UNKNOWN
Esquema de funcionamiento de Nagios N A G I O S External Command check_nrpe NRPE Daemon Plugin local check_by_ssh SSH Daemon Plugin local check_snmp SNMP MIB NSCA Daemon send_nsca Plugin local
NRPE (Nagios Remote Plugin Executor) Ejecuta plugins locales en los sistemas remotos. Nagios ejecuta el plugin check_nrpe para recibir los datos del daemon NRPE que está corriendo en el sistema. Soporta cifrado SSL/TLS. Soporta pasaje de parametros - Cuidado NSCA (Nagios Service Check Acceptor) Recibe los resultados de los chequeos pasivos de los sistemas remotos. El plugin send_nsca envia al proceso Nagios, a través de la interface de comandos externos, los datos. Soporta cifrado con varios algoritmos - Importante
Configuración
Hosts hosts.cfg: declaramos los objetos a monitorear. hostsgroups.cfg: se definen los grupos de objetos. define host { use host_name alias address check_command max_check_attempts check_period notification_interval notification_period notification_options contact_groups } generic-host linux1 Linux Server #1 192.168.2.1 check-host-alive 10 24x7 480 24x7 d,u,r linux-admins ; Name of host template to use define hostgroup{ hostgroup_name Prueba alias Servers de Prueba members localhost, linux1 }
Servicios services.cfg: declaramos los servicios de los sistemas a monitorear. servicegroups.cfg: se definen los grupos de sistemas. define service{ use host_name service_description is_volatile check_period max_check_attempts normal_check_interval retry_check_interval contact_groups notification_options notification_interval notification_period check_command } define servicegroup{ servicegroup_name alias members } generic-service ; Name of service template to use linux1 PING 0 24x7 4 5 1 admins w,u,c,r 960 24x7 check_ping!100.0,20%!500.0,60% servicio_proxy Servicio de Proxy linux1,squid,linux2,squid,linux3,squid
Comandos checkcommands.cfg: definimos como chequear hosts y servicios. define command{ command_name command_line } check-host-alive /usr/local/nagios/libexec/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 1 define command{ command_name check_pop command_line /usr/local/nagios/libexec/check_pop -H $HOSTADDRESS$ } misccommands.cfg: establecemos como enviar notificaciones y demas cosas. define command{ command_name host-notify-by-email command_line /usr/bin/printf "%b" Datos de Nagios /usr/bin/mail -s "Host $HOSTSTATE$ alert for $HOSTNAME$!" $CONTACTEMAIL$ } define command{ command_name process-host-perfdata command_line /usr/bin/printf "%b" Datos de Nagios >> /usr/local/nagios/var/host-perfdata.out }
Contactos contacts.cfg: declaramos los contactos que recibirán las notificaciones. contactsgroups.cfg: se definen los grupos de contactos. define contact{ contact_name alias service_notification_period host_notification_period service_notification_options host_notification_options service_notification_commands host_notification_commands email } define contactgroup{ contactgroup_name alias members } jperez Jorge Perez 24x7 24x7 w,u,c,r d,u,r notify-by-email host-notify-by-email jperez@localdomain novell-admins Novell Administrators jdoe,rtobert,tzach
Periodos de Tiempo timeperiods.cfg: Establecemos los periodos de tiempo. define timeperiod{ timeperiod_name alias sunday monday tuesday wednesday thursday friday saturday } 24x7 24 Hours A Day, 7 Days A Week 00:00-24:00 00:00-24:00 00:00-24:00 00:00-24:00 00:00-24:00 00:00-24:00 00:00-24:00 define timeperiod{ timeperiod_name alias sunday monday tuesday wednesday thursday friday saturday } nonworkhours Non-Work Hours 00:00-24:00 00:00-09:00,17:00-24:00 00:00-09:00,17:00-24:00 00:00-09:00,17:00-24:00 00:00-09:00,17:00-24:00 00:00-09:00,17:00-24:00 00:00-24:00
Plantillas Nos facilitan el trabajo cuando tenemos que definir muchos hosts. define host{ name check_command register notifications_enabled event_handler_enabled process_perf_data retain_status_information retain_nonstatus_information max_check_attempts notification_interval notification_period notification_options checks_enabled } define host{ use host_name alias primary parents address } generic-host smtp1 smtp server smtp-relay 192.168.1.2 generic-host check-host-alive 0; DON T REGISTER THIS DEFINITION 1 0 1 1 1 20 0 24x7 d,u,r 1 define host{ use host_name alias secondary parents address } generic-host smtp2 smtp server smtp-relay 192.168.1.4
Notificaciones
Qué podemos hacer? Definir que cada problema llegue a la persona indicada para resolverlo (contactgroups). Permitir que la persona indicada reconozca el problema. Establecer los periodos de aviso (notification_period) Ej: 24x7 Indicar los estados a notificar (notification_options) Ej: Warning Utilizar diferentes medios: email, sms, jabber, alarmas sonoras, etc.
Escalamiento Nos aseguramos que las alertas sean recibidas de diferentes maneras según el número de intentos. Evitamos las pérdidas en transito (mails que nunca llegan) y descuidos del administrador. define serviceescalation{ host_name service_description first_notification last_notification contact_groups notification_interval } linux1 * 1 3 administradores, host-notify-by-email 5 define serviceescalation{ host_name service_description first_notification last_notification contact_groups notification_interval } linux1 * 4 0 administradores, host-notify-by-call 15
Interface
Avanzadas
Outage 2 Host 2 Outage 1 Host 1
Outages Vemos el impacto que produce un host o servicio caido. Outage 1 Host 1 3 hosts caidos Outage 2 Host 2 7 hosts caidos Rápido acceso a la cantidad de host y servicios afectados. Ordenamiento de las interrupciones por nivel se severidad. La severidad se calcula por la cantidad de hosts y servicios afectados, teniendo los hosts un peso de 4 a 1 contra los servicios individuales.
Event Handlers Son comandos que se ejecutan cuando un host o servicio cambia de estado. Nos permite actuar proactivamente ante un problema. Útil para logear eventos en una base de datos externa. Hay dos tipos de event handlers: de hosts y de servicios. Se pueden configurar event handlers locales o globales. define service{ host_name service_description max_check_attempts event_handler } ServerWeb HTTP 4 restart-httpd define command{ command_name restart-httpd command_line /usr/local/nagios/libexec/eventhandlers/restart-httpd $SERVICESTATE$$SERVICESTATETYPE$ }
Seguridad
Nagios y Seguridad De nada nos sirve una herramienta de seguridad si nadie la monitorea. Podemos utilizar Nagios para auditar los hosts de nuestra red. La flexibilidad de Nagios nos permite integrarlo a diferentes herramientas. Posibilidad de correlacionar eventos de nuestra red.
Nmap - Búsqueda de puertos no registrados N A G I O S check_nmap Nmap Servidor Remoto Fácilmente vemos los puertos abiertos de nuestros equipos. No podemos confiar en chequeos locales. Alertas ante puertos abiertos no registrados.
Nmap - Búsqueda de hosts no registrados N A G I O S check_nrpe NRPE Daemon nmap Host no registrado Control sobre sectores de nuestra red.
rkhunter N A G I O S check_nrpe NRPE Daemon rkhunter Visualización de posibles intrusiones. Podemos correlacionar la información del rkhunter con lo reportado por el Nmap.
Preguntas
Links Sitio oficial de Nagios: http://www.nagios.org/ Documentación Oficial: http://www.nagios.org/docs/ Plugins y Addons: http://www.nagiosexchange.org/ Nmap: http://insecure.org/nmap/ RKHunter: www.rootkit.nl/projects/rootkit_hunter.html Esta obra está licenciada bajo una Licencia Attribution-NonCommercial-ShareAlike 2.5 de Creative Commons. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-ncsa/2.5/ar/ o envíenos una carta a Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.