Configurando Nagios 3.x (y III)

65 comentarios »
Leído 28.551 veces

icono de herramientasContinuamos donde lo dejamos. Una de las cosas que tenemos pendiente es hacer que nagios nos notifique las alertas que detecta, porque si tenemos que estar pendientes de las pantallas de estado en todo momento la cosa, después de las primeras horas, no tiene tanta gracia ¿verdad? Para ello lo único que tenemos que hacer es editar el fichero /usr/local/nagios/etc/objects/contacts.cfg y modificar la dirección de correo del contacto que trae por defecto por la nuestra:

define contact{
     contact_name nagiosadmin ; Short name of user
     use generic-contact ; Inherit default values from generic-contact template (defined above)
     alias Nagios Admin ; Full name of user
     email alertas.nagios@midominio.es ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
     }

Si lo del aviso por correo electrónico se nos queda corto existen al menos un par de soluciones comerciales que permiten que nagios nos alerte a través de SMS. Referencias aquí.

Ahora vamos a añadir algunos plugins que requieran de alguna configuración adicional para que veais que también es muy sencillo. Empezamos por uno que nos compruebe el estado de un servidor de mysql. El plugin necesario (check_mysql) viene con nagios aunque no está configurado para su uso. Lo primero que tenemos que hacer es abrir un shell, irnos al directorio de plugins y ver que entrada necesita:

nagios:/usr/lib/nagios/plugins# ./check_mysql -h
check_mysql (nagios-plugins 1.4.8) 1.35
Copyright (c) 1999-2006 Nagios Plugin Development Team

This program tests connections to a mysql server

Usage:check_mysql [-d database] [-H host] [-P port] [-u user] [-p password] [-S]

Parece evidente ¿no? Creamos un usuario con privilegios mínimos en nuestro servidor de mysql (el mismo que aloja la intranet en este ejemplo) y probamos:

nagios:/usr/lib/nagios/plugins# ./check_mysql -H 192.168.0.3 -u nagios-test -p nagios-test-pass
Uptime: 17940713 Threads: 1 Questions: 796357 Slow queries: 0 Opens: 33 Flush tables: 1 Open tables: 27 Queries per second avg: 0.044

Funciona. Con esta información hacemos una plantilla para este servicio en el archivo commands.cfg:

define command{
     command_name mycheck_mysql
     # check_mysql [-d database] [-H host] [-P port] [-u user] [-p password] [-S]
     command_line /usr/lib/nagios/plugins/check_mysql -H $HOSTADDRESS$ -u nagios-test -p nagios-test-pass
     }

Y, finalmente, en el archivo mired.cfg definimos el servicio listando los hosts que queremos que se comprueben con el:

define service{
     use generic-service
     host_name intranet
     service_description MYSQL
     check_command mycheck_mysql
     }

Ha sido fácil ¿verdad? Un par más y acabamos. Ahora necesitamos comprobar la carga de CPU y ocupación de memoria de nuestros controladores de dominio de windows. Nagios trae plugins para hacerlo pero requieren instalar un servicio específico en los servidores a monitorizar y a mi, existiendo SNMP, esto no me parece necesario. Así que nos damos una vuelta por el directorio de plugins de Nagios Exchange hasta encontrar algo que nos venga bien. Allí encontramos dos plugins escritos en perl que pueden servirnos: check_winmen y check_win_snmp_cpuload. Los descargamos, descomprimimos, emplazamos en el directorio de plugins de nagios y repetimos el mismo procedimiento de antes. Primero comprobar la entrada que necesitan desde la línea de comandos:

nagios:/usr/lib/nagios/plugins# perl check_win_snmp_cpuload.pl

######## check_win_snmp_process.pl ########
# Version : 1.0
# Date : Dec 20 2005
# Author : Benjamin Jakubowski
# Help : http://www.xenux.net
# Licence : GPL - http://www.fsf.org/licenses/gpl.txt
####################################
check_win_snmp_cpuload.pl IP COMMUNITY PORT warning critical

nagios:/usr/lib/nagios/plugins# perl check_winmen.pl

######## check_winmem ########
# Version : 1.0
# Date : Apr 11 2006
# Author : Peter Stimpel
# Thanks to Benjamin Jakubowski for the idea to walk through snmp
# Help : http://www.peters-webcorner.de/nagios/
# Licence : GPL - http://www.fsf.org/licenses/gpl.txt
####################################
check_winmem IP COMMUNITY warnlevel criticallevel

check_winmem -v for version info

Al igual que en otras ocasiones, vemos que este tipo de plugins requiere que le definamos los niveles que vamos a considerar como warning o crítico. Aunque aquí no aparece especificado en la documentación que acompaña a los plugins nos dice que han de expresarse en porcentajes. Por cierto: no voy a pararme a explicaros como definir y configurar el servicio de SNMP en un servidor windows pero es evidente que hay que hacerlo, además de autorizar en el mismo a nuestro servidor nagios para que pueda recoger estos datos.

Seguimos. Al igual que hicimos antes probamos primero sobre línea de comandos:

nagios:/usr/lib/nagios/plugins# perl check_winmen.pl 192.168.0.4 mi_comunidad_snmp 75 95
OK MEM: usage 20.59 perc - 209064 KBytes of 1015248 KBytes -w 75 -c 95

nagios:/usr/lib/nagios/plugins# perl check_win_snmp_cpuload.pl 192.168.0.4 mi_comunidad_snmp 161 75 90
OK : CPU load HOST-RESOURCES-MIB::hrProcessorLoad.2 = INTEGER: 0 %

Luego con estos datos creamos las plantillas en commands.cfg (observad que, al igual que en línea de comandos, necesitamos ejecutarlos a través del intérprete de perl):

define command{
     command_name check_winmen
     # perl check_winmen.pl IP COMMUNITY warnlevel criticallevel
     command_line /usr/bin/perl /usr/lib/nagios/plugins/check_winmen.pl $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$
     
}

define command{
     command_name check_cpuload
     # perl check_snmp_cpuload.pl IP COMMUNITY PORT warnlevel criticallevel
     command_line /usr/bin/perl /usr/lib/nagios/plugins/check_win_snmp_cpuload.pl $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$ $ARG4$
     }

Y, finalmente, la definición de los servicios en mired.cfg:

