lunes, mayo 04, 2015

Port Security en switches Cisco: los comandos "switchport port-security" y "switchport port-security mac-address" y el error "Found duplicate mac-address"

En una entrada anterior (Port Security en switches Cisco: cuando no podemos asegurar el puerto y nos sale "Command rejected: FastEthernet0/1 is a dynamic port") vimos la razón de cierto error y cómo asegurar un puerto de un switch Cisco para permitir que por el mismo pasase única y exclusivamente una sola MAC y que el puerto se deshabilitase al pasar MACs adicionales, como ocurre cuando se conecta un hub u otro switch a un puerto donde debería haber un único cliente.


Ahora bien, ¿qué ocurre si queremos que por un mismo puerto puedan pasar dos o más MACs pero no un número superior de ellas? Sencillo: usaremos el comando

switchport port-security maximum <n>

donde  "n" es el número máximo de MACs que el switch puede ver por ese puerto antes de tirarlo. Usando el ejemplo del artículo anterior, tenemos un switch (SW1) al que se ha conectado un hub en el puerto FastEthernet0/2 al que a su vez vamos a conectar un par de clientes, PC0 (192.168.1.11) y PC2 (192.168.1.12). Hemos configurado el puerto de este modo:

SW1#conf t 
SW1(config)#interface fastEthernet 0/2
SW1(config-if)#switchport port-security maximum 2


Veamos el estado de la red:


SW1#ping 192.168.1.11

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.11, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/36/40 ms

SW1#ping 192.168.1.12

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.12, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 30/30/30 ms


Ambos equipos responden y hay tráfico. ¿Qué ocurre si añadimos un tercer equipo, PC3 (192.168.1.13) al hub? Veámoslo:



En efecto, el puerto FastEthernet0/2 se ha bloqueado y ha cortado el segmento de red donde se hayan los equipos al detectar tres MACs saliendo por ese puerto, cuando su límite en port-security son dos. Esto es lo que vemos en la consola nada más conectar el tercer equipo:

SW1#
%LINK-5-CHANGED: Interface FastEthernet0/2, changed state to administratively down

%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/2, changed state to down


Y esta la salida de un show interface a la FastEthernet0/2:

SW1#show interfaces fastEthernet 0/2
FastEthernet0/2 is down, line protocol is down (err-disabled)

.
.
.
<Se omite el resto de la salida del comando>

Ampliemos la cantidad de MACs aceptables en la interfaz FastEthernet0/2 a "3" para poder tener los tres clientes en funcionamiento, y tiremos y levantemos la interfaz para recuperar la red:

SW1(config)#interface fastEthernet 0/2
SW1(config-if)#switchport port-security maximum 3
SW1(config-if)#shut

%LINK-5-CHANGED: Interface FastEthernet0/2, changed state to administratively down

%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/2, changed state to down

SW1(config-if)#no shut

%LINK-5-CHANGED: Interface FastEthernet0/2, changed state to up

%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/2, changed state to up


Hemos recuperado la red y los tres clientes responden:


SW1#ping 192.168.1.11

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.11, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 40/40/40 ms

SW1#ping 192.168.1.12

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.12, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/28/31 ms

SW1#ping 192.168.1.13

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.13, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 30/30/30 ms


Ya tenemos dominada la cantidad de clientes que queremos que puedan pasar por un puerto como máximo y es el momento de dar un salto cualitativo: ¿estamos seguros que esos tres clientes son de confianza, de que les corresponde estar ahí y que no suponen una amenaza?, ¿estamos seguros de que nadie ha sustituido uno de los clientes finales legítimos por otro malicioso? En cualquier red bajo nuestro control deberíamos tener claro quién se conecta y a dónde. Supongamos que PC0, PC2 y PC3 son clientes legítimos, pero que existe un PC4 que es un peligro en potencia o que no le corresponde estar conectado al switch SW1 o al puerto FastEthernet0/2. ¿Cómo controlar que alguien no va a desconectar uno de los otros clientes y va a conectar a PC4? La respuesta está en el comando

switchport port-security mac-address <H.H.H>

Con este comando le indicamos al switch que la MAC H.H.H (formato Cisco) debe añadirse a la tabla de MACs del switch en cuanto sea vista por dicho puerto. Tomemos nuestros clientes legítimos y sus MACs correspondientes:

PC0 00D0.97EA.6C5A
PC2 000C.8504.7938
PC3 0002.1758.D55A

Si los clientes están conectados antes de habilitar la seguridad MAC vamos a tener este error:

SW1(config)#interface fastEthernet 0/2
SW1(config-if)#switchport port-security mac-address 00D0.97EA.6C5A
 

Found duplicate mac-address 00d0.97ea.6c5a.

¿Qué ha ocurrido aquí? Repasemos cómo funciona el comando: le decimos al switch que debe añadir la MAC 00D0.97EA.6C5A a la tabla de MACs si esa MAC es vista por dicho puerto, pero al ejecutar el comando el switch nos indica que la MAC está duplicada, que ya existe en la tabla de MACs. En efecto:

SW1#show mac-address-table
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----

   1    0002.1758.d55a    STATIC      Fa0/2
   1    000c.8504.7938    STATIC      Fa0/2
   1    0060.2f7d.5401    DYNAMIC     Fa0/1
   1    00d0.97ea.6c5a    STATIC      Fa0/2


La MAC 00D0.97EA.6C5A ya está añadida a la tabla de MACs simplemente porque el cliente ya estaba encendido y en marcha y el switch lo añadió a la tabla como hace con cualquier equipo conectado a él. A resaltar que el tipo de entrada es STATIC debido a que tenemos configurado port-security en dicho puerto. Si no fuese así, la MAC aparecería coo DYNAMIC, tal como aparece una MAC en la tabla que pertenece a otro segmento de red.

