Configurar Net-SNMP en Kali Linux

  

https://www.onlinetis.com/es/ 

Configurar Net-SNMP en Kali Linux

Entiendo que quieres configurar o utilizar Net-SNMP en Kali Linux. Esta es la suite de herramientas estándar para manejar el protocolo SNMP (Simple Network Management Protocol), muy utilizada para la gestión y monitorización de redes.

Aquí tienes una guía rápida para ponerlo en marcha:


1. Instalación

Por lo general, Kali no lo trae instalado por defecto en su versión mínima. Puedes instalar el demonio (agente) y las utilidades de cliente con este comando:

Bash
sudo apt update && sudo apt install snmp snmpd snmp-mibs-downloader
  • snmp: Herramientas de cliente (como snmpwalk, snmpget).

  • snmpd: El demonio/agente que responde a las peticiones.

  • snmp-mibs-downloader: Descarga las MIBs (Management Information Bases) para que los resultados sean legibles y no solo números (OIDs).


2. Configuración Básica

El archivo principal de configuración del agente se encuentra en /etc/snmp/snmpd.conf.

  1. Hacer una copia de seguridad:

    sudo cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak

  2. Editar el archivo:

    sudo nano /etc/snmp/snmpd.conf

Para una configuración de prueba rápida (no recomendada para entornos de producción por seguridad), busca la línea de agentAddress y asegúrate de que escuche en todas las interfaces o en la IP que necesites:

Bash
# Escuchar en todas las interfaces (UDP port 161)
agentAddress udp:161

Define una comunidad de lectura (ejemplo: publico):

Bash
rocommunity publico default

3. Comandos Útiles en Kali

Una vez configurado y reiniciado el servicio (sudo systemctl restart snmpd), puedes usar estas herramientas para auditar o consultar dispositivos:

snmpwalk

Se usa para "recorrer" el árbol de información de un dispositivo. Es la herramienta favorita para enumeración en auditorías de seguridad.

  • Sintaxis: snmpwalk -v [versión] -c [comunidad] [IP]

  • Ejemplo: snmpwalk -v 2c -c public 192.168.1.50

snmpget

Si conoces el OID (Object Identifier) específico que quieres consultar.

  • Ejemplo: snmpget -v 2c -c public 192.168.1.50 sysUpTime.0


4. Consideraciones de Seguridad

Si estás usando Net-SNMP en Kali para pentesting, recuerda que:

  • SNMP v1 y v2c envían la comunidad (contraseña) en texto plano.

  • Muchos dispositivos antiguos mantienen la comunidad public por defecto.

  • SNMP v3 es la opción segura, ya que permite autenticación y cifrado (SHA/AES).


 

Configurar SNMPv3 es la forma correcta de hacerlo hoy en día, ya que añade autenticación (usuario/contraseña) y cifrado, evitando que cualquiera pueda "espiar" el tráfico de tu red.

Sigue estos pasos para crear un usuario seguro en tu agente Net-SNMP:


Creación de un usuario SNMPv3

Para este ejemplo, crearemos un usuario llamado seguro_user con los siguientes parámetros:

  • Algoritmo de Autenticación: SHA (contraseña: auth_password)

  • Algoritmo de Cifrado: AES (contraseña: priv_password)

1. Detener el servicio

Es fundamental detener el demonio antes de añadir usuarios manualmente para que los cambios se guarden correctamente.

Bash
sudo systemctl stop snmpd

2. Crear el usuario

Utilizaremos el comando net-snmp-config. Este comando añade automáticamente las líneas necesarias a tus archivos de configuración y genera las claves localizadas.

Bash
sudo net-snmp-config --create-snmpv3-user -a SHA -A auth_password -x AES -X priv_password seguro_user

3. Iniciar el servicio

Ahora vuelve a levantar el agente:

Bash
sudo systemctl start snmpd

Cómo realizar la consulta (Cliente)

A diferencia de las versiones anteriores, ahora el comando es un poco más largo porque debemos incluir las credenciales:

Bash
snmpwalk -v3 -l authPriv -u seguro_user -a SHA -A auth_password -x AES -X priv_password localhost

Desglose de los parámetros:

  • -v3: Especifica la versión 3.

  • -l authPriv: Nivel de seguridad (Autenticación y Privacidad/Cifrado).

  • -u seguro_user: El nombre de usuario.

  • -a SHA -A auth_password: Protocolo y contraseña de autenticación.

  • -x AES -X priv_password: Protocolo y contraseña de cifrado (privacidad).