define service{
     use generic-service
     host_name windows#1, windows#2
     service_description Ocupacion de memoria
     check_command check_winmen!ietcc!75!95
     normal_check_interval 5
     retry_check_interval 1
     
}

define service{
     use generic-service
     host_name windows#1, windows#2
     service_description CPU Load
     check_command check_cpuload!ietcc!161!75!90
     normal_check_interval 5
     retry_check_interval 1
     }

Monitorizando la salida a internet con nagiosPara acabar un último truco que suelo usar en las instalaciones. Para comprobar que la salida a internet es correcta suelo elegir un par de servidores públicos y añadirlos en mi configuración colgando de nuestro router de salida a internet. De esta forma ya no sólo comprobamos que nuestro router está encendido y responde a los pings sino que está operativo y nuestro proveedor de servicios no está fallando. Nos quedaría por comprobar que nuestros DNS resuelven correctamente (aquí la comprobación la estamos haciendo por IP) pero eso os lo dejo a vosotros como ejercicio ¿vale? El plugin que necesitais para ello se llama check_dns y acompaña a la distribución estándar de nagios. No tiene pérdida. Ah, lo de usar los servidores de microsoft y terra no es porque me fie especialmente de ellos sino porque siempre prefiero hacerle un ping a intervalos regulares a alguien que no me caiga bien ;-)

Y bueno... Con esto concluyo el tema que me tengo que ir de vacaciones. Mi intención era demostrar que configurar un sistema con Nagios y dejarlo operativo y funcional es bien sencillo. Pero la cosa no acaba aquí. Nagios permite mucho más de lo que hemos visto. La librería de plugins disponibles es enorme y si aun así ninguno cumple lo que necesitamos para una necesidad muy específica podemos seguir esta guía de desarrollo para hacernos uno a medida en C, perl, python, shell script o practicamente lo que nos de la gana. Para entornos muy críticos, aparte de los notificadores por SMS que hemos apuntado antes existen dispositivos hardware que nos permiten controlar la temperatura, humedad relativa, iluminación, estabilidad de la tensión, presencia de líquidos, intrusiones, vibraciones, etc.

Y si estás haciendo una propuesta técnica en tu departamente y tienes dudas de que tus superiores te autoricen a usar una solución open source échale un vistazo al directorio de empresas y organismos que usan nagios y elige las que crees que van a impresionarle más. Seguro que las encuentras...

Compártelo:
    emailPDFPrintIdenti.caTwitterFacebookdel.icio.usDiigoFriendFeedBitacoras.comNetvibesMeneameBarraPuntoWikioLinkedInGoogle BuzzGoogle BookmarksLiveMisterWongTechnorati

Configurando Nagios 3.x (y II)

61 comentarios »
Leído 35.851 veces

icono de herramientas La semana pasada dejamos nuestro nagios funcionando pero un tanto soso. El mapa de estado (tal vez la pantalla más vistosa de la herramienta) queda bastante pobre sin logos identificativos para cada máquina y tan sólo comprobábamos que las máquinas respondieran a un ping sin monitorizar servicio alguno.

Nagios a medio configurar...

Hoy vamos a empezar por ponerlo bonito. Lo primero que necesitamos son logotipos. En el apartado correspondiente de Nagios Exchange tenemos varias colecciones para elegir. Yo uso habitualmente dos de ellas: Base Images para los ordenadores y Cook Images para la electrónica de red. Los descargamos, los descomprimimos y los copiamos en el directorio /usr/local/nagios/share/images/logos. Cada icono suele venir en cuatro formatos diferentes: gif, jpg, png y gd2.

Ahora tenemos que indicar en las definiciones de nuestros hosts los iconos que queremos usar para representarlos. Como ya os he dicho en otras ocasiones soy un poco torpe para los formatos así que suelo hacer caso a las recomendaciones que leí en algún momento (no recuerdo donde) y escojo el .gif como icono general y el .gd2 para el mapa de estado. No voy a poneros de nuevo la definición de todos los hosts con las líneas que hay que incluir para ello. La sintaxis es tan simple que, creo, basta con uno como ejemplo (lo añadido en negrita):

define host{
     use linux-server
     host_name nagios
     alias Nagios Server
     icon_image debian.gif
     statusmap_image debian.gd2

     address 127.0.0.1
     }

Los iconos elegidos para el resto de los hosts han sido network_switch.gif, router.gif, linux40.gif, win40.gif y sus respectivos .gd2 para el mapa de estado. Reiniciamos el servicio y ahora ya se ve mejor ¿verdad?

Nagios con iconos bonitos

Añadamos ahora algunos sevicios adicionales. Para ello vamos a volver a echarle un vistazo al fichero /usr/local/nagios/etc/objects/commands.cfg. En el apartado SAMPLE SERVICE CHECK COMMANDS tenemos los que vienen preconfigurados y listos para usar pero ojo con algunos de ellos: los que comienzan con check_local sólo sirven para monitorizar servicios en la propia máquina en la que está instalado nagios. Advertido esto, vamos a añadir los siguientes servicios:

  • Número de usuarios, número de procesos y carga de cpu para la máquina que alberga a nagios.
  • Servicios SSH y HTTP en ambas máquinas con Linux.
  • Servicios SMTP y POP3 en la máquina que alberga la intranet y que, para este ejemplo, también hace las veces de servidor de correo.
  • Servicio DHCP en el servidor secundario de dominio de windows.

Para ello añadimos lo siguiente al final de nuestro fichero mired.cfg y volvemos a reiniciar el servicio que ejecuta nagios:

define service{
     use generic-service
     host_name nagios
     service_description Current Users
     check_command check_local_users!20!50
     }

define service{
     use generic-service
     host_name nagios
     service_description Total Processes
     check_command check_local_procs!250!400!RSZDT
     }

define service{
     use generic-service
     host_name nagios
     service_description Current Load
     check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
     }

define service{
     use generic-service
     host_name nagios, intranet
     service_description SSH
     check_command check_ssh
     }

define service{
     use generic-service
     host_name nagios, intranet
     service_description HTTP
     check_command check_http
     }

define service{
     use generic-service
     host_name intranet
     service_description SMTP Response Check
     check_command check_smtp!-t 5 -e “midominio.es”
     }

define service{
     use generic-service
     host_name intranet
     service_description POP3 Response Check
     check_command check_pop!-t 5 -e “midominio.es”
     }

define service{
     use generic-service
     host_name windows#2
     service_description DHCP
     check_command check_dhcp
     }

La única personalización que requiere para adecuarlo a vuestra red es cambiar “midominio.es” en los servicios SMTP y POP3 por los que maneje vuestro servidor de correo.

Ahora la vista del grid de servicios de nuestra red queda bastante mejor (notad que he bajado a propósito el servicio POP3 de la máquina correspondiente para que no todo parezca tan idílico):

Nagios grid de servicios

¿Sigue diciendo alguien por ahí que la configuración de nagios es complicada?

Y aquí lo dejamos por hoy. En la próxima entrega veremos como añadir nuevos servicios a los que vienen por defecto en el fichero commands.cfg

Continúa en:

Compártelo:
    emailPDFPrintIdenti.caTwitterFacebookdel.icio.usDiigoFriendFeedBitacoras.comNetvibesMeneameBarraPuntoWikioLinkedInGoogle BuzzGoogle BookmarksLiveMisterWongTechnorati

Configurando Nagios 3.x (y I)

39 comentarios »
Leído 35.378 veces

icono de herramientas Bien, ¿continuamos donde lo dejamos? Tenemos nuestro nagios recien instalado y ahora toca configurarlo, plasmar la topología de nuestra red y monitorizar algunos servicios básicos.

El primer archivo que tenemos que tocar es /usr/local/nagios/etc/nagios.cfg. En el, entre otras cosas, se dicen los archivos de configuración que nagios tendrá en cuenta. En el apartado correspondiente a los objetos, que es lo único que vamos a tocar, localizamos la entrada correspondiente al fichero activo como ejemplo (linux.cfg). Comentamos la línea correspondiente a este fichero e introducimos una nueva con el archivo cfg que usaremos y que se llamará, por ejemplo, mired.cfg. Editamos el archivo nagios.cfg e introducimos los siguientes cambios (en negritas):

# Definitions for monitoring the local (Linux) host
# cfg_file=/usr/local/nagios/etc/objects/linux.cfg

# Definición de nuestra pequeña red local de ejemplo
cfg_file=/usr/local/nagios/etc/objects/mired.cfg

La red que vamos a definir como ejemplo constará de dos servidores windows, dos linux (uno de ellos el propio que alberga a Nagios), un router que nos da salida a Internet y un switch al que están conectados todos ellos. Vamos a crear el archivo mired.cfg en el directorio especificado y en el incluiremos la definición de estos objetos:

define host{
      use linux-server
      host_name nagios
      alias Nagios Server
      address 127.0.0.1
      }

define host{
      use generic-switch
      host_name switch#1
      alias Switch
      address 192.168.0.2
      parents nagios
      }

define host{
      use generic-switch
      host_name router#1
      alias Router ADSL
      address 192.168.0.1
      parents switch#1
      }

define host{
      use linux-server
      host_name intranet
      alias Servidor Linux
      address 192.168.0.3
      parents switch#1
      }

define host{
      use windows-server
      host_name windows#1
      alias Servidor principal del dominio
      address 192.168.0.4
      parents switch#1
      }

define host{
      use windows-server
      host_name windows#2
      alias Servidor secundario del dominio
      address 192.168.0.5
      parents switch#1
      }

Como podeis ver las definiciones son bien sencillas. Esta simpleza deriva de que Nagios usa una estructura jerárquica en la que cada objeto hereda las características definidas previamente en las plantillas que está usando. La declaración de estas plantillas se hace en el archivo templates.cfg. Allí podemos ver, por ejemplo, el contenido del objeto linux-server que, a su vez, se deriva de otro denominado generic-host. Por el momento os digo esto sólo por culturilla porque no nos va a hacer falta. Nos basta con saber que tenemos disponibles las siguientes plantillas para empezar a trabajar con ellas:

  • linux-server
  • windows-server
  • generic-printer
  • generic-switch

Otra cosa interesante es la clausula parents mediante la que especificamos las conexiones entre los diferentes hosts. Como veis la única máquina a la que no le hemos asignado un padre es a la que tiene Nagios instalado. Pensad que esa máquina será el corazón de nuestra red de monitorización porque es desde ella desde donde se ejecutaran todos los comandos.

Aunque aquí no aparece ninguna, una máquina puede tener más de un host como padre (imaginaos una estructura de switches con conexiones redundantes entre ellos). Para ello basta con especificar los nombres de todos los padres que consideremos necesarios separados por comas.

A continuación y en el mismo fichero añadiremos las definiciones necesarias para crear grupos y organizar nuestros objetos y para monitorizar un primer servicio común a todos ellos: el PING

define hostgroup{
      hostgroup_name linux-servers
      alias Servidores Linux
      members nagios, intranet
      }

define hostgroup{
      hostgroup_name windows-servers
      alias Servidores Windows
      members windows#1, windows#2
      }

define hostgroup{
      hostgroup_name switches
      alias Electrónica de red
      members switch#1, router#1
      }

define service{
      use generic-service
      host_name nagios, intranet, switch#1, router#1, windows#1, windows#2
      service_description PING
      check_command check_ping!200.0,20%!600.0,60%
      normal_check_interval 5
      retry_check_interval 1
      }

La definición de los grupos es autoexplicativa ¿verdad? Luego nos serviran para organizar las vistas adecuadamente. Y desde luego que esta clasificación no es obligatoria. Podeis crear grupos en función del entorno donde estén las máquinas (desarrollo, preproducción, producción), la localización geográfica, el color de la carcasa… a vuestro rollo, vamos.

Para los servicios quizás sea necesario contar algunas cosas más. Como podemos ver el servicio que hemos definido también deriva de un objeto denomimado generic-service y que también se encuentra en el archivo templates.cfg. Podemos echarle allí un vistazo a esa definición pero por el momento no conviene que os despisteis y lo más interesante es la linea etiquetada como check_command que es donde realmente invocamos al comando que se va a encargar de monitorizar el servicio con una curiosa estructura de argumentos separados mediante signos de exclamación. Para comprender lo que estamos haciendo realmente tenemos que echar mano del fichero commands.cfg. Alli buscamos la definición del comando check_ping:

# ‘check_ping’ command definition
define command{
      command_name check_ping
      command_line $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
      }

