Este tema reúne cómo proteger el acceso al dispositivo: la contraseña del modo privilegiado, las contraseñas de las líneas de acceso (consola, VTY, auxiliar), la base de usuarios local, el cifrado de contraseñas y la desactivación de servicios innecesarios que amplían la superficie de ataque.
Conceptos previos
Pasos típicos:
- Proteger el modo privilegiado con
enable secret. - Crear usuarios locales con contraseña con hash (si se usará
login localo SSH). - Proteger las líneas (consola y VTY) con contraseña y método de login.
- Cifrar las contraseñas restantes y deshabilitar servicios innecesarios.
Ejemplo rapido para refrescar memoria

Con mi configuración de Obsidian, ConsolaLab1 no se usa. l
Configuración
1. Protección de la línea de consola
- Comando:
Router(config)# username <Usuario> privilege <0-15> algorithm-type <md5|sha256|scrypt> secret <Clave>
Router(config)# enable algorithm-type <md5|sha256|scrypt> secret <Clave>
- Ejemplo:
! Un username por persona
SW1(config)# username Admin privilege 15 algorithm-type scrypt secret AdminLab2026
SW1(config)# username maria privilege 15 algorithm-type scrypt secret Cl4ve-Maria22!
SW1(config)# username soporte privilege 1 algorithm-type scrypt secret Cl4ve-Soporte3!
! Enable secret: uno solo, compartido
SW1(config)# enable algorithm-type scrypt secret Kassini#2026
En caso de ser un solo Administrador, solo usar un username.
Si quisieras que pida las dos claves, usa privilege 1. Con privilege 1 el usuario entra en SW1> (modo usuario), y para llegar a SW1# tiene que escribir enable. Ese comando pide elenable secret.
Una vez terminado eso, hacer los pasos de abajo:
- Comando:
SW1(config)# line console 0
SW1(config-line)# login local
SW1(config-line)# exec-timeout <minutos> <segundos>
SW1(config-line)# logging synchronous
SW1(config-line)# exit
R1(config)# service password-encryption
- Ejemplo:
SW1(config)# line console 0
SW1(config-line)# login local
SW1(config-line)# exec-timeout 5 0
SW1(config-line)# logging synchronous
SW1(config-line)# exit
R1(config)# service password-encryption
| Comando | Qué hace |
|---|---|
login local | Pide usuario y contraseña de la base local (username) |
exec-timeout <min> <seg> | Cierra la sesión inactiva. |
logging synchronous | Evita que los mensajes del sistema corten lo que escribes |
Crea el usuario antes de activar
login local. (Paso 1, hay que hacerlo primero.)
2. Desactivación de servicios innecesarios
Recomendados
| Comando | Aplica en router | Aplica en switch | Qué evita |
|---|---|---|---|
no ip domain-lookup | Sí | Sí | Congelamiento al escribir mal un comando (si no usas DNS) |
no ip http server | Sí | Sí | Administración web en texto plano |
no ip http secure-server | Sí | Sí | Superficie web HTTPS (si no usas GUI/RESTCONF) |
no ip source-route | Sí | Sí (L3) | Paquetes con ruta manipulada por el origen |
no ip bootp server | Sí | Sí | Servicio BOOTP heredado |
no service pad | Sí | Sí | PAD (X.25), heredado |
no service config | Sí | Sí | Carga de configuración desde la red (TFTP) al arrancar |
no vstack | No | Sí (Catalyst) | Smart Install (puerto 4786), vulnerabilidad conocida |
no ip finger | Sí | Sí | Solo IOS antiguos; en los nuevos ya no existe |
no service tcp-small-servers y no service udp-small-servers | Sí | Sí | Echo, chargen, etc. Ya apagados por defecto en IOS modernos |
| Opcionales (según lo que uses) |
| Comando | Aplica en router | Aplica en switch | Cuándo dejarlo activo |
|---|---|---|---|
no service dhcp | Sí | Sí | Si el equipo es servidor DHCP o relay (ip helper-address) |
no cdp run | Sí | Sí | Teléfonos IP, APs Cisco o troubleshooting |
no lldp run | Sí | Sí | Teléfonos IP no Cisco o LLDP-MED |
no snmp-server | Sí | Sí | Si usas monitoreo SNMP (en ese caso, SNMPv3 con ACL) |
no ip proxy-arp (por interfaz) | Sí | Sí (L3) | Redes con equipos mal configurados que dependan de él |
no ip redirects y no ip unreachables (por interfaz) | Sí | Sí (L3) | Apágalos en interfaces hacia redes no confiables |
no mop enabled | Sí | No | Protocolo heredado de DEC, apagado en la mayoría de IOS |
CDP y LLDP: decisión por interfaz
Revelan modelo, versión de IOS, IPs y puertos a quien escuche en el enlace. Una solución intermedia es dejarlos activos globalmente y apagarlos donde no deben estar:
| Tipo de puerto | CDP / LLDP |
|---|---|
| Hacia usuarios finales, WAN o internet | Apagado (recomendado) |
| Entre switches y routers propios | Activo (útil para troubleshooting) |
| Hacia teléfonos IP o APs | Activo, si los necesitan |
| Específico del switch |
| Medida | Comando | Prioridad |
|---|---|---|
| Apagar puertos sin uso | shutdown | Recomendado |
| Moverlos a una VLAN sin enrutar | switchport access vlan 999 | Recomendado |
| Forzar modo acceso (sin DTP) | switchport mode access + switchport nonegotiate | Recomendado |
| Limitar VTP | vtp mode transparent (u off) | Recomendado |
| Cambiar la VLAN nativa de las troncales | switchport trunk native vlan 99 | Recomendado |
| Proteger puertos de usuario | spanning-tree portfast + spanning-tree bpduguard enable | Opcional |
| Limitar MACs por puerto | switchport port-security | Opcional |
| Específico del router |
| Medida | Comando | Prioridad |
|---|---|---|
| Deshabilitar el puerto auxiliar | line aux 0 + no exec + transport input none | Recomendado |
| Ejemplo para el puerto auxiliar: |
Router(config)# line aux 0
Router(config-line)# no exec
Router(config-line)# transport input none
Verificación
1. Ver las líneas
R1# show running-config | section line
line con 0
exec-timeout 5 0
logging synchronous
login local
line aux 0
no exec
transport input none
line vty 0 4
access-class 1 in
exec-timeout 5 0
login local
transport input ssh
Si tu equipo tiene 16 líneas vty (switches), verás también:
line vty 5 15
access-class 1 in
exec-timeout 5 0
login local
transport input ssh
2. Ver enable, usuarios y service password-encryption
R1# show running-config | include enable|username|service password
service password-encryption
enable secret 9 $9$Lq7fT2mXc8RkWy$p3Nn0eVhZ5uJ1aGdYtB6oS4xKcQwE9rMiUvA2lDfHzs
username admin privilege 15 secret 9 $9$3Xk2vN8yQ1pLfE$wZ4hT6mJ0cRbA7sKdU9eYgV2nHqXoP5iLtM8aBjC1rE
3. Ver solo los usuarios locales
R1# show running-config | include username
username admin privilege 15 secret 9 $9$3Xk2vN8yQ1pLfE$wZ4hT6mJ0cRbA7sKdU9eYgV2nHqXoP5iLtM8aBjC1rE
Con varios usuarios:
R1# show running-config | include username
username admin privilege 15 secret 9 $9$3Xk2vN8yQ1pLfE$wZ4hT6mJ0cRbA7sKdU9eYgV2nHqXoP5iLtM8aBjC1rE
username operador secret 9 $9$7Hd1pQ4rTz9WnB$uC3kVx8LmY2eNfG6aSjR0oIbDhZtKw5PqXyE1vAcMlo
Cómo se ve cada tipo de contraseña
| Prefijo | Tipo | Cómo se ve en la configuración | Seguridad |
|---|---|---|---|
| (ninguno) | Texto plano | enable password Clave123 | Mala |
7 | Ofuscada (service password-encryption) | password 7 0822455D0A16 | Mala, se revierte en segundos |
5 / $1$ | MD5 | secret 5 $1$mERr$hx5rVt7rPNoS4wqbXKX7m0 | Débil |
8 / $8$ | SHA-256 | secret 8 $8$dsYGNam3K1SIJO$7nv/35M/qr6t.dVc7UY9zrJDWRVqncHub1PE9UlMQFs | Buena |
9 / $9$ | scrypt | secret 9 $9$nhEmQVczB7dqsO$X.HsgL6x1il0RxkOSSvyQYwucySCt7qFm4v7pqCxkKM | La mejor |
Señales de que algo está mal
Contraseñas en texto plano:
R1# show running-config | include enable|username
enable password Clave123
username admin password Clave456
Corrección: no enable password, y crear el usuario otra vez con secret o algorithm-type. Si queda el username ... password, bórralo con no username admin antes de volver a crearlo.
Contraseñas ofuscadas con tipo 7 (por password en una línea con service password-encryption):
R1# show running-config | section line con
line con 0
password 7 0822455D0A16
login
Corrección: pasar a login local y quitar la clave de línea con no password.
Usuario con login local pero sin ningún username:
R1# show running-config | include username
R1#
Sin salida significa que no hay usuarios, y login local te dejaría sin acceso por consola.
Filtros extra útiles
R1# show running-config | include secret
R1# show running-config | include password
R1# show running-config | section line vty
R1# show running-config | section line con
El segundo comando no debería mostrar ninguna línea con contraseña en texto plano; si aparece password 7 ..., es ofuscación reversible, no un hash.
Nota sobre tu texto: donde dices “login local (o login)” en las vty, con SSH usa solo login local, como vimos antes.