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:
-
Key Exchange Algorithms (KEX):
diffie-hellman-group1-sha1⚠️ Legacy, pero necesario
-
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
- Uso Limitado: Solo usar estos algoritmos en redes internas controladas
- Deprecación:
diffie-hellman-group1-sha1tiene vulnerabilidades conocidas - Mitigación: Mantener dispositivos en VLANs de management seguras
- 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
- Paramiko Transport: Permite control granular sobre algoritmos SSH
- Lista Prepend: Agrega algoritmos legacy sin remover los modernos
- Detección Automática: No requiere configuración por dispositivo
- Zero Breaking Changes: Backward compatible con código existente
Alternativas Consideradas
- ❌ Configuración por dispositivo: Muy complejo de mantener
- ❌ Fork de Paramiko: Innecesariamente complejo
- ❌ SSH subprocess: Perdería funcionalidad Python
- ✅ 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:
- Monitoring: Trackear qué dispositivos usan algoritmos legacy
- Reporting: Dashboard de compatibilidad SSH
- Gradual: Migrar dispositivos a firmware moderno
- Eventually: Remover soporte legacy cuando sea seguro
📚 Referencias
- RFC 4253 - SSH Transport Layer Protocol
- Paramiko Documentation
- Cisco IOS SSH Configuration Guide
- OpenSSH Legacy Algorithm Support
Fecha: 13 de noviembre de 2024
Autor: Sistema de Monitorización de Red
Versión: 1.0