Tip de Seguridad en Kali

Si estás auditando un equipo remoto que sospechas que tiene SNMPv3, recuerda que ya no puedes simplemente "adivinar" la comunidad public. Necesitarás herramientas de fuerza bruta como onesixtyone o hydra enfocadas a usuarios, aunque lo ideal es siempre configurar el acceso basado en el principio de menor privilegio.

 

Aquí tienes un script en Bash sencillo pero potente. Este script te permite escanear una lista de direcciones IP (o un rango) utilizando las credenciales de SNMPv3 que configuramos, extrayendo información clave como el nombre del sistema, la descripción y el tiempo de actividad (uptime).


Script: check_snmpv3.sh

Copia este código en un archivo, por ejemplo monitor_red.sh:

Bash
#!/bin/bash

# --- CONFIGURACIÓN ---
USER="seguro_user"
AUTH_PASS="auth_password"
PRIV_PASS="priv_password"
AUTH_PROTO="SHA"
PRIV_PROTO="AES"
SEC_LEVEL="authPriv"

# Lista de IPs a consultar (puedes añadir más separadas por espacio)
TARGETS=("127.0.0.1" "192.168.1.50" "192.168.1.60")

echo "-------------------------------------------------------"
echo " Reporte de Inventario SNMPv3 - $(date)"
echo "-------------------------------------------------------"

for IP in "${TARGETS[@]}"; do
    echo "[+] Consultando: $IP..."
    
    # Ejecutamos snmpget para obtener datos básicos
    # sysDescr.0, sysName.0, sysUpTime.0
    RESULT=$(snmpget -v3 -l $SEC_LEVEL -u $USER -a $AUTH_PROTO -A $AUTH_PASS \
             -x $PRIV_PROTO -X $PRIV_PASS $IP \
             sysName.0 sysUpTime.0 2>/dev/null)

    if [ $? -eq 0 ]; then
        echo "    $RESULT"
    else
        echo "    [!] Error: No se pudo conectar o credenciales inválidas."
    fi
    echo "-------------------------------------------------------"
done

Cómo usarlo

  1. Dale permisos de ejecución:

    Bash
    chmod +x monitor_red.sh
    
  2. Ejecútalo:

    Bash
    ./monitor_red.sh
    

¿Qué hace exactamente este script?

  • Automatización: Evita que tengas que escribir todos los parámetros de seguridad (-l, -a, -x, etc.) cada vez.

  • Manejo de errores: Si un dispositivo está caído o las contraseñas no coinciden, te avisará con un mensaje de error limpio en lugar de llenar la pantalla con fallos técnicos.

  • Escalabilidad: Solo tienes que añadir las IPs de tus servidores o routers en la variable TARGETS.


Un pequeño consejo "pro":

Si planeas usar esto de forma masiva en Kali, te recomiendo instalar nmap. Puedes usar nmap para descubrir qué dispositivos tienen el puerto UDP 161 abierto antes de lanzar el script:

Bash
sudo nmap -sU -p 161 192.168.1.0/24

 

Convertir la salida en un archivo CSV es la mejor forma de documentar una auditoría o llevar un control de inventario profesional en Kali Linux.

Aquí tienes la versión evolucionada del script. He añadido una cabecera para las columnas y lógica para separar los datos por comas, lo que te permitirá abrirlo directamente con Excel, LibreOffice Calc o Google Sheets.


Script: snmp_to_csv.sh

Bash
#!/bin/bash

# --- CONFIGURACIÓN DE CREDENCIALES ---
USER="seguro_user"
AUTH_PASS="auth_password"
PRIV_PASS="priv_password"
AUTH_PROTO="SHA"
PRIV_PROTO="AES"
SEC_LEVEL="authPriv"

# Archivo de salida
OUTPUT_FILE="reporte_snmp.csv"

# Lista de IPs a consultar
TARGETS=("127.0.0.1" "192.168.1.50" "192.168.1.60")

# 1. Crear cabecera del CSV
echo "IP,Nombre_Sistema,Uptime,Estado" > $OUTPUT_FILE

echo "[*] Iniciando escaneo y exportación a $OUTPUT_FILE..."

