Files
los-vecinos-de-cisco/no/COMPATIBILITY_FIXES.md
T
2025-12-09 12:45:15 +01:00

6.1 KiB

Cisco MAC Monitor - Fixes de Compatibilidad

📋 Resumen

Este documento describe las correcciones de compatibilidad implementadas en el proyecto Cisco MAC Monitor para asegurar la conectividad SSH con dispositivos Cisco antiguos y modernos.


🔧 Fix SSH para Dispositivos Antiguos

Problema Identificado

Los dispositivos Cisco con versiones IOS antiguas (especialmente 12.x y algunas versiones 15.x) requieren algoritmos criptográficos legacy que han sido deprecados en versiones modernas de SSH por razones de seguridad.

Síntomas del Problema

  • Fallos de conexión SSH con errores como:
    paramiko.ssh_exception.SSHException: Incompatible ssh peer (no acceptable kex algorithm)
    paramiko.ssh_exception.SSHException: Incompatible ssh peer (no acceptable host key types)
    
  • Timeouts durante el handshake SSH
  • Imposibilidad de conectar desde OpenSSH moderno sin configuración específica

Algoritmos Requeridos

Los dispositivos Cisco antiguos requieren:

  1. Key Exchange Algorithms (KEX):

    • diffie-hellman-group1-sha1 ⚠️ Legacy, pero necesario
  2. Host Key Algorithms:

    • ssh-rsa ⚠️ Deprecated en SSH moderno, pero esencial

Solución Implementada

Ubicación del Fix

  • Archivo: cisco_mac_monitor.py
  • Clase: CiscoSSHConnector
  • Método: connect()

Cambios Realizados

def connect(self) -> bool:
    """Establece conexión SSH con el dispositivo"""
    try:
        # Configuración especial para dispositivos Cisco antiguos
        # Estos dispositivos requieren algoritmos legacy para conectividad
        
        # Crear transport manualmente para configurar algoritmos
        transport = paramiko.Transport((self.host, self.port))
        transport.set_keepalive(30)
        
        # Obtener opciones de seguridad y agregar algoritmos antiguos
        security_opts = transport.get_security_options()
        
        # Añadir diffie-hellman-group1-sha1 para dispositivos antiguos
        if 'diffie-hellman-group1-sha1' not in security_opts.kex:
            security_opts.kex = ['diffie-hellman-group1-sha1'] + list(security_opts.kex)
        
        # Asegurar que ssh-rsa esté disponible
        if 'ssh-rsa' not in security_opts.key_types:
            security_opts.key_types = ['ssh-rsa'] + list(security_opts.key_types)
        
        # Resto de la implementación...

Características del Fix

✅ Backward Compatible: Mantiene soporte para algoritmos modernos ✅ Forward Compatible: No rompe conectividad con equipos nuevos
✅ Priorización Inteligente: Coloca algoritmos legacy al inicio de la lista ✅ Logging Mejorado: Indica cuándo se usan algoritmos de compatibilidad ✅ Manejo de Errores: Fallos específicos por problemas de algoritmos


🛠️ Detalles Técnicos

Equivalencia OpenSSH

El fix implementado es equivalente a usar estas opciones en OpenSSH:

ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 \
    -o HostKeyAlgorithms=+ssh-rsa \
    admin@192.168.1.10

Modelos Cisco Afectados

Los siguientes modelos suelen requerir estos algoritmos:

  • Catalyst 2960 (IOS 12.2)
  • Catalyst 3560 (IOS 12.2)
  • Catalyst 2950 (IOS 12.1)
  • Catalyst 3550 (IOS 12.1)
  • ISR 1800/2800/3800 Series (IOS 12.4)
  • ASA 5500 Series (versiones antiguas)

⚠️ Consideraciones de Seguridad

  1. Uso Limitado: Solo usar estos algoritmos en redes internas controladas
  2. Deprecación: diffie-hellman-group1-sha1 tiene vulnerabilidades conocidas
  3. Mitigación: Mantener dispositivos en VLANs de management seguras
  4. Upgrade Path: Migrar a hardware moderno cuando sea posible

🧪 Testing y Validación

Test de Compatibilidad

# Test con dispositivo moderno (debería usar algoritmos seguros)
python3 cisco_mac_monitor.py --host 192.168.1.100 --username admin --password cisco123 --debug

# Test con dispositivo antiguo (debería usar algoritmos legacy)
python3 cisco_mac_monitor.py --host 192.168.1.10 --username admin --password cisco123 --debug

Verificar Logs

Los logs deben mostrar:

2024-11-13 10:30:00 - __main__ - INFO - Conectando a 192.168.1.10 con algoritmos compatibles
2024-11-13 10:30:01 - __main__ - INFO - Conexión exitosa a 192.168.1.10

Docker Testing

# Build con nuevos cambios
docker build -t cisco-mac-monitor:compatibility .

# Test con dispositivo antiguo
docker run --rm --network host cisco-mac-monitor:compatibility \
  --host 192.168.1.10 --username admin --password cisco123 --debug

📝 Notas de Implementación

Por Qué Este Enfoque

  1. Paramiko Transport: Permite control granular sobre algoritmos SSH
  2. Lista Prepend: Agrega algoritmos legacy sin remover los modernos
  3. Detección Automática: No requiere configuración por dispositivo
  4. Zero Breaking Changes: Backward compatible con código existente

Alternativas Consideradas

  1. ❌ Configuración por dispositivo: Muy complejo de mantener
  2. ❌ Fork de Paramiko: Innecesariamente complejo
  3. ❌ SSH subprocess: Perdería funcionalidad Python
  4. ✅ Transport manual: Balance perfecto de control y simplicidad

🔮 Roadmap Futuro

Mejoras Planificadas

  • Detección automática de versión IOS
  • Configuración de algoritmos por modelo de dispositivo
  • Métricas de algoritmos SSH utilizados
  • Alertas cuando se usan algoritmos legacy

Migration Path

A medida que los dispositivos se actualicen:

  1. Monitoring: Trackear qué dispositivos usan algoritmos legacy
  2. Reporting: Dashboard de compatibilidad SSH
  3. Gradual: Migrar dispositivos a firmware moderno
  4. Eventually: Remover soporte legacy cuando sea seguro

📚 Referencias


Fecha: 13 de noviembre de 2024
Autor: Sistema de Monitorización de Red
Versión: 1.0