# 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 ```python 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: ```bash 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 ```bash # 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 ```bash # 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 - [RFC 4253 - SSH Transport Layer Protocol](https://tools.ietf.org/html/rfc4253) - [Paramiko Documentation](https://docs.paramiko.org/) - [Cisco IOS SSH Configuration Guide](https://cisco.com/c/en/us/support/docs/security-vpn/secure-shell-ssh/4145-ssh.html) - [OpenSSH Legacy Algorithm Support](https://www.openssh.com/legacy.html) --- **Fecha**: 13 de noviembre de 2024 **Autor**: Sistema de Monitorización de Red **Versión**: 1.0