first commit
This commit is contained in:
@@ -0,0 +1,194 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user