for IP in "${TARGETS[@]}"; do
    # Consultar Nombre (sysName) y Uptime (sysUpTime)
    # Usamos -O qv para obtener solo el valor, sin etiquetas extra de la MIB
    NAME=$(snmpget -v3 -l $SEC_LEVEL -u $USER -a $AUTH_PROTO -A $AUTH_PASS -x $PRIV_PROTO -X $PRIV_PASS -O qv $IP sysName.0 2>/dev/null)
    UPTIME=$(snmpget -v3 -l $SEC_LEVEL -u $USER -a $AUTH_PROTO -A $AUTH_PASS -x $PRIV_PROTO -X $PRIV_PASS -O qv $IP sysUpTime.0 2>/dev/null)

    if [ $? -eq 0 ]; then
        # Limpiar posibles comillas o espacios extras
        NAME=$(echo $NAME | tr -d '"')
        echo "$IP,$NAME,$UPTIME,Activo" >> $OUTPUT_FILE
        echo "[+] $IP: OK"
    else
        echo "$IP,N/A,N/A,Error/Offline" >> $OUTPUT_FILE
        echo "[-] $IP: Fallo de conexión"
    fi
done

echo "-------------------------------------------------------"
echo "[!] Proceso finalizado. Archivo guardado como: $OUTPUT_FILE"

Mejoras clave en esta versión:

  • Parámetro -O qv: Este es un "truco" de Net-SNMP muy útil. Significa Quick Values. Elimina el nombre del OID y el tipo de datos (como STRING:), dejando solo el valor limpio para que el CSV no sea un caos.

  • Formato CSV Estándar: Usa la estructura Dato1,Dato2,Dato3.

  • Estado de Red: Si un dispositivo no responde, el script lo marca como "Error/Offline" en lugar de dejar la línea vacía.

Cómo visualizar los resultados en la terminal:

Si quieres ver rápidamente cómo quedó el archivo sin salir de la consola de Kali, usa:

Bash
column -s, -t < reporte_snmp.csv

(Esto alineará las columnas del CSV visualmente en tu pantalla).


Monitorizar el CPU y la Memoria RAM es el siguiente paso lógico para tener un control real sobre el estado de tus servidores desde Kali.

En SNMP, estos datos no siempre vienen en un solo OID, sino que dependen de la tabla de recursos del host (HOST-RESOURCES-MIB). Aquí tienes la versión final del script con estas métricas añadidas.


Script: monitor_snmp_avanzado.sh

Bash
#!/bin/bash

# --- CONFIGURACIÓN ---
USER="seguro_user"
AUTH_PASS="auth_password"
PRIV_PASS="priv_password"
AUTH_PROTO="SHA"
PRIV_PROTO="AES"
SEC_LEVEL="authPriv"
OUTPUT_FILE="reporte_rendimiento.csv"

# OIDs específicos
OID_NAME="sysName.0"
OID_CPU="ssCpuIdle.0"            # Porcentaje de CPU Libre (UCD-SNMP-MIB)
OID_RAM_TOTAL="hrStorageSize.1"  # Tamaño total de RAM en unidades (hrStorageTable)
OID_RAM_USED="hrStorageUsed.1"   # RAM usada en unidades

# Cabecera
echo "IP,Nombre,CPU_Carga_%,RAM_Uso_%,Estado" > $OUTPUT_FILE

echo "[*] Escaneando recursos de red..."

for IP in "127.0.0.1" "192.168.1.50"; do
    # 1. Obtener Nombre
    NAME=$(snmpget -v3 -l $SEC_LEVEL -u $USER -a $AUTH_PROTO -A $AUTH_PASS -x $PRIV_PROTO -X $PRIV_PASS -O qv $IP $OID_NAME 2>/dev/null)

    if [ $? -eq 0 ]; then
        # 2. Calcular CPU (100 - Idle = Carga)
        IDLE=$(snmpget -v3 -l $SEC_LEVEL -u $USER -a $AUTH_PROTO -A $AUTH_PASS -x $PRIV_PROTO -X $PRIV_PASS -O qv $IP $OID_CPU 2>/dev/null)
        CPU_LOAD=$((100 - IDLE))

        # 3. Calcular RAM % (Usado / Total * 100)
        TOTAL=$(snmpget -v3 -l $SEC_LEVEL -u $USER -a $AUTH_PROTO -A $AUTH_PASS -x $PRIV_PROTO -X $PRIV_PASS -O qv $IP $OID_RAM_TOTAL 2>/dev/null)
        USED=$(snmpget -v3 -l $SEC_LEVEL -u $USER -a $AUTH_PROTO -A $AUTH_PASS -x $PRIV_PROTO -X $PRIV_PASS -O qv $IP $OID_RAM_USED 2>/dev/null)
        
        # Evitar división por cero
        if [ "$TOTAL" -gt 0 ]; then
            RAM_PERC=$(( 100 * USED / TOTAL ))
        else
            RAM_PERC="N/A"
        fi

        echo "$IP,$NAME,${CPU_LOAD}%,${RAM_PERC}%,Activo" >> $OUTPUT_FILE
        echo "[+] $IP: Datos recolectados."
    else
        echo "$IP,N/A,N/A,N/A,Offline" >> $OUTPUT_FILE
        echo "[-] $IP: Error de conexión."
    fi
