El autor seleccionó el lnternet Archive para recibir una donación como parte del programa Write for DOnations.
Ser un administrador de sistemas implica principalmente recopilar información exacta acerca de servidores e infraestructuras. Existen diversas herramientas y opciones para recopilar y procesar este tipo de información. Muchas de estas herramientas se compilan con una tecnología denominada SNMP.
SNMP significa “protocolo simple de administración de redes”. Es una alternativa a través de la cual los servidores pueden compartir información sobre su estado actual y, a la vez, un canal por el cual un administrador puede modificar valores predefinidos. Aunque el protocolo es ligero, la complejidad de la estructura de los programas que lo implementan puede aumentar rápidamente. Si desea obtener más información sobre los aspectos básicos del protocolo SNMP, consulte nuestro artículo Introducción al SNMP.
En esta guía, configurará las herramientas para comunicarse mediante SNMP. Usará dos servidores de Ubuntu 18.04. para la demostración. Uno tendrá el administrador de SNMP, que se comunicará con el agente para implementar dispositivos de red. Este se citará como servidor administrador. El otro servidor tendrá el agente SNMP, que cumplirá las órdenes del servidor administrador. Este se citará como servidor agente. Podría optar por instalar el agente en la máquina administradora también, pero mantenerlos separados hace que sea más sencillo demostrar la funcionalidad que ofrece cada componente.
Para este tutorial, necesitará lo siguiente:
ufw
.Puede empezar por conocer la manera en que se puede implementar el SNMP en un sistema instalando el demonio y las herramientas en sus servidores de Ubuntu.
Desde su máquina local, inicie sesión en el servidor administrador como usuario no root:
- ssh your_username@manager_server_ip_address
Actualice el índice de paquetes del administrador de paquetes APT:
- sudo apt update
A continuación, instale el software de SNMP:
- sudo apt install snmp snmp-mibs-downloader
El paquete snmp
ofrece un conjunto de herramientas de líneas de comando para emitir solicitudes de SNMP a los agentes. El paquete snmp-mibs-downloader
ayudará a instalar y administrar los archivos de base de información gestionada (MIB), que realizan un seguimiento de los objetos de red.
Luego, abra una nueva terminal en su máquina local e inicie sesión en el servidor agente:
- ssh your_username@agent_server_ip_address
En el servidor agente, actualice el índice de paquetes:
- sudo apt update
Luego, instale el demonio SNMP.
- sudo apt install snmpd
Tenga en cuenta que no necesita el paquete snmp-mibs-downloader
, debido a que el servidor agente no administrará archivos MIB.
Ahora que instaló estos componentes, configurará su servidor de administrador.
Como se mencionó anteriormente, la mayor parte de la carga de trabajo tiene lugar en el servidor agente, de manera que su configuración en el servidor administrador tendrá menos participación. Solo debe modificar un archivo para asegurarse de que las herramientas SNMP puedan usar los datos MIB adicionales que instaló.
Desde el servidor administrador, abra el archivo /etc/snmp/snmp.conf
en el editor de texto con privilegios sudo. En este tutorial, se usará nano
:
- sudo nano /etc/snmp/snmp.conf
En este archivo, existen algunos comentarios y una sola línea sin ellos. Para que el administrador pueda importar los archivos MIB, ingrese un comentario en la línea mibs
:
# As the snmp packages come without MIB files due to license reasons, loading
# of MIBs is disabled by default. If you added the MIBs you can reenable
# loading them by commenting out the following line.
#mibs :
Guarde y cierre snmp.conf
; para ello, presione CTRL+X
, Y
y luego INTRO
si usa nano
.
De esta manera, terminó de configurar el servidor administrador, pero aun debe usarlo para configurar el servidor agente, lo cual sucederá en el siguiente paso.
Como verdadero sistema servidor-cliente, el servidor agente no tiene ninguna de las herramientas externas necesarias para configurar sus propios ajustes de SNMP. Puede modificar algunos archivos de configuración para realizar algunos cambios, pero la mayoría de los que son necesarios se harán mediante la conexión al servidor agente del servidor administrador.
En este tutorial, usará la versión 3 del protocolo SNMP. A diferencia de las versiones 1 y 2 de SNMP, en SNMPv3 cada mensaje contiene parámetros de seguridad que están codificados. En este paso, configurará reglas de autenticación y control de acceso del SNMPv3.
Para comenzar, en el servidor agente, abra el archivo de configuración del demonio con privilegios sudo:
- sudo nano /etc/snmp/snmpd.conf
Dentro de este, deberá realizar algunos cambios. Estos se utilizarán principalmente para iniciar la configuración, de modo que pueda administrarla desde su otro servidor.
Primero, debe cambiar la directiva agentAddress
. Por el momento, está configurada para permitir solo las conexiones que se originan desde la computadora local. Deberá excluir la línea actual y quitar el comentario de la que está debajo de ella, que es la que permite todas las conexiones.
# Listen for connections from the local system only
#agentAddress udp:127.0.0.1:161
# Listen for connections on all interfaces (both IPv4 *and* IPv6)
agentAddress udp:161,udp6:[::1]:161
Nota: Debido a que permitir todas las conexiones como esta no es la mejor práctica de seguridad, lo ideal es asegurarse de volver a bloquearlo una vez que haya finalizado el arranque.
A continuación, introducirá temporalmente una línea createUser
. Lo normal es que estas directivas no se guarden en este archivo; volverá a eliminarlo en un momento.
El usuario que creará se llamará bootstrap y se usará como una plantilla en la cual creará su primer usuario real. Los paquetes SNMP lo hacen por medio de un proceso de clonación de las propiedades del usuario.
Cuando defina un usuario nuevo, debe especificar el tipo de autenticación (MD5 o SHA) y también suministrar una contraseña que tenga al menos ocho caracteres. Si desea usar cifrado para la transferencia, como lo hará en este tutorial, también debe especificar el protocolo de privacidad (DES o AES) y, opcionalmente, una frase de contraseña del protocolo de privacidad. Si no proporciona una frase de contraseña de protocolo de privacidad, la frase de contraseña de autenticación se usará para el protocolo de privacidad también.
Añada esta línea createUser
al final del archivo:
...
createUser bootstrap MD5 temp_password DES
Ahora que ya especificó un usuario nuevo, puede configurar el nivel de acceso que este tendrá. A través de este tutorial, configurará el usuario bootstrap y también el usuario nuevo que creará, llamado demo. Les permitirá acceso de lectura y escritura mediante la directiva rwuser
(la alternativa es rouser
para el acceso de solo lectura).
Además, también impondrá el uso de cifrado especificando priv
después de su usuario. Si quisiera restringir el usuario a una parte específica del MIB, podría especificar el identificador de objetos (OID) de mayor nivel al cual el usuario debería tener acceso al final de la línea.
A los efectos de este tutorial, ambas líneas serán como las siguientes:
...
rwuser bootstrap priv
rwuser demo priv
Una vez que termine de hacer estos cambios, guarde y cierre el archivo.
Para implementar estos cambios, reinicie el servicio snmpd
en el servidor agente:
- sudo systemctl restart snmpd
El demonio SNMP escuchará conexiones en el puerto :161
. Configure UFW para permitir conexiones del servidor administrador a este puerto:
- sudo ufw allow from manager_server_ip_address to any port 161
Puede obtener más información sobre UFW en Cómo configurar un firewall con UFW en Ubuntu 18.04.
Ahora que el servidor agente ya está configurado, podrá conectar el servidor agente del servidor administrador para verificar la conexión.
En este paso, probará para asegurarse de que pueda establecer conexión con la cuenta de bootstrap en el servidor agente. No obstante, antes de esto, en este tutorial verá la estructura general del envío de un comando SNMP.
Cuando use el conjunto de herramientas que se incluye en el paquete snmp
(el conjunto de software net-snmp
), existen algunos patrones en la manera que debe invocar los comandos. Lo primero que debe hacer es autenticarse con el demonio SNMP con el que desea comunicarse. Esto generalmente implica proporcionar cierta información. La más común es la siguiente:
-v
: este indicador se usa para especificar la versión del protocolo SNMP que le gustaría usar. En este tutorial, se usará la versión 3.-c
: este indicador se usará si usa cadenas de comunidad tipo SNMP v1 o v2 para la autenticación. Debido a que usará autenticación basada en el usuario tipo v3, no necesita hacerlo.-u
: este parámetro se usa para especificar el nombre de usuario con el cual se desea autenticarse. Para leer o modificar algo con SNMP, debe autenticarlo con un nombre de usuario conocido.-l
: esto se usa para especificar el nivel de seguridad con el que establecerá conexión. Los posibles valores son noAuthNoPriv
sin autenticación ni cifrado, authNoPriv
para la autenticación sin cifrado y authPriv
para la autenticación y el cifrado. Debe configurar el nombre de usuario que usará para operar en el nivel de seguridad que especifique; de lo contrario, no se realizará la autenticación.-a
: este parámetro se usa para especificar el protocolo de autenticación que se usa. Los posibles valores son MD5
o SHA
. Esto debe coincidir con la información que se especificó cuando se creó el usuario.-x
: este parámetro se usa para especificar el protocolo de cifrado que se usa. Los posibles valores son DES
o AES
. Esto debe coincidir con la información que se especificó cuando se creó el usuario. Esto es necesario siempre que figura priv
después de la especificación de privilegios del usuario, lo cual hace obligatorio el cifrado.-A
: esto se usa para indicar la contraseña de autenticación que se especificó cuando se creó el usuario.-X
: esta es la frase de contraseña de cifrado que se especificó cuando se creó el usuario. Si no se especificó ninguno, pero se indicó un algoritmo de cifrado, se usará la contraseña de autenticación. Esto se necesita cuando se indica el parámetro -x
o cuando después de la especificación de privilegio de un usuario se incluye priv
, que exige cifrado.Con esta información, puede crear sus comandos. Según la manera en la que configuró el usuario bootstrap, los comandos que se usarán con esa cuenta tendrán el siguiente aspecto:
snmp_command -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host snmp_sub_command_or_options
Desde el servidor administrador, pruebe para asegurarse de que esté disponible su cuenta de bootstrap. Escriba lo siguiente para mostrar la información de sistema del servidor agente:
- snmpget -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address 1.3.6.1.2.1.1.1.0
La cadena 1.3.6.1.2.1.1.1.0
es el OID que permite ver la información del sistema. Mostrará el resultado uname -a
en el sistema remoto.
Esto generará el siguiente resultado:
OutputSNMPv2-MIB::sysDescr.0 = STRING: Linux agent 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64
Ahora que verificó que puede autenticarse en el servidor cuando ejecuta el demonio SNMP, podrá seguir creando su cuenta de usuario normal.
Aunque especificó los privilegios de la cuenta de usuario demo en el archivo snmpd.conf
, aún no creó este usuario en realidad. En este paso, usará el usuario bootstrap como una plantilla para su nuevo usuario. Para ello, usará la herramienta snmpusm
, que se utiliza para la administración de usuarios.
En el servidor administrador, puede crear el usuario desde la plantilla con la herramienta snmpusm
y la siguiente sintaxis general:
snmpusm authentication_info agent_server_ip_address create new_user existing_user
Con lo que se conoce sobre los indicadores de autenticación que necesita para emplear, y aprovechando la cuenta de usuario que ya tiene (bootstrap), puede crear un usuario que tenga los privilegios de usuario que ya definió (prueba).
El comando tendrá el siguiente aspecto:
- snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address create demo bootstrap
Recibirá el siguiente mensaje:
OutputUser successfully created.
Ahora tiene un usuario plenamente activo llamado demo en su servidor agente. No obstante, todavía usa la misma información de autenticación que la cuenta bootstrap. Para aumentar la seguridad, puede cambiar la contraseña por otra. Esta vez, usará la cuenta demo para la autenticación. Recuerde que las contraseñas deben tener ocho caracteres como mínimo:
- snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address passwd temp_password new_password
Como respuesta, recibirá el siguiente mensaje:
OutputSNMPv3 Key(s) successfully changed.
Puede probar sus credenciales y contraseña nuevas preguntando al servidor agente por la cantidad de tiempo que hace que el servicio SNMP se encuentra en ejecución. Usará el comando snmpget
para obtener un solo valor del servidor agente.
Esta vez, aproveche las definiciones MIB adicionales que descargó para solicitar el valor por nombre en lugar del ID numérico del OID.
- snmpget -u demo -l authPriv -a MD5 -x DES -A new_password -X new_password agent_server_ip_address sysUpTime.0
Obtendrá un valor que representa la última vez que se reinició el demonio SNMP remoto:
OutputDISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (53309) 0:08:53.09
Ahora dispone de una cuenta de usuario en funcionamiento llamada demo. En el siguiente paso, simplificará el trabajo con los comandos SNMP si configura el cliente.
Es probable que ya haya notado a esta altura que los datos de autenticación de todos los comandos SNMP son bastante estáticos con cada respuesta. En vez de escribirlos cada vez, puede crear un archivo de configuración de cliente que contenga las credenciales con las que establece conexión.
El archivo de configuración de cliente se puede colocar en dos lugares distintos según la amplitud con la que quiera compartirlo.
Si desea compartir sus credenciales de inicio de sesión con algún usuario válido en su máquina de administración, puede disponer sus datos de configuración en el archivo snmp.conf
global del servidor administrador. Será necesario que abra ese archivo con privilegios sudo:
- sudo nano /etc/snmp/snmp.conf
No obstante, si desea definir las credenciales de autenticación solo para su usuario, puede crear un directorio .snmp
oculto en el directorio principal de su usuario en el servidor administrador y crear el archivo allí:
- mkdir ~/.snmp
- nano ~/.snmp/snmp.conf
Independientemente de su decisión acerca de dónde ubicar su configuración, el contenido será el mismo.
Los comandos que usará para la autenticación se encuentran en la siguiente tabla. En la columna derecha, puede ver los nombres de directivas que se utilizan para establecer esos datos de configuración dentro del archivo snmp.conf
:
Indicador de comandos | Descripción | Directiva snmp.conf traducida |
---|---|---|
-u username |
Nombre de usuario de SNMPv3 para la autenticación. | defSecurityName username |
-l authPriv |
Nivel de seguridad para la autenticación. | defSecurityLevel authPriv |
-a MD5 |
El protocolo de autenticación que se usará. | defAuthType MD5 |
-x DES |
Protocolo de privacidad (cifrado) que se usará. | defPrivType DES |
-Una passphrase |
Contraseña de autenticación para el nombre de usuario proporcionado. | defAuthPassphrase passphrase |
-X passphrase |
Frase de contraseña de privacidad del nombre de usuario proporcionado. | defPrivPassphrase passphrase |
Con esta información, puede crear un archivo snmp.conf
correspondiente. A los efectos de esta guía, tendrá el siguiente aspecto:
defSecurityName demo
defSecurityLevel authPriv
defAuthType MD5
defPrivType DES
defAuthPassphrase new_password
defPrivPassphrase new_password
Cuando termine, guarde y cierre el archivo.
Ahora, podrá emitir comandos sin proporcionar los datos de autenticación. Solo necesitará el comando SNMP, el host y los argumentos del comando.
En vez de escribir lo siguiente:
- snmpget -u demo -l authPriv -a MD5 -x DES -A new_password -X new_password agent_server_ip_address sysUpTime.0
Puede escribir esto:
- snmpget agent_server_ip_address sysUpTime.0
Como puede ver, esto reduce significativamente la cantidad de información que debe proporcionar en cada solicitud. A continuación, eliminará la cuenta bootstrap para reforzar la seguridad de la red.
Ahora que configuró su cuenta normal de manera correcta, podrá eliminar la cuenta bootstrap insegura.
En el servidor agente, abra el archivo /etc/snmp/snmpd.conf
de nuevo con privilegios sudo.
- sudo nano /etc/snmp/snmpd.conf
Encuentre y excluya (o elimine) las dos líneas que agregó anteriormente, que hacen referencia al usuario bootstrap:
...
#createUser bootstrap MD5 temp_password DES
#rwuser bootstrap priv
...
Guarde y cierre el archivo.
Ahora, reinicie el demonio SNMP:
- sudo systemctl restart snmpd
Esto cumplirá con la recomendación de que no haya directivas createUser
en el archivo snmpd.conf
normal. También eliminará privilegios de ese usuario temporal.
Si desea eliminar por completo el usuario bootstrap de usmUserTable
, puede hacerlo emitiendo este comando del servidor administrador:
- snmpusm agent_server_ip_address delete bootstrap
Recibirá la siguiente respuesta:
OutputUser successfully deleted.
A esta altura, habrá definido completamente una configuración cliente-servidor que se puede comunicar de manera segura con el protocolo SNMP. Ahora podrá agregar demonios adicionales en otros hosts y configurar el acceso a la cuenta en toda la infraestructura.
Si desea obtener más información, puede consultar nuestro tutorial Cómo usar el conjunto de herramientas Net-SNMP para administrar y supervisar servidores para conocer las herramientas SNMP, la forma de usarlas a fin de obtener valores uno por uno o en conjunto y la forma de modificar datos.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!