$USER1$ es una variable que apunta al directorio donde se encuentran los plugins (/usr/lib/nagios/plugins/) y $HOSTADDRESS$ es la IP del host que estamos monitorizando. Los argumentos que invocamos separados por signos de exclamación se sustituyen aquí por los $ARG1$ y $ARG2$. Es decir, cuando Nagios lanza esta comprobación para, por ejemplo, la máquina que aloja nuestra intranet está ejecutando lo siguiente:

/usr/lib/nagios/plugins/check_ping -H 192.168.0.3 -w 200.0,20% -c 600.0,60% -p 5

No creo que por el momento merezca la pena meterse en muchas interioridades pero básicamente lo que hacemos (y esto es común para casi todos los scripts que monitorizan servicios en Nagios) es pasar un umbral que consideraremos como warning y otro como critical (-w y -c respectivamente). Si te interesa saber más sobre lo que realmente estás haciendo basta con que ejecutes el comando con un -h.

Conocer como funcionan realmente los comandos de nagios es muy importante porque cuando empecemos a desarrollar nuestros propios scripts o queramos modificar los que vienen por defecto lo mejor es ejecutarlos directamente desde línea de comando y comprobar la salida que dan hasta que estemos satisfechos.

Y, si os parece, lo dejamos aquí por el momento. En la próxima entrega añadiremos algunos servicios más y adornaremos con iconos apropiados el mapa de nuestro sistema.

Continúa en:

Compártelo:
    emailPDFPrintIdenti.caTwitterFacebookdel.icio.usDiigoFriendFeedBitacoras.comNetvibesMeneameBarraPuntoWikioLinkedInGoogle BuzzGoogle BookmarksLiveMisterWongTechnorati

Instalando Nagios 3.x en Debian etch

55 comentarios »
Leído 38.519 veces

icono de herramientas Tenía pendiente instalar una máquina nueva con Debian 4 para migrar a ella los servicios de monitorización de mi centro de trabajo. Las versiones de Nagios etiquetadas como stable en esta nueva Debian son la 1.4 y la 2.6 así que como quería probar la nueva versión 3 y no encontré ningún repositorio donde estuviera en forma de paquete .deb me decidí por compilarla e instalarla para evaluar si es lo suficientemente estable como para usarla en producción. El proceso ha sido bien sencillo así que dejo aquí un breve “paso a paso” para quien quiera animarse.

Partimos de una instalación limpia de debian etch con apache2. Lo primero que necesitamos es instalar nuestro entorno de compilación. Hay un paquete en debian con todo lo que necesitas para ello.

apt-get install build-essential

El segundo paso es instalar las librerías necesarias para, posteriormente, compilar nagios. Necesitamos las jpeg, png y gd2. Para las dos primeras no tuve ningún problema en instalar las que vienen con la distribución estable:

apt-get install libjpeg62 libjpeg62-dev libpng12-0 libpng12-dev

Para las gd2 sin embargo me lié un poco ¿necesito las que traen soporte para xpm o las que no?¿es indiferente, tal vez? Cómo no tenía ni idea y no encontré información referente a ello visité la página del proyecto y vi que allí no hacían distinción alguna… Reconozco que lo de los formatos gráficos no es lo mío (ni los de audio, ni los de video, ni…) así que tiré por la calle de enmedio y decidí bajarme los fuentes y compilarlos también:

cd /tmp
wget -c http://www.libgd.org/releases/gd-2.0.35.tar.gz
tar xzf gd-2.0.35.tar.gz
cd gd-2.0.35
./configure
make
make install

Lo siguiente es crear los grupos y usuarios necesarios para nagios:

useradd nagios
passwd nagios
groupadd nagios
groupadd nagcmd
usermod -G nagios nagios
usermod -G nagios josemaria
usermod -G nagcmd nagios
usermod -G nagcmd www-data

Con esto hemos creado un nuevo usuario (nagios), le asignamos una contraseña, creamos dos grupos (nagios y nagcmd). Añadimos nagios a ambos grupos, el usuario www-data (el que usa Apache) al grupo nagcmd y, por comodidad aunque no es indispensable, nuestro usuario común al grupo nagios para que la edición de ficheros de configuración nos resulte maś cómoda.

Ya lo tenemos todo listo. Ahora toca bajarse Nagios, compilarlo e instalarlo. Visita la página oficial para asegurarte de que usas las últimas versiones disponible. Por lo demás, la secuencia usando las versiones actuales es la siguiente:

cd /tmp
wget -c http://tinyurl.com/2jyzao/nagios-3.0a5.tar.gz
wget -c http://tinyurl.com/2mqzzk/nagios-plugins-1.4.9.tar.gz
tar xzf nagios-3.0a5.tar.gz
cd nagios-3.0a5
./configure --with-command-group=nagcmd
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf
cd ..
tar xzf nagios-plugins-1.4.9.tar.gz
cd nagios-plugins-1.4.9
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

Creamos una contraseña para el acceso web del usuario nagiosadmin y reiniciamos apache:

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
/etc/init.d/apache2 reload

Y por último arrancamos nagios y, si no presenta ningún error, creamos un enlace para que de ahora en adelante arranque de forma automática al iniciar la máquina:

/etc/init.d/nagios start
ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios

Y ya. Con esto nuestro nagios debe de estar totalmente funcional y accesible vía web a través de la URL “http://hostname/nagios”. La configuración por defecto monitoriza algunos servicios en la propia máquina dónde se instala y nos debe de bastar para saber que funciona correctamente. Para sacarle partido debemos de hacer algunas cosillas más que os enumero, aunque con menor detalle, a continuación.

  1. Primero y fundamental: hay que plasmar la topología de nuestra red a través de los ficheros de configuración de nagios. Dichos ficheros se encuentan en el directorio “/usr/local/nagios/etc/objects”. Allí debemos de encontrar al menos un fichero llamado localhost.cfg (el único activo por el momento) y que nos puede servir como ejemplo de base. No le echeis cuenta a quien os diga que la configuración de nagios es enrevesada y echadle un vistazo libres de prejuicios, ya vereis que no es así. La guía de configuración debería de ser una buena referencia para este paso.
  2. Si queremos recibir notificaciones por email de las alertas de nuestra red es preciso que la máquina tenga postfix instalado y correctamente configurado y que editemos el fichero “/usr/local/nagios/etc/objects/contacts.cfg” y cambiemos la dirección de correo que aparece asociada por defecto al usuario nagiosadmin por la nuestra.
  3. Si queremos personalizar con iconos apropiados los hosts que aparecen en mapas y fichas de información debemos de descargarnos una o varias colecciones de ellos del apartado correspondiente (logos and images) de nagios exchange, descomprimirlas y dejar los iconos en el directorio “/usr/local/nagios/share/images/logos/”.
  4. Y ya que estamos por Nagios Exchange conviene echarle un vistazo también a la sección de Check Plugins. En ella encontraremos una gran colección de scripts para la monitorización de los más variados servicios y que complementan fabulosamente a los que nagios trae de base y hemos instalado ya.