done

echo "-------------------------------------------------------"
echo "[!] Reporte generado: $OUTPUT_FILE"

Detalles técnicos importantes

1. ¿Cómo funciona el cálculo de RAM?

SNMP reporta la memoria en "unidades de almacenamiento" (hrStorageAllocationUnits). Sin embargo, para un reporte rápido, la relación entre Size (Total) y Used (Usado) nos da el porcentaje exacto sin necesidad de convertir a Gigabytes.

2. El OID de CPU

He usado ssCpuIdle.0. Este valor te dice cuánto tiempo está el CPU "descansando". Por eso, en el script hacemos la resta:

$Carga = 100 - Idle$

3. Precisión en Kali

Si el script te devuelve errores de "Unknown Object Identifier", asegúrate de tener las MIBs actualizadas en tu Kali:

Bash
sudo download-mibs

Automatizar este proceso es lo que separa a un administrador de sistemas de un usuario común. En Kali Linux (y cualquier sistema Linux), la herramienta estándar para esto es Cron.

Configuraremos una "tarea programada" (Cron Job) para que tu script se ejecute automáticamente cada 5 minutos y mantenga un historial de rendimiento.


1. Modificación para el Historial (Log)

Para que el archivo no se sobreescriba y pierdas los datos anteriores, haremos un pequeño ajuste en la línea de la cabecera del script. Cambiaremos el comando para que solo cree la cabecera si el archivo no existe.

Modifica el inicio de tu script así:

Bash
# Archivo de salida
OUTPUT_FILE="/home/kali/reporte_rendimiento.csv"

# Crear cabecera SOLO si el archivo es nuevo
if [ ! -f $OUTPUT_FILE ]; then
    echo "Fecha,Hora,IP,Nombre,CPU_Carga_%,RAM_Uso_%,Estado" > $OUTPUT_FILE
fi

Nota: También añadiremos la columna Fecha,Hora y usaremos el comando date dentro del bucle para saber cuándo se tomó cada muestra.


2. Programación con Crontab

El archivo crontab es donde le decimos al sistema qué ejecutar y cuándo.

  1. Abre el editor de cron:

    Bash
    crontab -e
    

    (Si es la primera vez, elige nano como editor, que es el más sencillo).

  2. Añade esta línea al final del archivo:

    Fragmento de código
    */5 * * * * /bin/bash /home/kali/monitor_snmp_avanzado.sh
    

¿Qué significa */5 * * * *?

Representa la frecuencia de ejecución:

  • */5: Cada 5 minutos.

  • *: Cada hora.

  • *: Cada día del mes.

  • *: Cada mes.

  • *: Cada día de la semana.


3. Verificando que todo funcione

Una vez guardado el archivo (en nano es Ctrl+O, Enter, Ctrl+X), el sistema te confirmará: crontab: installing new crontab.

Para verificar que los datos se están acumulando, puedes esperar 10 o 15 minutos y ejecutar:

Bash
tail -f /home/kali/reporte_rendimiento.csv

Esto te mostrará en tiempo real cómo se van añadiendo las nuevas líneas cada 5 minutos.


Tip de Experto: Alertas por Email

Si estás en una auditoría real o gestionando una red, podrías añadir una condición al script para que te envíe un correo o un mensaje si la carga del CPU supera el 90%.

 

Añadir una alerta visual es genial porque, mientras trabajas en otras terminales de Kali, el script te avisará inmediatamente si algo anda mal sin que tengas que revisar el archivo CSV manualmente.

Vamos a modificar el script para que, si el CPU o la RAM superan el 80%, el mensaje aparezca en negrita y color rojo en tu pantalla.


