Hoy una receta interesante para Nagios, que permitirá recibir alertas por consumo de ancho de banda en vuestros servidores, algo muy util para detectar rápidamente un uso fraudulento de vuestra red.
Detectamos tráfico anomalo (picos altos de salida o entrada) cuando algo “no está funcionando de forma normal”, lo mas habitual es encontrar estos picos por alguno de estos motivos:
– Un aumento significativo en el numero de conexiones a alguna web que alojamos (tráfico de salida)
– Estamos sufriendo un DDoS contra nuestro servidor (tráfico de entrada)
– Algun alojamiento ha sido hackeado y han conseguido colocar algun script maligno
Si se dá el tercer caso, el tráfico que generen con el script puede ser de cualquier tipo, todo depende de lo que se “permita” hacer en el servidor y lo bien bastionado que lo tengamos todo.
Detectar el aumento en el ancho de banda es relativamente sencillo si estamos permanentemente monitorizando el servidor, pero lo que queremos, es que nuestro sistema de monitorización sea capaz de avisarnos de ese aumento de tráfico extraño, sin tener los ojos puestos en las gráficas en todo momento.
Para este manual, nos encontramos con que ya disponemos de un monitor instalado basado en Nagios (ya hemos hablado de el en otras ocasiones) y NRPE instalado en el servidor que vamos a monitorizar, con esta base lo que nos permitirá monitorizar el ancho de banda será el plugin “check_tcptraffic” podemos instalarlo siguiendo estos pasos:
EN EL SERVIDOR A MONITORIZAR:
Descargar check_tcptraffic de aqui:
http://exchange.nagios.org/components/com_mtree/attachment.php?link_id=1483&cf_id=24
Y ejecutamos:
tar zxvf check_tcptraffic-2.2.4.tar.gz cd check_tcptraffic-2.2.4 perl Makefile.PL make make install
Una vez instalado es probable que a la hora de ejecutarlo tengamos algun problema con modulos de perl que nos faltan, por ejemplo, si ejecutamos nuestro plugin y obtenemos algun error similar a esto:
# /usr/lib/nagios/plugins/contrib/check_tcptraffic Can't locate Nagios/Plugin/Threshold.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/lib/nagios/plugins/contrib/check_tcptraffic line 36. BEGIN failed--compilation aborted at /usr/lib/nagios/plugins/contrib/check_tcptraffic line 36.
o esto otro:
# /usr/lib/nagios/plugins/contrib/check_tcptraffic Can't locate Readonly.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/lib/nagios/plugins/contrib/check_tcptraffic line 40. BEGIN failed--compilation aborted at /usr/lib/nagios/plugins/contrib/check_tcptraffic line 40.
La solución pasa por instalar los modulos que nos falten, mediante CPAN o el sistema de paquetes de nuestra distribución, si teneis CentOS, seria tan sencillo como hacer esto:
yum install perl-Nagios-Plugin perl-Readonly
Y si queremos hacerlo desde CPAN seria algo así:
perl -MCPAN -e 'shell' cpan> install Nagios::Plugin::Threshold cpan> install Readonly
Una vez solucionadas las dependencias, comprobamos que el comando no da errores:
# /usr/lib/nagios/plugins/contrib/check_tcptraffic Usage: check_tcptraffic [OPTIONS] Missing argument: critical Missing argument: warning Missing argument: interface Missing argument: speed
Enhorabuena! tenemos el plugin listo para funcionar, tan solo nos falta decidir el ancho de banda a partir del cual nos enviará un warning o un critical, en nuestro caso decidimos que 10mbits/s es un síntoma de alerta y que a partir de 14mbits/s será un critical, como al plugin le tenemos que pasar los valores en bytes/s tendríamos que ejecutar algo así:
# /usr/lib/nagios/plugins/contrib/check_tcptraffic -i eth0 -s 100 -w 1310720 -c 1835008 TCPTRAFFIC OK - eth0 288305 bytes/s | TOTAL=288305B;1310720;1835008 IN=282888B;; OUT=5417B;; TIME=1B;;
OJO! la primera vez que ejecutemos el script, nos indicará que no encuentra la BD y que la inicializa, en la siguiente ejecución tendremos ya datos reales.
Los parametros que tenemos que cambiar en esta llamada son:
-i -s -w -c
Con estos valores configurados, editamos el fichero de configuración de NRPE, normalmente: /etc/nagios/nrpe.cfg y agregamos la linea:
command[check_traffic]=/usr/lib/nagios/plugins/contrib/check_tcptraffic -i eth0 -s 100 -w 1310720 -c 1835008
Una vez agregada, reiniciamos nrpe.
EN EL SERVIDOR NAGIOS:
Agregamos el en el nagios el servicio que monitorizará el tráfico, si disponeis de un front end como centreon para el nagios esta tarea se simplifica al máximo, en caso contrario se tendria que crear un servicio similar a este:
define service{ use generic-service host_name host.domain.com service_description Ancho de banda is_volatile 0 check_period 24x7 max_check_attempts 4 normal_check_interval 5 retry_check_interval 1 contact_groups admins notification_options w,u,c,r notification_interval 10 notification_period 24x7 check_command check_nrpe!check_traffic }
Una vez introducido el servicio, lo asignamos al servidor que vamos a monitorizar y reiniciamos nagios.
Espero que os haya sido de utilidad!