12 de diciembre de 2008

Echando a andar snmptrapd en mi Slackware Linux

Ahora que por fin calleron vacciones (y pagadas), me puse a meterle la mano al snmotrapd. ¡Por fin!

Para ello fue necesario meterle la mano al archivo de configuración de snmptrapd:

/etc/snmp/snmptrapd.conf

Primero ponemos una configuración bastante simple que es:

snmpTrapdAddr 127.0.0.1
pidFile /var/run/snmptrapd.pid
disableAuthorization yes
logOption f /var/log/snmptrapd.log
outputOption n
printEventNumbers yes

A continuación explicaré brevemente lo que significa cada entrada del archivo:

- snmpTrapdAddr: Define una lista de direcciónes IP que estarán a la escucha de traps. En este caso se utiliza la interfaz local, es decir, sólo se van a recibir traps desde localhost.
- pidFile: Donde va a quedar el archivo de PID.
- disableAuthorization: Deshabilita cualquier tipo de control de acceso y acepta todas las notificaciones entrantes.
- logOption: En este caso se especifica que la bitácora se guardará en un archivo (f) y posteriormente se escribe la ruta del mismo. En este caso, lamentablemente no acepta cosas como logOption f /var/log/snmptrapd.log.`date %Y` que por ejemplo haría que apareciera el año como última extensión, por lo tanto quizás sea buena idea manipularlo con el logrotate.
-outputOption: Especifica cómo se guardarán los OIDs de las notificaciones entrantes, es decir, da formato a los datos que se guardarán en las bitácoras.
- printEventNumbers: Escribe en formato numérico los eventos relacionados con M2M-MIB

Y en el archivo de inicio del sistema /etc/rc.d/rc.snmptrapd se pone una línea más o menos como la siguiente para llevar a cabo el inicio del servicio:

/usr/sbin/snmptrapd -C -a -A -c /etc/snmp/snmptrapd.conf

Básicamente las opciones significan:

-a: Ignorar traps de authenticationFailure
-A: Mantener el archivo de bitácora en lugar de sobreescribirlo.
-c: Obtener la configuración de un archivo.
-C: No leer más archivos de configuración que el que se especificó con la opción -c

Poteriormente agregaré el soporte para el formateo de las traps y notificaciones entrantes.

Saludos!

11 de diciembre de 2008

Echando a andar snmpd en mi Slackware Linux

Por diversos motivos, me vi en la necesidad de echar a volar un par de servicios de snmp en mi linux box, de entrada el snmpd, que es un agente de snmp; y por otro lado, snmptrapd que es un demonio que se encarga de recibir y procesar los traps de snmp enviados por otros equipos, es digamos, la base para construír un sistema de gestión de fallas de elementos de red.

Veamos, ¿qué es snmp?
Según la wikipeadia:
El Protocolo Simple de Administración de Red o SNMP es un protocolo de la capa de aplicación que facilita el intercambio de información de administración entre dispositivos de red. Es parte de la familia de protocolos TCP/IP. SNMP permite a los administradores supervisar el desempeño de la red, buscar y resolver sus problemas, y planear su crecimiento.
Lea el artículo completo aquí: http://es.wikipedia.org/wiki/SNMP

Coninuemos. Para este proyecto utilicé Slackware 12.1.0, el cual ya contiene dentro de sus paquetes el net-snmp-5.4 lo que agiliza las cosas pues ya no es necesario bajarlo. Si este no es su caso, puede obtener las fuentes de: http://www.net-snmp.org

Ok, de entrada vamos a configurar el agente de snmp (snmpd), para esto, me guié del artículo Cómo configurar SNMP escrito por Joel Barrios Dueñas.
Les aconsejo también tener a la mano la página manual de este archivo, pueden consultarla en: http://www.net-snmp.org/docs/man/snmpd.conf.html

Ahora, armados con nuestros manuales de referencia vamos al archivo de configuración, localizado en /etc/snmp/snmpd.conf.

Primero que nada debemos crear una política de acceso, de seguridad pues.
En general podríamos usar solamente las directivas rocommunity y rwcommunity, pero, son muy básicas y solamente van a servirnos para definir las comunidades para lectura/escritura y sólo lectura. Si deseamos generar reglas de acceso un poco más refinadas podríamos utilizar listas de control de acceso:
com2sec localHost 127.0.0.1/32   private
com2sec redLocal 192.168.1.0/24 public
En este caso, creamos dos ACLs, definidas por rangos de ip's, la primera se llama localHost y se refiere al ip 127.0.0.1 y la segunda se llama redLocal y se refiere a la red 192.168.1.0/24
Así mismo, indico que a localHost se le asigna la comunidad "private", y a redLocal se le asigna la comunidad "public".

Posteriormente asigno un grupo RWGroup y un ACL a un acceso, ya sea v1, v2c o usm. v1 es para SNMP v1, v2c para SNMP v2c y usm, en realidad no tengo una idea clara. Aunque asumo que es algo como "Unespecified Security Model".
#Se asigna local al grupo de lectura escritura
group RWGroup v1 localHost
group RWGroup v2c localHost
group RWGroup usm localHost

Lo mismo aplica para el bloque de abajo, en el que asignamos la ACL redLocal al grupo ROGroup, para los accesos v1, v2 y usm.

#Se asigna miredlocal al grupo de solo lectura
group ROGroup v1 redLocal
group ROGroup v2c redLocal
group ROGroup usm redLocal
Después se asignan los permisos para las ramas que se desean ver:

## name   incl/excl subtree   mask(optional)
view all included .1 80

En este caso, creamos una vista llamada "all", a la cual se le indica que tendrá incluída la subrama .1 (que es básicamente la raíz de cualquier OID de SNMP, lo que sinifica que podremos ver todo el árbol), después de esto viene la máscara, que según entiendo da a entender que todo se podrá observar.

Posteriormente asignamos permisos a los grupos:
## group         context  sec.model sec.level prefix read   write notif
access ROGroup "" any noauth exact all none none
access RWGroup "" any noauth exact all all all
Aquí, todo parece claro, ¿cierto?

Finalmente, unas cuantas directivas de configuración

agentaddress 127.0.0.1
sysLocation MiCasita
sysContact AlfredoCampos (alfredo.campos en gmail.com)
sysDescr La PCera Linuxista del Alfredo
trapcommunity public
transink 127.0.0.1
Prometo describirlas con un poco más de calma.

Ahora, el archivo de inicio del servicio.
Como cualquier linuxero podría saberlo, éste se encuentra en /etc/rc.d/rc.snmpd y sólo comentaré que la línea para hacer que esto funcioe es:

/usr/sbin/snmpd -C -a -A -c /etc/snmp/snmpd.conf

¿Cómo sé que funciona?

Bueno, podemos ejecutar el siguiente comando:

snmpwalk -v1 127.0.0.1 -c private .1
Con lo cual podremos observar una lista bastante grande de los datos del árbol de SNMP disponibles para su linuxbox.

Al menos funciona y el demonio se levanta sin mayores complicaciones, claro que falta ponerle opciones paa que guarde un log y algunas monerías más. Eso lo haré próximamente.

¡Saludos!