Para poder añadir MACs a port-security mac-address con los equipos ya conectados debemos borrar la tabla de MACs con

SW1#clear mac-address-table


Ahora la tabla está vacía:

SW1#show mac-address-table
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----


Debemos asegurar las tres MACs o el mecanismo de seguridad no funcionará, ya que asegurando solo una o dos MACs habrá hueco para que la tercera pueda ser una MAC arbitraria y la protección no surtirá efecto:

SW1(config)#interface fastEthernet 0/2
SW1(config-if)#switchport port-security mac-address 00D0.97EA.6C5A
SW1(config-if)#switchport port-security mac-address 000C.8504.7938
SW1(config-if)#switchport port-security mac-address 0002.1758.D55A


Tenemos las tres MACs aseguradas en el puerto y además ya están de nuevo en la tabla de MACs:

SW1#show mac-address-table
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----

   1    0002.1758.d55a    STATIC      Fa0/2
   1    000c.8504.7938    STATIC      Fa0/2
   1    0060.2f7d.5401    DYNAMIC     Fa0/1
   1    00d0.97ea.6c5a    STATIC      Fa0/2



Ahora llega el momento clave. Alguien va a sustituir el cliente PC3 por PC4 (IP 192.168.1.14, MAC 00D0.D389.5062). Veamos quá pasa:


En efecto, el puerto ha quedado deshabilitado al detectarse una MAC que no es ninguna de las tres autorizadas en un puerto con un máximo de tres MACs posibles. En el switch vemos el anodino mensaje de siempre:

SW1#
%LINK-5-CHANGED: Interface FastEthernet0/2, changed state to administratively down

%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/2, changed state to down


El segmento ha quedado aislado, impidiendo que PC4 acceda al resto de la red, pero impidiéndoselo también a los clientes legítimos PC0 y PC2. Un show interface a FastEthernet0/2 muestra también el típico mensaje de err-disabled y un show port-security que ha habido una violación de la seguridad:

SW1#show port-security
Secure Port MaxSecureAddr CurrentAddr SecurityViolation Security Action
               (Count)       (Count)        (Count)
--------------------------------------------------------------------
        Fa0/2        3          3                 1         Shutdown
----------------------------------------------------------------------



Es importante observar que el mecanismo tiene su máxima utilidad con clientes conectados directamente a puertos del switch y no a través de hubs, que como vemos perjudican facilmente al resto de usuarios del hub (sin contar con los conocidos problemas de colisiones y pésimo uso del ancho de banda) cuando se utilizan mecanismos de protección.

Un ejemplo mucho más realista es uno en el que solo se permite un cliente por puerto del switch y se habilita la seguridad exclusivamente para ese cliente. Conectemos PC0 al puerto FastEthernet0/2 y PC2 al puerto FastEthernet0/3, sin mecanismos de seguridad:


Los clientes están funcionando de manera normal. Ahora apliquemos port-security maximum y port-security mac-address en ambos puertos, asegurando cada puerto con la MAC de su cliente legítimo y recordando poner FastEthernet en modo access en lugar del auto por defecto, que no nos permitiría aplicar la seguridad, tal como se vió en el artículo anterior:

SW1(config)#interface fastEthernet 0/2
SW1(config-if)#switchport port-security
SW1(config-if)#switchport port-security maximum 1
SW1(config-if)#switchport port-security mac-address 00D0.97EA.6C5A
SW1(config-if)#exit
SW1(config)#interface fastEthernet 0/3
SW1(config-if)#switchport mode access

SW1(config-if)#switchport port-security
SW1(config-if)#switchport port-security maximum 1
SW1(config-if)#switchport port-security mac-address 000C.8504.7938


La red no ha sufrido ninguna alteración ni ha habido ninguna caída en los puertos porque los hemos configurado correctamente. Hay que hacer notar que 1 es el valor por defecto de port-security maximum, por lo que no habría sido necesario escribirlo y de hecho ni siquiera aparece al hacer un show running-config:

SW1#show run
Building configuration...
.

.
.
!
interface FastEthernet0/2
 switchport mode access
 switchport port-security
 switchport port-security mac-address 00D0.97EA.6C5A
!
interface FastEthernet0/3
 switchport mode access
 switchport port-security
 switchport port-security mac-address 000C.8504.7938
!


Desconectemos ahora PC0 de su puerto e intentemos conectar en su lugar a PC2:

En cuanto haya tráfico de PC2 hacia el switch el puerto caerá tal como estaba previsto.

El parámetro "sticky"

Configurar el parámetro port-security mac-address a mano puede convertirse en una tarea inmanejable en redes con cientos o miles de clientes conectados a nuestros switches. Para ello tenemos el parámetro sticky:

switchport port-security mac-address sticky

Con este comando el puerto se autoasegurará con la MAC del primer dispositivo que se conecte en el puerto sin intervención manual. Veamos un ejemplo: tenemos a PC0 conectado a FastEthernet0/2 en el switch SW1.



Configuramos el puerto para que funcione con el parámetro sticky, sin nada más


interface FastEthernet0/2
 switchport port-security
 switchport port-security mac-address sticky



En cuanto el puerto recibe un paquete del equipo conectado vemos que el router asegura automaticamente la MAC en el puerto añadiendo esta línea:

interface FastEthernet0/2
 switchport port-security mac-address sticky 00D0.97EA.6C5A



La MAC queda asegurada y al intentar conectar otro equipo el puerto será deshabilitado.

No hay comentarios:

Publicar un comentario