Y poco más… aún no he plasmado todos los hosts y servicios de mi red pero con una horita escasa de trabajo este es el resultado. Cuando concluya prometo hacer una segunda entrada contando en detalle la configuración para los más perezosos que no quieran leerse la documentación en inglés.

Statusmap en Nagios

Continúa en:

Compártelo:
    emailPDFPrintIdenti.caTwitterFacebookdel.icio.usDiigoFriendFeedBitacoras.comNetvibesMeneameBarraPuntoWikioLinkedInGoogle BuzzGoogle BookmarksLiveMisterWongTechnorati

Habilitando acceso por ssh a la fonera

9 comentarios »
Leído 10.673 veces

Después de leer todos los comentarios de gente con problemas en el post de art-extreme y en un hilo de bandaancha comencé a tener dudas acerca de que fuese a funcionar, sobre todo después de los problemas que tuve en la fase final (y que ahora os comentaré para que no os pase lo mismo). Pero funciona, ya lo creo que funciona. Voy a tratar de describiros el procedimiento paso a paso para que no le quede ninguna duda a nadie que quiera animarse a hacerlo. Vamos allá.

Circuito convertidor RS232-TTLLo primero que necesitamos es un circuito convertidor RS232 a niveles TTL. Yo he usado el sugerido en el post de art-extreme que es el que aparece en la figura de la derecha. En el hilo antes mencionado de bandaancha aparece uno ligeramente diferente y hay quien ha mencionado por ahí que es más fácil usando el chip max323 porque los niveles TTL de la fonera son de 3,3 voltios y no de 5 como en este. También he encontrado por ahí referencias a circuitos que no necesitan siquiera el max232 e incluso tiendas que venden el conversor ya hecho. Para quien no le guste meterse “a ciegas” y quiera saber exactamente que es lo que estamos haciendo os recomiendo este breve manual sobre comunicaciones serie. Venga, no seais perezosos y echadle un vistazo que os espero.

¿Listos? Ahora hay que ir a comprar los componentes. La “lista de la compra” acciende a 6,72€ de los cuales 4,41€ corresponden a la placa de pruebas. Os enumero a continuación:

  • Tira pins macho 1×40.- 0,73€ (me sobran 36 así que si alguien los quiere ;-) )

  • Circuito integrado max232.- 0,63€
  • Zócalo circuito integrado 2×8.- 0,24€
  • conector RS232 de 9 pines acodado.- 0,52€
  • 4 condensadores electrolíticos 1µF.- 0,11€ (0,029€ cada uno)
  • 1 condensador electrolítico 10µF.- 0,08€
  • Placa de pruebas 3 agujeros 100×160.- 4,41€

Aparte de estos componentes necesitamos un soldador, estaño, unas pinzas, cablecillos y conectores. Para estos últimos yo he cogido algunos de viejas cajas desechadas de ordenador.

Unos consejos antes de empezar: lo más sensible del circuito es el integrado pero si no estaís acostumbrados a manejarlos quizás no sepais que no se deben de colocar en su zócalo hasta que todo el montaje no está terminado para que no reciba demasiado calor durante la soldadura lo cual podría estropearlo. Fijaos bien ahora en el zócalo y en el integrado: ambos tienen una marca en forma de media luna que sirve para que sepamos cual es la parte superior del mismo y, por tanto, la numeración de las patillas: la número 1 es la que está a la izquierda de dicha muesca y a partir de esta se sigue contando a medida que se va descendiendo hasta el fin de la fila. Luego se continua por la ultima patilla de la fila enfrentada y se siguen contando pero ahora en forma ascendente hasta la patilla superior, de forma que la primera y la ultima patilla quedan enfrentadas a izquierda y derecha de la muesca respectivamente. En cuanto a los condensadores electrolíticos lo único que hay que tener en cuenta es que la patilla más larga corresponde al positivo y la corta (que suele ir marcada en la cápsula con un signo) al negativo.

Un último consejo: cuidado con las soldaduras frías que hacen malos contactos y tantos quebraderos de cabeza dan luego. La forma de hacer una soldadura correcta es como sigue: se aplica el soldador al punto donde vamos a soldar durante un par de segundos para calentar la zona. A continuación y sin retirar el soldador aplicamos el estaño y cuando este se funde y baña la zona nos retiramos rápidamente. Cómo la placa es muy grande podeis hacer pruebas con hilos de cobre en una de las esquinas para que os sintais seguros antes de pasar a la acción. Al final os debería de quedar algo como esto:

fonera3  fonera4

Yo he “apurado” el espacio porque tengo práctica (aunque hace años que no juego a estas cosas me pasé cuatro años soldando en la formación profesional y muchos más durante y después reparando pequeños electrodomésticos), porque posiblemente corte el circuito y lo conserve para usos futuros y porque rentabilizaré el resto de la placa para otras cosas. Si vosotros no os sentís tan seguros no teneis porque hacerlo así: teneis placa de sobra y si espaciais más los componentes luego el cableado de la parte inferior os resultará mucho más fácil. Sin verguenzas :-) .