Script con Alertas de Color: monitor_snmp_pro.sh

Actualiza tu script con este código mejorado:

Bash
#!/bin/bash

# --- CONFIGURACIÓN ---
USER="seguro_user"
AUTH_PASS="auth_password"
PRIV_PASS="priv_password"
AUTH_PROTO="SHA"
PRIV_PROTO="AES"
SEC_LEVEL="authPriv"
OUTPUT_FILE="/home/kali/reporte_rendimiento.csv"

# Límites para alertas
UMBRAL_CPU=80
UMBRAL_RAM=80

# Colores ANSI
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # Sin color

# Crear cabecera si no existe
if [ ! -f $OUTPUT_FILE ]; then
    echo "Fecha,Hora,IP,Nombre,CPU_%,RAM_%,Estado" > $OUTPUT_FILE
fi

FECHA=$(date '+%Y-%m-%d')
HORA=$(date '+%H:%M:%S')

for IP in "127.0.0.1" "192.168.1.50"; do
    NAME=$(snmpget -v3 -l $SEC_LEVEL -u $USER -a $AUTH_PROTO -A $AUTH_PASS -x $PRIV_PROTO -X $PRIV_PASS -O qv $IP sysName.0 2>/dev/null)

    if [ $? -eq 0 ]; then
        # CPU
        IDLE=$(snmpget -v3 -l $SEC_LEVEL -u $USER -a $AUTH_PROTO -A $AUTH_PASS -x $PRIV_PROTO -X $PRIV_PASS -O qv $IP ssCpuIdle.0 2>/dev/null)
        CPU_LOAD=$((100 - IDLE))

        # RAM
        TOTAL=$(snmpget -v3 -l $SEC_LEVEL -u $USER -a $AUTH_PROTO -A $AUTH_PASS -x $PRIV_PROTO -X $PRIV_PASS -O qv $IP hrStorageSize.1 2>/dev/null)
        USED=$(snmpget -v3 -l $SEC_LEVEL -u $USER -a $AUTH_PROTO -A $AUTH_PASS -x $PRIV_PROTO -X $PRIV_PASS -O qv $IP hrStorageUsed.1 2>/dev/null)
        RAM_PERC=$(( 100 * USED / TOTAL ))

        # --- LÓGICA DE ALERTA VISUAL ---
        STATUS_MSG="${GREEN}[OK]${NC}"
        if [ "$CPU_LOAD" -gt "$UMBRAL_CPU" ] || [ "$RAM_PERC" -gt "$UMBRAL_RAM" ]; then
            STATUS_MSG="${RED}[ALERTA: RECURSOS CRÍTICOS]${NC}"
            # Opcional: Sonido de campana en la terminal
            echo -e "\a" 
        fi

        echo -e "$STATUS_MSG IP: $IP | CPU: ${CPU_LOAD}% | RAM: ${RAM_PERC}%"
        echo "$FECHA,$HORA,$IP,$NAME,$CPU_LOAD,$RAM_PERC,Activo" >> $OUTPUT_FILE
    else
        echo -e "${YELLOW}[-] IP: $IP está Offline${NC}"
        echo "$FECHA,$HORA,$IP,N/A,N/A,N/A,Offline" >> $OUTPUT_FILE
    fi
done

¿Qué hemos añadido?

  1. Códigos de colores ANSI: Usamos variables como ${RED} y ${GREEN} para que la terminal de Kali resalte los problemas.

  2. Lógica de Umbral: Comparamos los valores obtenidos con UMBRAL_CPU y UMBRAL_RAM.

  3. Alertas Sonoras: El comando echo -e "\a" envía un carácter especial que hace que la terminal emita un "beep" si hay una alerta.

  4. Marca de tiempo: Ahora el CSV guarda exactamente el día y el segundo de cada captura.


El toque final: Ejecución en segundo plano persistente

Si quieres ver las alertas en tiempo real en una esquina de tu pantalla mientras haces otras cosas en Kali, puedes usar el comando watch:

Bash
watch -n 5 -c ./monitor_snmp_pro.sh
  • -n 5: Lo ejecuta cada 5 segundos.

  • -c: Permite que se vean los colores ANSI en la salida de watch.

Entradas populares de este blog

Hacking y ciberseguridad en kali linux con Fping

Hacking y ciberseguridad en kali linux con atk6-thcping6

Como utilizar Fierce en kali linux