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

195 lines
6.1 KiB
Markdown

# 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