fonera2Y ahora viene la parte frustante. Realicé las conexiones tal y como se explicaba en los artículos que he mencionado antes pero no conseguí que funcionara. El terminal recibía caracteres pero nada inteligible. Al principio pensé que se trataba de que había elegido mal la emulación del terminal o los parámetros de conexión y me pasé varias horas jugando con esto sin resultados positivos. Pero al final hubo varias cosas que me dieron la pista definitiva. Por un lado al escribir una orden que el router debería de reconocer (un reboot, por ejemplo) el cacharro actuaba en consecuencia, es decir “escuchaba” lo que yo escribía aunque yo no lo viera correctamente. Luego estaba lo que había leído sobre los niveles de tensión… parecía claro que el circuito no estaba correctamente alimentado y que había que alimentarlo externamente con 5v. Para ello hice una pequeña chapuza usando un cargador universal de móvil a través de USB que entrega exactamente 5v (y que me regalaron en no se que presentación de un producto comercial de Compuware… eso para quien piense que es una tontería ir a estas cosas :-) ).

Vamos, pues, a explicar como queda el conexionado final:

fonera1

Vamos paso a paso. En el circuito que hemos preparado hemos dejado cuatro pines: dos de alimentación y otros dos para las señales de transmisión (tx) y recepción (rx). Los colores que he usado son los siguientes:

fonera5

  • Rojo para el positivo de alimentación (+5v).

  • Negro para el común (GND).
  • Verde para la señal de transmisión (tx).
  • Blanco para la señal de recepción (rx).

Los hilos de transmisión y recepción van conectados directamente entre nuestro circuito y la fonera en los pines que se ven en la foto de la derecha. Alimentamos nuestro circuito con la salida que nos da el cargador-USB y unimos los comunes de ambos circuitos. Encendemos la fonera, conectamos desde nuestro emulador de terminal favorito (9600,8,N,1 y sin control de flujo). Et voilà. La secuencia completa de este arranque la teneis aquí.

Ahora ya sólo nos resta hacer las modificaciones pertinentes para tener acceso a ella a través de ssh y no tener que volver a usar este engorroso procedimiento. Jauzsi explica muy bien lo que hay que hacer para ello:

  • mv /etc/init.d/dropbear /etc/init.d/S50dropbear

  • vi /etc/firewall.user
  • Quitamos los comentarios de las reglas que bloquean el acceso a través de ssh (puerto 22). Estas concretamente:
    ## -- This allows port 22 to be answered by (dropbear on) the router
    # iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 22 -j ACCEPT
    # iptables -A input_rule -i $WAN -p tcp --dport 22 -j ACCEPT
  • Salvamos los cambios (¡que no se os olvide!) y reiniciamos el router (reboot).

Y listo. Ya podemos desmontar el chiringuito. La próxima conexión a nuestra fonera la haremos como está mandado: por ssh.

    josemaria@valeria:/etc$ ssh root@192.168.1.3
    The authenticity of host '192.168.1.3 (192.168.1.3)' can't be established.
    RSA key fingerprint is d1:85:26:37:10:88:80:24:47:e3:fe:74:29:b8:fd:82.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.1.3' (RSA) to the list of known hosts.
    root@192.168.1.3's password:

    BusyBox v1.1.3 (2006.08.17-19:56+0000) Built-in shell (ash)
    Enter 'help' for a list of built-in commands.

    _______ _______ _______
    | ____|| || _ |
    | ____|| - || | | |
    | | |_______||__| |__|
    |___|

    Fonera Firmware (Version 0.7.0 rev 4) -------------
    *
    * Based on OpenWrt - http://openwrt.org
    * Powered by FON - http://www.fon.com
    ---------------------------------------------------
    root@OpenWrt:~#

Compártelo:
    emailPDFPrintIdenti.caTwitterFacebookdel.icio.usDiigoFriendFeedBitacoras.comNetvibesMeneameBarraPuntoWikioLinkedInGoogle BuzzGoogle BookmarksLiveMisterWongTechnorati

Transferencia de ficheros con netcat o ssh

5 comentarios »
Leído 5.945 veces

Poneos en situación: estamos en un entorno corporativo con máquinas Linux y necesitamos transferir ficheros entre dos de ellas pero no disponemos de ningún protocolo de transferencia habitúal. No tenemos (o no queremos usar) el infame SMB/CIFS (Samba para los amigos), no hay NFS, no tenemos acceso FTP y por supuesto que no tenemos acceso físico a la máquina destino de las transferencias. Sólo disponemos de una conexión SSH con la misma ¿cómo lo hacemos?

La primera opción implica una cierta preparación previa: que la máquina destino (supondremos siempre que tenemos acceso local a la máquina origen) tenga una copia de netcat, esa llamada “navaja suiza” del TCP/IP. Para hacer la transferencia lo primero es poner en escucha una instancia de netcat en la máquina destino. Así:

    jmmoralesv@barbara:/tmp$ netcat -v -l -p 6969 > googlemapsapi.pdf
    listening on [any] 6969 ...

Inmediatamente después lanzamos la copia desde la máquina origen de esta forma:

    jmmoralesv@eduardita:~> cat googlemapsapi.pdf | netcat barbara 6969

La máquina destino recibe correctamente el fichero y cierra la sesión:

    connect to [xxx.xxx.xxx.xxx] from eduardita [xxx.xxx.xxx.xxx] 43900
    googlemapsapi.pdf
    jmmoralesv@barbara:/tmp$ ls -l
    total 924
    -rw-r--r-- 1 jmmoralesv jmmoralesv 428445 2006-10-05 12:00 googlemapsapi.pdf

Evidentemente no tenemos que pasar los ficheros uno a uno ;-) . Si queremos pasar un directorio completo la secuencia sería la siguiente: Primero levantamos de esta forma la escucha en la máquina destino:

    jmmoralesv@barbara:/tmp$ netcat -v -l -p 6969 | tar xv
    listening on [any] 6969 ...

Y luego lanzamos la copia desde el origen así:

    jmmoralesv@eduardita:~> tar cf - pdfs | netcat barbara 6969

Ahora ‘recogemos’ los resultados:

    connect to [xxx.xxx.xxx.xxx] from eduardita [xxx.xxx.xxx.xxx] 49810
    pdfs/
    pdfs/fungibles 8550.pdf
    pdfs/googlemapsapi.pdf
    pdfs/GuiaWebVersionDefinitiva.pdf
    jmmoralesv@barbara:/tmp$ ls -lR
    .:
    total 4
    drwxr-xr-x 2 jmmoralesv jmmoralesv 4096 2006-10-05 12:30 pdfs
    ./pdfs:
    total 1904
    -rw-r--r-- 1 jmmoralesv jmmoralesv 860160 2006-10-05 12:22 fungibles 8550.pdf
    -rw-r--r-- 1 jmmoralesv jmmoralesv 428445 2006-10-05 12:00 googlemapsapi.pdf
    -rw-r--r-- 1 jmmoralesv jmmoralesv 644674 2006-08-03 10:48 GuiaWebVersionDefinitiva.pdf

