Asegurar SNMP

 

Breve Introducción :

SNMP es un protocolo de administración de red que permite realizar consultas a los dispositivos gestionados.
En la mayoría de dispositivos de red, por muy baja que sea la gama, si son gestionables, seguramente son consultables por snmp. Evidentemente, hoy en día es consultable por snmp prácticamente cualquier sistema operativo y hardware gestionable  :
snmp

Firewalls, routers, switches, sistemas operativos windows, linux, unix, mac etc

Típicamente se suele consultar por snmp el tráfico de las interfaces de red, la cpu, memoria etc
El propósito de este post no es explicar snmp, sino ver un caso específico de configuración segura.

Aseguremos que ip’s pueden realizar consultas snmp y para ser más estrictos, que consultas snmp vamos a responder.

Veremos un ejemplo sobre un dispositivo Cisco, para ello plantearemos un escenario:

Queremos que un proveedor externo que nos presta un servicio de monitorización 24×7, pueda verificar que  nuestros routers tienen sus sesiones BGP establecidas y que nuestras interfaces de red están con link UP.
El problema reside en que si exponemos todo snmp de nuestro dispositivo, este proveedor externo puede hacernos daño en la cpu del dispositivo. Además evitaremos la exposición de información sensible que  nos interesa bloquear.
Esto es, si consulta por ejemplo toda la mib BGP4-MIB, nuestro router le devolverá muchísimos datos que a su vez le costará procesar y lo que tendremos es al dispositivo con la cpu muy alta durante las consultas.

Para esto, la siguiente configuración permitirá consultar el estado únicamente de la sesión bgp establecida contra dos peers bgp sin recorrer toda la mib ( snmpwalk )
La MIB es BGP4-MIB ( árbol 1.3.6.1.2.1.15 ) y la oid es bgpPeerState ( oid 1.3.6.1.2.1.15.3.1.2 )

Los resultados posibles de consultar toda la oid bgpPeerState son :

Values
1 : idle
2 : connect 
3 : active 
4 : opensent 
5 : openconfirm
6 : established

Nos interesa que nuestro proveedor de monitorización obtenga como respuesta un 6 ( bgp established ), sino que genere una alarma.

Consulta snmp de que las interfaces tienen link:

La mib es IF-MIB y la OID es ifOperStatus ( 1.3.6.1.2.1.2.2.1.8 ) cuyas posibles respuestas son :

1 : up 
2 : down 
3 : testing 
4 : unknown 
5 : dormant 
6 : notPresent 
7 : lowerLayerDown

Nos interesa que ifOperStatus de como resultado igual 1 ( up ), sino que lo traten como una alarma y actúen para solucionarlo y/o avisarnos.

Explicación de los valores de configuración:

ip del peer bgp para eBGP = x.x.x.x
ip del peer bgp para iBGP = y.y.y.y
ip que puede consultar por snmp = z.z.z.z
community snmp ( secreto snmp ) = lo-que-tengas-como-community
access-list 81 = filtro de ip's que pueden consultar por snmp
bgpPeerEntry.2 = (1.3.6.1.2.1.15.3.1 ).2 = bgpPeerState ( 1.3.6.1.2.1.15.3.1.2 )

La configuración a aplicar ( podemos introducir la oid’s numéricas completamente )

access-list 81 remark hosts con filtro permitidos para snmp
access-list 81 permit z.z.z.z
snmp-server view filtrado-snmp bgpPeerEntry.2.x.x.x.x included
snmp-server view filtrado-snmp bgpPeerEntry.2.y.y.y.y included
snmp-server view filtrado-snmp ifOperStatus included
snmp-server community lo-que-tengas-como-community view filtrado-snmp RO 81
Comprobación:
[root@cacti~]# snmpwalk -v 2c -c <community-snmp> <ip-equipo-a-consultar>
IF-MIB::ifOperStatus.1 = INTEGER: up(1)
IF-MIB::ifOperStatus.2 = INTEGER: up(1)
IF-MIB::ifOperStatus.3 = INTEGER: up(1)
IF-MIB::ifOperStatus.4 = INTEGER: up(1)
IF-MIB::ifOperStatus.5 = INTEGER: up(1)
IF-MIB::ifOperStatus.6 = INTEGER: up(1)
IF-MIB::ifOperStatus.7 = INTEGER: up(1)
IF-MIB::ifOperStatus.8 = INTEGER: up(1)
IF-MIB::ifOperStatus.9 = INTEGER: up(1)
IF-MIB::ifOperStatus.10 = INTEGER: up(1)
IF-MIB::ifOperStatus.11 = INTEGER: up(1)
SNMPv2-SMI::mib-2.15.3.1.2.x.x.x.x = INTEGER: 6
SNMPv2-SMI::mib-2.15.3.1.2.y.y.y.y = INTEGER: 6
SNMPv2-SMI::mib-2.15.3.1.2.y.y.y.y = 
No more variables left in this MIB View (It is past the end of the MIB tree)
[root@cacti~]#

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *