Configuración, ejecución y pruebas de un agente de gestión SNMPv3

Anuncio
Configuración, ejecución y pruebas de un
agente de gestión SNMPv3
Grupo SNMPv3_B: Diego Aguilar Vidal, Luciano Rodríguez Lorenzana, Ana Román González
RESUMEN
Dado que el concepto de gestión es muy amplio y abarca muy diversos ámbitos, el presente
documento centra sus esfuerzos en el estudio de SNMP (Simple Network Management
Protocol), y su implementación de código abierto net-snmp. No será objetivo de este estudio,
un desglose pormenorizado de lo que al protocolo SNMP se refiere, sin embargo, trataremos
de esbozar los objetivos que se pretenden abarcar en el diseño de dicho protocolo, la
estructuración de la información disponible, las características más relevantes incluidas en las
diferentes revisiones del protocolo; haciendo especial hincapié en las políticas de privacidad y
seguridad adoptadas , USM (User Security Model) y VACM (View-based Access Control
Module).
INTRODUCCIÓN
El objetivo fundamental que trataremos de cubrir a lo largo del documento, será solventar los
principales escollos y trabas que surgen a la hora de gestionar sistemas tan heterogéneos y en
constante evolución, como son los sistemas de comunicaciones o redes de comunicaciones.
En el presente documento, profundizaremos en el conocimiento del protocolo SNMP,
diseñado como paliativo del complejo problema de la gestión de sistemas de comunicaciones
anteriormente mencionado.
Con el fin de alcanzar el objetivo prefijado, se desarrollaran las pertinentes configuraciones y
validaciones, de un agente SNMP incluido en la suite NET-SNMP. Se revisarán las carencias,
ventajas y desventajas de cada una de las revisiones del protocolo SNMP implementadas por
NET-SNMP, realizando las validaciones funcionales y de seguridad pertinentes. Se hará especial
énfasis en la demostración de las capacidades del marco de seguridad USM y el
funcionamiento del control de acceso basado en el modelo VACM de SNMPv3.
Una vez aclarados los objetivos y la metodología a emplear, se describe a continuación la
estructura del presente documento:
• Sección primera, en la que se detallan los conceptos fundamentales de SNMP, con el fin
de facilitar la comprensión al lector. En esta sección, se incluirán comentarios respecto a los
modelos de seguridad empleados en las distintas revisiones del protocolo SNMP, o la
estructura de almacenamiento de datos que SNMP toma como referencia, entre otros
aspectos.
• Sección segunda, en la que se profundiza sobre la implementación del protocolo SNMP
empleada, y algunas de las alternativas disponibles más destacadas.
• Sección tercera, en la que se recogen todos aquellos parámetros de configuración
reseñables, las diferentes pruebas realizadas y los resultados obtenidos, en base al agente de
gestión SNMP empleado.
• Sección cuarta, en la que se realiza un análisis de las principales conclusiones obtenidas
tras las sesiones de laboratorio desempeñadas. Tienen cabida en ésta sección tanto
consideraciones personales, como técnicas.
CONCEPTOS BÁSICOS DE SNMP
El protocolo SNMP[1] o protocolo simple de administración de red, es un protocolo de la capa
de aplicación que facilita el intercambio de información de administración entre dispositivos
de red. SNMP forma parte de la familia de protocolos TCP/IP y permite a los administradores
supervisar el funcionamiento de la red, localizar y resolver sus anomalías, y planificar su
crecimiento.
Los componentes básicos de una red gestionada mediante SNMP, son:
• Dispositivos administrados.
• Agentes.
• Sistemas administradores de red (NMS’s - Network Management Systems) o gestores.
Un dispositivo administrado es un nodo de red que contiene un agente SNMP y reside en una
red administrada. Estos recogen y almacenan información de administración, la cual es puesta
a disposición de los NMS’s usando SNMP. Los dispositivos administrados, a veces llamados
elementos de red, pueden ser routers, servidores de acceso, switches, hosts, hubs, etcétera.
Un agente es un módulo de software de administración de red que reside en un dispositivo
administrado. Un agente posee un conocimiento local de información de administración
(memoria libre, número de paquetes IP recibidos, rutas, etcétera), la cual es traducida a un
formato compatible con SNMP y organizada en jerarquías, habitualmente en una base de
datos denominada MIB (Management Information Base).
Un NMS ejecuta aplicaciones que supervisan y controlan a los dispositivos administrados. Los
NMS’s proporcionan el volumen de recursos de procesamiento y memoria requeridos para la
administración de la red. Uno o más NMS’s deben existir en cualquier red administrada.
El principio de funcionamiento de SNMP reside, por lo tanto, en el intercambio de información
entre gestores y agentes. Habitualmente, los agentes mantienen en cada dispositivo
gestionado información acerca de su estado y su configuración. El gestor solicita al agente, a
través del protocolo SNMP, la realización determinadas operaciones (get, set) con datos de
gestión, gracias a las cuales se puede conocer el estado del recurso e influir en su
comportamiento. Cuando se produce alguna situación anómala en un recurso gestionado, los
agentes, sin necesidad de ser invocados por el gestor, emiten los denominados eventos o
notificaciones, que son enviados a un gestor para que el sistema de gestión pueda actuar en
consecuencia.
Durante las diferentes revisiones del protocolo SNMP, se han ido mejorando sustancialmente
las carencias de las versiones anteriores. SNMP en su última versión (SNMPv3) posee cambios
significativos con relación a sus predecesores, sobre todo en aspectos de seguridad, sin
embargo no ha sido mayoritariamente aceptado en la industria. A continuación describiremos
con más detalle, algunos de los mecanismos de seguridad empleados, que son el objetivo
central de estudio del presente documento.
El modelo de seguridad basado en usuario o USM[2] (User-Based Security Model) proporciona
los servicios de autentificación y privacidad en SNMPv3. El mecanismo de autentificación en
USM, asegura que un mensaje recibido fue trasmitido por la entidad indicada en el campo
correspondiente a la fuente en la cabecera del mensaje; y además, que el mensaje no fue
alterado durante su tránsito, manipulado, artificialmente retardado o replicado. Con el fin de
lograr la autentificación, el gestor y el agente que desean comunicarse deben compartir la
misma clave secreta de autentificación, configurada previamente de forma externa a SNMPv3
(no es almacenada en la MIB y no es accesible mediante SNMP). El protocolo de
autentificación utilizado puede ser el HMAC-MD5-96 o el HMAC-SHA-96. Para asegurarse de
que los mensajes llegan dentro de una ventana temporal razonable, que descarte el posible
retardo de mensajes y el ataque mediante mensajes replicados, se utilizan mecanismos de
sincronización entre emisor y receptor, y el chequeo de la ventana temporal constituida por el
intervalo temporal de emisión y recepción del mensaje. Por otro lado, USM posibilita a los
gestores y a los agentes el cifrado de mensajes con el fin de prevenir que éstos sean analizados
por intrusos. De nuevo, el gestor y el agente deben compartir una clave secreta configurada
previamente. El algoritmo de encriptación utilizado es el CBC (Cipher Block Chaining) de DES
(Data Encryption Standard), conocido también por DES-56.
El modelo de control de acceso basado en vistas o VACM (Views-Based Access Control Model)
permite proporcionar diferentes niveles de acceso a las MIB de los agentes, para los distintos
gestores en SNMPv3. Un agente puede, de este modo, restringir el acceso de ciertos gestores a
parte de su MIB, o bien limitar las operaciones susceptibles de realizar por ciertos gestores
sobre una parte de su MIB. La política de control de acceso a ser utilizada por el agente para
cada gestor debe estar configurada previamente; consistiendo básicamente en una tabla que
detalla los privilegios de acceso para los distintos gestores autorizados. Mientras que la
autentificación es realizada por usuario, el control de acceso es realizado por grupos, donde un
grupo podría ser un conjunto de usuarios.
NET-SNMP Y ALTERNATIVAS DISPONIBLES
NET-SNMP[3]es un conjunto de aplicaciones utilizadas para implementar SNMP v1, SNMP v2c y
SNMP v3 utilizando IPv4 y/o IPv6. Esta suite nos proporciona todas las herramientas necesarias
para interactuar con SNMP, obtener información, manipularla, visualizarla de forma gráfica,
etc. A su vez implementa un agente SNMP (snmpd), y un servicio para recibir notificaciones
SNMP (snmptrapd). A modo de extensión, proporciona las librerías necesarias para el
desarrollo propio de nuevas aplicaciones que interactúen con SNMP.
Como alternativa a NET-SNMP, cabe destacar las diferentes utilidades proporcionadas por
MG-SOFT Corporation[4] , que proporciona un agente SNMP, herramientas gráficas de
visualización de MIB´s, herramientas y plantillas de desarrollo para agentes SNMP, una utilidad
cliente/servidor denominada Net Inspector, cuyo objetivo principal es monitorizar
eficientemente dispositivos de red. Cabe destacar, la versatilidad de las herramientas que se
nos ofrecen, disponibles muchas de ellas en varias plataformas, con gran documentación,
ejemplos, guías de instalación y desarrollo, etcétera.
PROCEDIMIENTOS, PRUEBAS Y RESULTADOS
Como punto de partida detallaremos la sintaxis de la orden snmpget, que nos permitirá
interrogar y de éste modo validar, el agente SNMP durante la fase de pruebas. Su sintaxis es la
siguiente[5]:
snmpget –v <versión> -c(comunidad) <ip del agente> <grupo OID>
ctm2x11@L9013:~> snmpget -v1 -c ltmlab 157.88.130.250 system.sysDescr.0
SNMPv2-MIB::sysDescr.0 = STRING: Cisco Internetwork Operating System
Software
IOS (tm) C3550 Software (C3550-I5Q3L2-M), Version 12.1(22)EA10b, RELEASE
SOFTWARE (fc1)
Copyright (c) 1986-2007 by cisco Systems, Inc.
Compiled Thu 25-Oct-07 20:56 by antonino
El valor almacenado para el OID[1] (un identificador de objeto , object ID u OID, únicamente
identifica un objeto administrado en la jerarquía MIB) sysDescr.0 es una descripción del
agente, que incluye por ejemplo, la fecha y hora en que fue compilado el sistema operativo del
dispositivo monitorizado, por última vez.
En la página del manual de snmpcmd[5] se pueden consultar los parámetros comunes para
todos los comando de NET-SNMP. En concreto, los dos parámetros empleados en la ejecución
de la orden snmpget anteriormente mostrada tienen el siguiente significado:
-v: Especifica la versión del protocolo a usar. Por defecto, se utiliza la versión 3.
-c: Especifica la comunidad.
Posteriormente se indica la dirección IP de la entidad SNMP a la que se dirige la petición, y por
último, el OID que se desea consultar.
Una vez aclarado el funcionamiento y objetivo de la orden anterior, procedemos a generar un
agente SNMPv1/2c con el fin de detallar el significado de las comunidades SNMP. Se utilizará la
herramienta snmpconf, aplicación que genera un fichero de salida, snmpd.conf, empleado por
el demonio snmpd para aplicar las políticas de acceso.
A continuación, se muestran los pasos seguidos para la configuración del agente SNMP v1/v2c
básico (Nota: con la opción –p lo crea en el directorio $HOME/.snmp del usuario):
ctm2x11@balbas:~> snmpconf -p
I can create the following types of configuration files for you.
Select the file type you wish to create:
(you can create more than one as you run this program)
1: snmpd.conf
2: snmp.conf
3: snmptrapd.conf
Other options: quit
Select File: 1
The configuration information which can be put into snmpd.conf is divided
into sections. Select a configuration section for snmpd.conf
that you wish to create:
1: Trap Destinations
2: System Information Setup
3: Access Control Setup
4: Extending the Agent
5: Monitor Various Aspects of the Running Host
6: Agent Operating Mode
Other options: finished
Select section: 3
Section: Access Control Setup
Description:
This section defines who is allowed to talk to your running
snmp agent.
Select from:
1: a SNMPv3 read-write user
2: a SNMPv3 read-only user
3: a SNMPv1/SNMPv2c read-only access community name
4: a SNMPv1/SNMPv2c read-write access community name
Other options: finished, list
Select section: 3
Configuring: rocommunity
Description:
a SNMPv1/SNMPv2c read-only access community name
arguments: community [default|hostname|network/bits] [oid]
The community name to add read-only access for: public
The hostname or network address to accept this community name from [RETURN for
all]: localhost
The OID that this community should be restricted to [RETURN for norestriction]:
Finished Output: rocommunity public localhost
Obtenemos así el fichero de configuración snmp en el directorio $HOME/.snmp, en el que se
ha detallado la creación de una comunidad de nombre public para SNMPv1/2c, accesible
únicamente desde localhost, y sobre la cual obtendremos acceso de sólo lectura sin restricción
alguna sobre ciertos OID´s de la MIB. A continuación lanzamos el agente SNMP desde un
terminal:
ctm2x11@balbas:~/.snmp> snmpd -f -C -c snmpd.conf localhost:10001
NET-SNMP version 5.4.1
Connection from UDP: [127.0.0.1]:35412
La última línea de la salida anterior surge tras realizar la petición al agente SNMP que se detalla
a continuación. Se nos indica la correcta comunicación entre el gestor y el agente SNMP,
describiéndose, el protocolo, IP y puerto a través del cual el gestor ha realizado la petición que
se detalla a continuación:
ctm2x11@balbas:~> snmpget -v1 -c public localhost:10001 system.sysUpTime.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (447) 0:00:04.47
Tras realizar la petición, se observa en la consola correspondiente a la ejecución del agente el
host y puerto del que se ha recibido dicha petición, que se corresponde con la IP de localhost,
única permitida en la configuración del agente. Cabe destacar que al intentar modificar un OID
de esta comunidad, como cabe de esperar al ser de solo lectura, obtenemos una negativa,
como se muestra a continuación:
ctm2x11@balbas:~> snmpset -v1 -c public localhost:10010 system.sysLocation.0 s
"Laboratorio de CTM II"
Error in packet.
Reason: (noSuchName) There is no such variable name in this MIB.
ctm2x11@balbas:~> snmpset -v2c -c public localhost:10010 system.sysLocation.0
s "Laboratorio de CTM II"
Error in packet.
Reason: noAccess
Una vez comprobadas, las virtudes y debilidades de la política de comunidades, daremos un
paso más y avanzaremos hacia los objetivos prefijados. Cabe destacar que la política de
comunidades, permite filtrar las peticiones por acceso de host, red o subred; sin embargo, esto
no deja de ser una carencia de seguridad, puesto que la información sensible que albergan las
MIB utilizadas por SNMP, no dejarían de ser accesibles por personas ajenas a nuestro control
que puedan cumplir en un momento determinado con las escasas restricciones impuestas. Se
realizará a continuación un análisis pormenorizado de USM y VACM, demostrando su
viabilidad, y describiendo como se han tratado de paliar las carencias de las políticas anteriores
descritas.
El fichero snmpd.conf (editado manualmente) sobre el que se han generado las pruebas
contiene lo siguiente:
# SECTION: Access Control Setup
# This section defines who is allowed to talk to your running snmp agent.
# SNMP v3
createUser ctm2x11 MD5 claveMD5 DES claveDES
rouser ctm2x11 priv -V system
#SNMP v1 y v2c
com2sec secrosystem
127.0.0.1/32
rosystem
com2sec secrwall
127.0.0.1/32
rwall
com2sec secrwsystem
127.0.0.1/32
rwsystem
group grouprosystem
v1
secrosystem
group grouprosystem
v2c
secrosystem
group grouprosystem
usm
secrosystem
group grouprwall
v1
secrwall
group grouprwall
v2c
secrwall
group grouprwall
usm
secrwall
group grouprwsystem
v1
secrwsystem
group grouprwsystem
v2c
secrwsystem
group grouprwsystem
usm
secrwsystem
view
all
included
.1
view
system included
system
access grouprwall
"" any noauth exact
all
access grouprosystem
"" any noauth exact
system
access grouprwsystem
"" any noauth exact
all
sysContact ctm2x11
sysName Asignatura de CTMII
all
none
system
none
none
none
Como se puede observar en el contenido del fichero, se define para SNMPv3 un usuario con
sus contraseñas de acceso, al que se le permite interrogar al agente SNMP instanciado. Por
otra parte para SNMPv1/2c, se mapean una serie de comunidades de acceso, a las que se les
define los accesos garantizados, lectura, escritura o ambos simultáneamente. Consultamos con
la comunidad rwall las variables system.sysName y snmp.snmpInPkts.0. El resultado esperado
es que ambas puedan ser leídas y escritas.
ctm2x11@balbas:~> snmpget -v2c -c rwall localhost:10008 system.sysName.0
SNMPv2-MIB::sysName.0 = STRING: Asignatura de CTMII
ctm2x11@balbas:~> snmpget -v2c -c rwall localhost:10008 snmp.snmpInPkts.0
SNMPv2-MIB::snmpInPkts.0 = Counter32: 3
ctm2x11@balbas:~> snmpset -v2c -c rwall localhost:10008 system.sysLocation.0 s
"Laboratorio de CTM II"
SNMPv2-MIB::sysLocation.0 = STRING: Laboratorio de CTM II
Consultamos con la comunidad rosystem las variables system.sysName y snmp.snmpInPkts.0.
El resultado esperado es que system.sysName pueda ser leída, y que snmp.snmpInPkts.0 no.
Además, ninguna de las dos debe poderse escribir.
ctm2x11@balbas:~> snmpget -v2c -c rosystem localhost:10008 system.sysName.0
SNMPv2-MIB::sysName.0 = STRING: Asignatura de CTMII
ctm2x11@balbas:~> snmpget -v2c -c rosystem localhost:10008 snmp.snmpInPkts.0
SNMPv2-MIB::snmpInPkts.0 = No Such Object available on this agent at this OID
ctm2x11@balbas:~> snmpset -v2c -c rosystem localhost:10008
system.sysLocation.0 s "Laboratorio de CTM II"
Error in packet.
Reason: noAccess
Consultamos con la comunidad rwsystem las variables system.sysName y snmp.snmpInPkts.0.
El resultado esperado es que ambas variables puedan ser leídas y que las del grupo system
puedan ser escritas.
ctm2x11@balbas:~> snmpget -v2c -c rwsystem localhost:10008 system.sysName.0
SNMPv2-MIB::sysName.0 = STRING: Asignatura de CTMII
ctm2x11@balbas:~> snmpget -v2c -c rwsystem localhost:10008 snmp.snmpInPkts.0
SNMPv2-MIB::snmpInPkts.0 = No Such Object available on this agent at this OID
ctm2x11@balbas:~> snmpset -v2c -c rwsystem localhost:10008
system.sysLocation.0 s "Laboratorio de CTM II"
SNMPv2-MIB::sysLocation.0 = STRING: Laboratorio de CTM II
Consultamos con el usuario ctm2x11 de la versión 3. Este usuario tiene permisos de sólo
lectura sobre la vista system.
ctm2x11@balbas:~> snmpget -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES
-X claveDES localhost:10008 system.sysName.0
SNMPv2-MIB::sysName.0 = STRING: Asignatura de CTMII
ctm2x11@balbas:~> snmpget -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES
-X claveDES localhost:10008 snmp.snmpInPkts.0
SNMPv2-MIB::snmpInPkts.0 = No Such Object available on this agent at this OID
ctm2x11@balbas:~> snmpset -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES
-X claveDES localhost:10008 system.sysLocation.0 s "Laboratorio de CTM II"
Error in packet.
Reason: noAccess
Por último destacar dos órdenes que permiten interactuar con el agente y reescribir
configuraciones de USM y VACM, sin necesidad de detener el agente:
• SNMPUSM: Permite realizar un mantenimiento simple de los usuarios de un agente SNMP,
mediante la manipulación de la tabla USM del agente. El usuario que lo ejecuta, necesita
poseer permisos de escritura en la tabla usmUserTable de la MIB del agente. Este comando
permite realizar una modificación en la tabla USM del agente, sin necesidad de detener el
mismo para añadir, modificar o eliminar usuarios. A continuación se muestras dos ejemplos de
creación y clonación de un usuario.
ctm2x11@balbas:~> snmpusm -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES
-X claveDES localhost:10008 create nuevo
User successfully created.
ctm2x11@balbas:~> snmpusm -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES
-X claveDES localhost:10008 cloneFrom nuevo ctm2x11
User successfully cloned.
• SNMPVACM: Permite realizar un mantenimiento simple de las tablas VACM de un agente
SNMP. Su utilidad reside en que no es necesario detener el agente SNMP para realizar
operaciones. A continuación se muestra el uso de este comando para la creación de una nueva
entrada de la lista de acceso:
ctm2x11@balbas:~> snmpvacm -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x
DES -X claveDES localhost:10008 createSec2Group 3 nuevo nombregrupo
Sec2group successfully created.
ctm2x11@balbas:~> snmpvacm -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x
DES -X claveDES localhost:10008 createView vista all ""
View successfully created.
ctm2x11@balbas:~> snmpvacm -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x
DES -X claveDES localhost:10008 createAccess nombregrupo 3 3 1 vista none none
Access successfully created.
CONCLUSIONES
SNMP es un protocolo sencillo pero potente, permite monitorizar los recursos de red sin
sobrecargar de sobremanera los dispositivos que intervienen en su ámbito de aplicación. No
obstante, las sucesivas revisiones que se han llevado a cabo y las venideras, incrementarán la
complejidad y las posibilidades de esta filosofía de gestión, aunque ello supondrá obviamente
un aumento del consumo de recursos. Por otra parte, son necesarias mejoras, como se ha ido
demostrando, puesto que la definición de SNMP más primitiva carecía de mecanismos de
seguridad, y muchos de los avances en las revisiones siguientes, no fueron capaces de paliar
completamente el problema existente. SNMPv3 ha supuesto un gran avance en cuanto a
privacidad y seguridad se refiere, añadiendo posibilidades de cifrado, autentificación unitaria
de usuarios, modelos de vistas definidas exhaustivamente y de forma individual, normalizando
y paliando las carencias anteriores.
A nivel personal, aunque nuestro aprendizaje de SNMP resulte un tanto básico, se torna
interesante comprender la problemática de la gestión integrada y lo complicado de encontrar
soluciones simples, pero eficientes y robustas. Como grupo con características un tanto
particulares, destacar el esfuerzo que hemos tenido que realizar para trabajar en horas fuera
del horario lectivo, con el fin de equiparar nuestros avances y ritmo de trabajo con el de
nuestros compañeros. Aunque la práctica una vez realizada pueda parecer liviana y capaz de
ser resumida en unos cuantos comandos, la documentación, el esfuerzo de aprendizaje y
comprensión de lo desconocido, hasta alcanzar una visión global del problema, su dimensión y
las soluciones que se han tomado por parte de aquellos que trabajan en el diseño de
soluciones como SNMP, compensa con creces lo liviano y escueto del informe y la
presentación.
BIBLIOGRAFÍA
[1]
[2]
[3]
[4]
[5]
http://es.wikipedia.org/wiki/SNMP
http://www.ramonmillan.com/tutoriales/snmpv3.php
http://www.net-snmp.org/
http://www.mg-soft.com/index.html
Páginas de manual incluidas en la distribución del sistema operativo, orden man.
Descargar