La segunda opción que veremos no requiere más que de la conexión ssh con la máquina destino.

    jmmoralesv@eduardita:~> tar czv googlemapsapi.pdf | ssh barbara tar xz -C /tmp
    googlemapsapi.pdf
    Password:

Igualmente podemos transferir un directorio completo:

    jmmoralesv@eduardita:~> tar czv pdfs | ssh barbara tar xz -C /tmp
    pdfs/
    pdfs/fungibles 8550.pdf
    pdfs/googlemapsapi.pdf
    pdfs/GuiaWebVersionDefinitiva.pdf
    Password:

O, incluso, invertir los términos y traernos uno o varios ficheros desde la máquina destino a la origen:

    jmmoralesv@eduardita:~> ssh barbara tar cz /tmp/pdfs | tar xz -C .
    Password:

La última opción consiste en montar directamente un directorio de la máquina destino sobre nuestro sistema de ficheros gracias a sshfs. En la máquina destino no necesitamos hacer ningún preparativo previo: sólo contar con el servicio SSH. En la máquina origen debemos de instalar previamente los paquetes fuse y sshfs. Una vez hecho esto levantamos el módulo de fuse y, sin mas, montamos el directorio que deseamos sobre nuestro sistema de la siguiente forma:

    jmmoralesv@eduardita:~> sudo modprobe fuse
    Contraseña:
    jmmoralesv@eduardita:~> sshfs jmmoralesv@barbara:/tmp /mnt/barbara
    Password:
    jmmoralesv@eduardita:~> ls -l /mnt/barbara
    total 424
    -rw-r--r-- 1 jmmoralesv 1000 428445 2006-10-05 12:44 googlemapsapi.pdf
    drwxr-xr-x 1 jmmoralesv 1000 4096 2006-10-05 12:36 pdfs
    jmmoralesv@eduardita:~>

Por último, para desmontar la unidad:

    jmmoralesv@eduardita:~> sudo umount /mnt/barbara
    root's password:
    jmmoralesv@eduardita:~> ls /mnt/barbara -l

Referencias y ampliaciones en:

Compártelo:
    emailPDFPrintIdenti.caTwitterFacebookdel.icio.usDiigoFriendFeedBitacoras.comNetvibesMeneameBarraPuntoWikioLinkedInGoogle BuzzGoogle BookmarksLiveMisterWongTechnorati

La Internet Oculta (más sobre TOR)

8 comentarios »
Leído 5.504 veces

Hace unas semanas publiqué un post en el que comentaba las bondades de TOR y Privoxy y contaba por encima una forma fácil y flexible de instalarlos y configurarlos. Hoy voy a contaros otro aspecto muy, muy interesante acerca de TOR: el acceso a una “Internet oculta”.

Cuando accedemos a Internet a través de la red TOR no sólo tenemos acceso anónimo a la Internet convencional sino que tenemos a nuestra disposición unos servicios ocultos… servicios publicados en internet a través de estos mismos servidores y a los que sólo se tiene acceso con este tipo de conexión.

Existe una wiki dónde se recogen los enlaces que se quieren hacer públicos a todos los usuarios de la red TOR. No os molesteis en pulsar en el enlace anterior si no estais usando uno de estos routers porque os mandará a uno de esos moletos sitios de compra y venta de dominios. Ahora bien, si estás usando un servidor TOR y pulsas en el enlace entrarás en la siguiente wiki:

Entre estos servicios teneis servidores jabber, de IRC, de almacenamiento de ficheros, etc. Y, por supuesto, también hay secciones de pornografía, política y de “contenidos controvertidos” donde… vaya… ¿qué será eso del video de un editor de periódicos español?¿Pero no era una leyenda urbana?

Pero si lo que realmente quieres es mantener una dirección oculta entre compañeros o colaboradores no deberías de publicarla aquí. Un servicio publicado en esta internet oculta para el cual no hagamos pública la dirección está a salvo de cualquier buscador o mirada indiscreta. Y crearlos es sumamente fácil…

En el fichero de configuración torrc (en /etc/tor habitualmente) existe una sección explicita para que coloquemos nuestros servicios ocultos:

############### This section is just for location-hidden services ###

Crear un nuevo servicio es muy sencillo. Basta con dos líneas para, por ejemplo, crear un sercicio oculto que apunte a la web de El País:

HiddenServiceDir /Library/Tor/var/lib/tor/hidden_service/
HiddenServicePort 80 www.elpais.es:80

Con la primera línea le indicamos a TOR un directorio donde guardará información acerca de ese servicio. Allí generará un fichero llamado hostname donde figurará la URL donde se publicará nuestro servicio oculto dentro de la red de TOR. Esta URL tendrá una forma similar a estas: http://6sxoyfb3h2nvok2d.onion/. En la segunda línea indicamos el puerto a través del que se accederá a dicho servicio y la URL donde se encuentra el servicio ‘real’.

Una vez que hemos comprobado que lo anterior funciona el resto es casi tan sencillo: instalamos nuestro servidor web favorito en la misma máquina donde tenemos el TOR y configuramos una instancia en, por ejemplo, el puerto 3222 de forma que sólo acepte conexiones entrantes de el mismo (localhost). Comprobamos que funciona y, a continuación, sustituimos la segunda línea de nuestro servicio oculto por lo siguiente:

HiddenServicePort 80 localhost:3222

Reiniciamos el servicio de TOR. Y listo.

Y por cierto: después de escribir el texto del otro día me di cuenta de que habíamos estado analizando el anonimato que nos proporcionaba esta herramienta desde el punto de vista del destino, pero no del origen, es decir ¿qué es lo que ve nuestro ISP cuando usamos TOR? Hoy, después de una sesión de unos 30 minutos he recogido los datos de las conexiones que he tenido abiertas a través de ntop y este es el resultado:

Salvo el dns de jazztel y la página web del ntop, ninguno de los otros servidores tienen absolutamente nada que ver con los sitios que he estado visitando…

Compártelo:
    emailPDFPrintIdenti.caTwitterFacebookdel.icio.usDiigoFriendFeedBitacoras.comNetvibesMeneameBarraPuntoWikioLinkedInGoogle BuzzGoogle BookmarksLiveMisterWongTechnorati

TOR: Fiebres anónimas

10 comentarios »
Leído 3.908 veces

La privacidad y el anonimato siempre han sido puntos que han preocupado bastante a un gran porcentaje de los usuarios de Internet, sobre todo a los que tienen un poco de más conocimiento sobre lo que están haciendo y el uso que se le puede dar a los datos que van dejando por ahí. Pero últimamente, no se si por casualidad, he recibido una avalancha de información referente a dos de las mejores herramientas que existen para conseguir esto: sendos artículos en las revistas de enero de Linux Magazine y @rroba, entradas en el meneame y mucha publicidad referente a una nueva distribución de GNU/LINUX centrada en el uso de dichas herramientas. Me estoy refiriendo, por supuesto, a TOR y a Privoxy Privoxy es un proxy web con algunas funciones muy útiles para control de cookies, eliminación de publicidad en las páginas, bloqueo de popups, etc. Está basado en el Internet Junkbuster. TOR es el verdadero ‘anonimizador’ de nuestra conexión y para ello usa un sistema muy curioso: hace viajar nuestras peticiones a través de una red de servidores (denominados Onion Routers, de ahí las siglas del producto) de forma que sea imposible identificar su procedencia ni realizar un seguimiento de la misma (luego veremos un poco más el método que usan para ello). Ambas herramientas combinan perfectamente entre sí para proporcionarnos Privacidad (Privoxy) y Anonimato (TOR) en nuestra navegación y están disponibles para una amplia base de plataformas. Yo uso ambas herramientas desde hace ya tiempo y voy a tratar de aprovechar el ‘tirón’ de popularidad que están teniendo en los últimos días para poner mi granito de arena y darles un poco más publicidad. Para ello os voy a contar la instalación que tengo hecha en casa y la forma más rápida y práctica de ponerlos en marcha. Para empezar, os copio el esquema de mi red tal y como lo entrega mi nagios y os doy unas explicaciones:

Como podeis ver después del cortafuegos tengo cuatro máquinas: aquilino es el portatil de mi mujer (Windows 2000 Professional, y mira que lo siento…), susie es mi máquina de trabajo habitúal (OpenSuse 10.0), Debbie es mi servidor (Debian Sarge 3.1) y Valeria es el equipo que uso para cacharrear, hacer pruebas con productos inestables o de los que meramente quiero hacer una evaluación, etc. En susie tengo una instalación de Privoxy en local y la uso siempre para eliminar la publicidad y los Ads de las páginas por las que navego. OpenSuse viene con la versión 3.0.3 de esta herramienta. En debbie tengo una instalación combinada de Privoxy (versión 3.0.3 en stable) y TOR (versión 0.1.0.16 en unstable) y la uso cuando… digamos, quiero que lo estoy haciendo pase lo más desapercibido posible… La forma más cómoda de combinar las distintas opciones que ahora se nos ofrecen es mediante firefox y su extensión SwitchProxy que me permite cambiar con sólo dos clicks entre cualquiera de las tres posibilidades de navegación que tengo disponibles de forma inmediata:

Pero regresemos a la forma en la que TOR trabaja ¿cómo nos proporciona el anonimato?¿es algo realmente fiable? La forma de trabajar (de forma reducida) es la siguiente: TOR puede trabajar como cliente y/o como servidor. Un cliente TOR lo primero que hace es obtener una lista de servidores TOR disponibles y confeccionar una ‘ruta’ aleatoria y privada (el tráfico está cifrado) entre varios de estos servidores. Cada minuto (o tras un reinicio del demonio si necesitamos un cambio más rápido) TOR confecciona una nueva ruta para nuestro tráfico. El proceso seguido está explicado en detalle aquí.

Si disponemos de una IP fija y queremos ‘donar’ algo de nuestro ancho de banda al servicio del resto de usuarios de esta herramienta aquí se nos dice como hacerlo. El ancho de banda que nuestro servidor TOR usa está limitado y es configurable por el usuario, así que no hay que tener miedo de que nos eche abajo la conexión. La configuración de ambas herramientas es muy sencilla. Para hacer funcionar Privoxy en nuestra máquina local basta con arrancar el servicio y apuntar nuestro navegador para que use el proxy a través del puerto 8118 de la máquina en la que esté instalado.

Privoxy por defecto viene configurado para que sólo pueda ser accedido desde la misma máquina desde la que se ejecuta, así que para acceder a la instancia que tengo en el servidor debian tuve que modificar la siguiente línea en el fichero de configuración (/etc/privoxy/config para debian y /var/lib/privoxy/etc/config para OpenSuse) listen-address 192.168.0.3:8118 La dirección por defecto era, como podeis imaginar es la 127.0.0.1:8118 Por último, para que Privoxy use TOR como anonimizador hay que incluir una nueva línea en su fichero de configuración, esta vez bajo el epígrafe 5.2 (puedes ponerlo dónde te plazca, el emplazamiento sugerido es meramente para guardar la coherencia del fichero de configuración) forward-socks4a / localhost:9050 . Ni que decir tiene que para que Privoxy tome cada cambio que hacemos en su fichero de configuración hay que reiniciar el demonio, ¿verdad? Y poco más. Si ahora hacemos la prueba a través de cualquier servicio de localización de IP a través de Internet (como por ejemplo http://www.ip2location.com/) podemos comprobar que nuestra dirección de acceso no se corresponde para nada con la realidad…

Y a cada minuto (o cada vez que reiniciemos el demonio del tor) obtenemos una ‘identidad’ diferente:



Si meramente usamos Privoxy la diferencia de rendimiento es prácticamente despreciable pero si lo combinamos con TOR como podeis imaginar la navegación se hace un poco más lenta, así que no se trata de una opción para tener activada siempre sino sólo cuando realmente pensemos que lo necesitamos… Buen provecho…

Compártelo:
    emailPDFPrintIdenti.caTwitterFacebookdel.icio.usDiigoFriendFeedBitacoras.comNetvibesMeneameBarraPuntoWikioLinkedInGoogle BuzzGoogle BookmarksLiveMisterWongTechnorati
Página 4 de 41234