VLAN Management Policy Server

Habitualmente, cuando tenemos que llevar a cabo la segmentación lógica de una red mediante el uso de VLANs, procedemos a crear las redes necesarias ya sea de forma manual o automáticamente mediante protocolos tipo VTP (VLAN Trunking Protocol) de Cisco en nuestra red y tras esto, asignamos las distintas interfaces de los dispositivos a cada una de las VLANs definidas. Esto supone que, si mañana me cambio de sitio y cambio mi portátil de toma de red, deberé configurar la nueva toma de red para que pertenezca a la VLAN que necesito para llevar a cabo mi trabajo diario.

Una solución a este problema puede ser el uso junto al protocolo VTP, el servicio VMPS (VLAN Management Policy Server) de Cisco, el cual proporciona una primera aproximación a una solución de control de acceso a red tan ofrecida por los fabricantes en la actualidad. Entre otras funcionalidades, VMPS permite asociar dinámicamente equipos a VLANs basándonos en su dirección MAC (con el problema de seguridad que supone), de forma que mi portátil, en cualquier toma de red de la oficina al que lo conecte, siempre pertenecerá a la misma VLAN y podré trabajar con normalidad.

Cualquier switch Cisco de gama media soporta VMPS como cliente, no obstante, solo las gamas altas (superiores a la 4000), soportan el modo servidor. A pesar de esto, no es necesario disponer de uno de estos equipos para aplicar esta solución ya que existen multitud de herramientas tanto libres (algunas algo desactualizadas) como comerciales que nos proporcionan la funcionalidad de servidor VMPS que necesitamos. Dentro de todas ellas, se ha seleccionado vmpsd (http://sourceforge.net/projects/vmps/), un pequeño demonio para GNU/Linux que nos proporciona un servidor VMPS sin necesidad de instalar demasiado software, como un sistema de gestión de base de datos. Para proceder a configurar VMPS en nuestro switch (el elegido es un Cisco 2960), realizamos los siguientes pasos:

1) Configuramos VTP

Switch(config)#vtp  mode  server 
Switch(config)#vtp  domain s2

Switch#show  vtp  status 
          : running VTP2
Configuration Revision          : 1
Maximum VLANs supported locally : 255
Number of existing VLANs        : 14
VTP Operating Mode              : Server
VTP Domain Name                 : s2
VTP Pruning Mode                : Disabled
VTP V2 Mode                     : Enabled
VTP Traps Generation            : Disabled
MD5 digest                      : 0xC4 0xE8 0xDB 0x1A 0xF2 0x6B 0xC2 0x79 

2) Configuramos switch como cliente VMPS

Para llevar a cabo esta configuración, indicamos la dirección IP del servidor VPMS principal (podemos tener varios)

Switch(config)# vmps retry 3
Switch(config)# vmps reconfirm 1
Switch(config)# vmps server 172.18.0.150 primary
Switch#show  vmps 
VQP Client Status:
--------------------
VMPS VQP Version:   1
Reconfirm Interval: 1 min
Server Retry Count: 3
VMPS domain server: 172.18.0.150 (primary, current)
Reconfirmation status
---------------------
VMPS Action:         No Dynamic Port

3) Creamos las distintas vlans

Switch(config)#vlan 21
Switch(config-vlan)#name GESTION
Switch(config)#vlan 22
Switch(config-vlan)#name USUARIOS
Switch(config)#vlan 23
Switch(config-vlan)#name INVITADOS
Switch#show  vlan 
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
21   GESTION                          active    
22   USUARIOS                         active    
23   INVITADOS                        active   

4) Marcamos las interfaces que usan VMPS

Switch(config)#interface  range  fastEthernet 0/10-20 
Switch(config-if-range)# switchport mode access
Switch(config-if-range)# switchport access vlan dynamic

Switch#show  interface fastEthernet 0/10 switchport 
Name: Fa0/10
Switchport: Enabled
Administrative Mode: dynamic access  ******
Operational Mode: down
Administrative Trunking Encapsulation: dot1q
Negotiation of Trunking: Off
Access Mode VLAN: unassigned  *******
Trunking Native Mode VLAN: 1 (default)
Administrative Native VLAN tagging: enabled
Voice VLAN: none
Administrative private-vlan host-association: none 
Administrative private-vlan mapping: none 
Administrative private-vlan trunk native VLAN: none
Administrative private-vlan trunk Native VLAN tagging: enabled
Administrative private-vlan trunk encapsulation: dot1q
Administrative private-vlan trunk normal VLANs: none
Administrative private-vlan trunk associations: none
Administrative private-vlan trunk mappings: none
Operational private-vlan: none
Trunking VLANs Enabled: ALL
Pruning VLANs Enabled: 2-1001
Capture Mode Disabled
Capture VLANs Allowed: ALL

5) Configuramos el servidor VMPS (vlan.db)

vmps domain s2
vmps mode open
vmps fallback INVITADOS
vmps no-domain-req deny

vmps-mac-addrs
address 0023.8bd7.c2b3 vlan-name GESTION

En la configuración debemos tener en cuenta lo siguiente:

  • El dominio debe coincidir con el configurado en VTP.
  • La VLAN INVITADOS es usada para redireccionar las MACs que no estan autorizadas por la política debido a que configuramos el modo open, si usamos el modo secure, la interfaz quedaría deshabilitada.
  • Asignamos la dirección MAC de mi portatil a la VLAN de GESTION.

Una vez aquí, arrancamos el demonio y lanzamos una consulta de prueba (indicamos la dirección IP, el dominio VTP y la dirección MAC)

perl vqpcli.pl  -s 172.18.0.150 -v s2  -m 0023.8bd7.c2b3
Vlan: GESTION
MAC Address: 00238bd7c2b3 
Status: ALLOW

Como vemos, la dirección MAC esta autorizada y le asigna la VLAN GESTION.

Llegados a este punto, solo queda probar a conectarnos al switch (activamos el debug mediante el comando debug vqpc all) para realizar distintas pruebas:

Conectamos mi portátil una de las tomas definidas para usar VMPS (fa0/13)

*Mar  1 02:23:09.070: VQPC EVENT: -pm_port_vqp_start: port Fa0/13
*Mar  1 02:23:11.075: %LINK-3-UPDOWN: Interface FastEthernet0/13, changed state to up
*Mar  1 02:23:12.081: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/13, changed 
                      state to up
*Mar  1 02:23:13.986: VQPC LEARN: 
*Mar  1 02:23:13.986: VQPC LEARN: -learning mac 0023.8bd7.c2b3 on vlan 0, port Fa0/13
*Mar  1 02:23:13.986: VQPC LEARN: adding mac 0023.8bd7.c2b3 on vlan 0, port Fa0/13, type = 0x0021
*Mar  1 02:23:13.986: VQPC: allocating transID 0x00000471
*Mar  1 02:23:13.986: VQPC PAK: xmt transaction ID = 0x00000471
*Mar  1 02:23:13.986: VQPC PAK: sending query to VMPS
*Mar  1 02:23:13.986: VQPC PAK:  
*Mar  1 02:23:13.986: VQPC PAK: rcvd packet from VMPS
*Mar  1 02:23:13.994: VQPC PAK: transaction ID = 0x00000471
*Mar  1 02:23:13.994: VQPC: rcvd response, transID = 0x00000471
*Mar  1 02:23:13.994: VQPC PAK: VLAN name TLV, vlanName = GESTION
*Mar  1 02:23:13.994: VQPC PAK: Cookie TLV, cookie = 0023.8bd7.c2b3, length = 6
*Mar  1 02:23:13.994: VQPC EVENT: -set_hwidb_vlanid: port Fa0/13 to vlan 21, mac: 0023.8bd7.c2b3
*Mar  1 02:23:13.994: VQPC EVENT: saving 0023.8bd7.c2b3 from old vlan 0
*Mar  1 02:23:13.994: VQPC EVENT: changing Fa0/13 to vlan 21
*Mar  1 02:23:13.994: VQPC LEARN: adding mac 0023.8bd7.c2b3 on vlan 21, port Fa0/13, type = 0x0001
*Mar  1 02:23:13.994: VQPC LEARN: deleting mac 0023.8bd7.c2b3 on vlan 0, port Fa0/13
*Mar  1 02:23:13.994: VQPC LEARN: changing mac 0023.8bd7.c2b3 on vlan 21, port Fa0/13 to FORWARDING

Como vemos, asigna la dirección MAC la VLAN 21 (GESTION):

Switch#show  vlan 

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
21   GESTION                          active    Fa0/13
22   USUARIOS                         active   
23   INVITADOS                        active    

Switch#show  interface fastEthernet  0/13 switchport 
Name: Fa0/13
Switchport: Enabled
Administrative Mode: dynamic access
Operational Mode: dynamic access
Administrative Trunking Encapsulation: dot1q
Operational Trunking Encapsulation: native
Negotiation of Trunking: Off
Access Mode VLAN: 21 (GESTION)
Trunking Native Mode VLAN: 1 (default)
Administrative Native VLAN tagging: enabled
Voice VLAN: none
Administrative private-vlan host-association: none 
Administrative private-vlan mapping: none 
Administrative private-vlan trunk native VLAN: none
Administrative private-vlan trunk Native VLAN tagging: enabled
Administrative private-vlan trunk encapsulation: dot1q
Administrative private-vlan trunk normal VLANs: none
Administrative private-vlan trunk associations: none
Administrative private-vlan trunk mappings: none
Operational private-vlan: none
Trunking VLANs Enabled: ALL
Pruning VLANs Enabled: 2-1001
Capture Mode Disabled

Ahora la desconecamos y la conectamos a otra toma del switch( fa0/17)

*Mar  1 02:24:42.938: VQPC EVENT: -pm_port_vqp_start: port Fa0/17
*Mar  1 02:24:44.650: VQPC LEARN: 
*Mar  1 02:24:44.650: VQPC LEARN: -learning mac 0023.8bd7.c2b3 on vlan 0, port Fa0/17
*Mar  1 02:24:44.650: VQPC LEARN: adding mac 0023.8bd7.c2b3 on vlan 0, port Fa0/17, type = 0x0021
*Mar  1 02:24:44.650: VQPC: allocating transID 0x00000491
*Mar  1 02:24:44.650: VQPC PAK: xmt transaction ID = 0x00000491
*Mar  1 02:24:44.650: VQPC PAK: sending query to VMPS
*Mar  1 02:24:44.650: VQPC PAK:  
*Mar  1 02:24:44.650: VQPC PAK: rcvd packet from VMPS
*Mar  1 02:24:44.650: VQPC PAK: transaction ID = 0x00000491
*Mar  1 02:24:44.650: VQPC: rcvd response, transID = 0x00000491
*Mar  1 02:24:44.650: VQPC PAK: VLAN name TLV, vlanName = GESTION
*Mar  1 02:24:44.650: VQPC PAK: Cookie TLV, cookie = 0023.8bd7.c2b3, length = 6
*Mar  1 02:24:44.650: VQPC EVENT: -set_hwidb_vlanid: port Fa0/17 to vlan 21, mac: 0023.8bd7.c2b3
*Mar  1 02:24:44.650: VQPC EVENT: saving 0023.8bd7.c2b3 from old vlan 0
*Mar  1 02:24:44.650: VQPC EVENT: changing Fa0/17 to vlan 21
*Mar  1 02:24:44.658: VQPC LEARN: adding mac 0023.8bd7.c2b3 on vlan 21, port Fa0/17, type = 0x0001
*Mar  1 02:24:44.658: VQPC LEARN: deleting mac 0023.8bd7.c2b3 on vlan 0, port Fa0/17
*Mar  1 02:24:44.658: VQPC LEARN: changing mac 0023.8bd7.c2b3 on vlan 21, port Fa0/17 to FORWARDING
*Mar  1 02:24:44.943: %LINK-3-UPDOWN: Interface FastEthernet0/17, changed state to up
*Mar  1 02:24:45.950: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/17, 
                      changed state to up

Switch#sh mac-address-table | inc DYNAMIC
  21    0023.8bd7.c2b3    DYNAMIC     Fa0/17

Switch#show  vlan                                    

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
21   GESTION                          active    Fa0/13, Fa0/17
22   USUARIOS                         active   
23   INVITADOS                        active    

Vemos que la interfaz Fa0/13 todavía está asignada a la VLAN GESTION, por lo que conectamos otro equipo dicho puerto:

*Mar  1 00:03:35.016: VQPC EVENT: -pm_port_vqp_start: port Fa0/13
*Mar  1 00:03:36.887: VQPC LEARN: 
*Mar  1 00:03:36.887: VQPC LEARN: -learning mac 0005.1b00.3f81 on vlan 0, port Fa0/13
*Mar  1 00:03:36.887: VQPC LEARN: adding mac 0005.1b00.3f81 on vlan 0, port Fa0/13, type = 0x0021
*Mar  1 00:03:36.887: VQPC: allocating transID 0x00000061
*Mar  1 00:03:36.887: VQPC PAK: xmt transaction ID = 0x00000061
*Mar  1 00:03:36.887: VQPC PAK: sending query to VMPS
*Mar  1 00:03:36.887: VQPC PAK:  
*Mar  1 00:03:36.887: VQPC PAK: rcvd packet from VMPS
*Mar  1 00:03:36.887: VQPC PAK: transaction ID = 0x00000061
*Mar  1 00:03:36.887: VQPC: rcvd response, transID = 0x00000061
*Mar  1 00:03:36.887: VQPC PAK: VLAN name TLV, vlanName = INVITADOS
*Mar  1 00:03:36.887: VQPC PAK: Cookie TLV, cookie = 0005.1b00.3f81, length = 6
*Mar  1 00:03:36.887: VQPC EVENT: -set_hwidb_vlanid: port Fa0/13 to vlan 23, mac: 0005.1b00.3f81
*Mar  1 00:03:36.887: VQPC EVENT: saving 0005.1b00.3f81 from old vlan 0
*Mar  1 00:03:36.887: VQPC EVENT: changing Fa0/13 to vlan 23
*Mar  1 00:03:36.895: VQPC LEARN: adding mac 0005.1b00.3f81 on vlan 23, port Fa0/13, type = 0x0001
*Mar  1 00:03:36.895: VQPC LEARN: deleting mac 0005.1b00.3f81 on vlan 0, port Fa0/13
*Mar  1 00:03:36.895: VQPC LEARN: changing mac 0005.1b00.3f81 on vlan 23, port Fa0/13 to FORWARDING
*Mar  1 00:03:37.021: %LINK-3-UPDOWN: Interface FastEthernet0/13, changed state to up
*Mar  1 00:03:38.028: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/13, 
                      changed state to up

Puesto que la dirección MAC no está autorizada por la política definida, la asigna dinámicamente a la VLAN INVITADOS.

Switch#show  vlan 

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
21   GESTION                          active    Fa0/17
22   USUARIOS                         active    Fa0/24
23   INVITADOS                        active    Fa0/13

Si ahora cambiamos la política al modo secure y sin VLAN de fallback y conectamos el mismo equipo:

*Mar  1 00:12:57.019: VQPC LEARN: 
*Mar  1 00:12:57.019: VQPC LEARN: -learning mac 0005.1b00.3f81 on vlan 0, port Fa0/13
*Mar  1 00:12:57.019: VQPC LEARN: adding mac 0005.1b00.3f81 on vlan 0, port Fa0/13, type = 0x0021
*Mar  1 00:12:57.019: VQPC: allocating transID 0x00000151
*Mar  1 00:12:57.019: VQPC PAK: xmt transaction ID = 0x00000151
*Mar  1 00:12:57.019: VQPC PAK: sending query to VMPS
*Mar  1 00:12:57.019: VQPC PAK:  
*Mar  1 00:12:57.019: VQPC PAK: rcvd packet from VMPS
*Mar  1 00:12:57.019: VQPC PAK: transaction ID = 0x00000151
*Mar  1 00:12:57.019: VQPC: rcvd response, transID = 0x00000151
*Mar  1 00:12:57.019: %VQPCLIENT-2-SHUTDOWN: Interface Fa0/13 shutdown by VMPS
*Mar  1 00:12:57.019: %PM-4-ERR_DISABLE: vmps error detected on Fa0/13, putting Fa0/13 in 
                      err-disable state
*Mar  1 00:12:57.019: VQPC EVENT: -pm_port_vqp_stop: port Fa0/13
*Mar  1 00:12:57.019: VQPC EVENT: port Fa0/13, REMOVE dynamic access config
*Mar  1 00:12:57.019: VQPC EVENT: deleting all addresses on vlan 0,t Fa0/13
*Mar  1 00:12:57.019: VQPC EVENT: Deleted TCAM catch-all for port Fa0/13
*Mar  1 00:12:57.019: VQPC EVENT: -set_hwidb_vlanid: port Fa0/13 to vlan 0, mac: NULL
*Mar  1 00:12:57.019: VQPC EVENT: changing Fa0/13 to vlan 0
*Mar  1 00:12:58.026: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/13, 
                      changed state to down
*Mar  1 00:12:59.024: %LINK-3-UPDOWN: Interface FastEthernet0/13, changed state to down

Switch#show interfaces fas 0/13 status 

Port      Name     Status       Vlan        Duplex  Speed Type
Fa0/13             err-disabled unassigned  auto    auto 10/100BaseTX

Podemos comprobar como efectivamente ha desconectado la interfaz del switch y así aparece en las estadísticas del protocolo VMPS:

Switch#show  vmps statistics
VMPS Client Statistics
----------------------
VQP  Queries:               53
VQP  Responses:             20
VMPS Changes:               0
VQP  Shutdowns:             5
VQP  Denied:                0
VQP  Wrong Domain:          0
VQP  Wrong Version:         0
VQP  Insufficient Resource: 0

Como hemos podido ver, esta solución nos proporciona algo más de seguridad que la solución habitual, mejorando la mobilidad por nuestra red. No obstante, presenta otros problemas de seguridad que veremos en futuras entradas.

Comments

  1. http://fabrizzio%20chavez says

    buenas! felicito a esta publicacion porque muestra muchos puntos de forma ordenada, y en comparación a otras guias esta es la mas completa que vi, de todas maneras quiero consultar algunos puntos:
    – ¿el servidor openvmps a que puerto esta conectado a uno dinámico o alguno estático?
    – ¿como instalo el servidor vmps de forma correcta?
    – ¿que comandos me permiten ver que el servidor vmps este ya en funcionamiento?
    – al querer ejecutar esta linea “perl vqpcli.pl -s 172.18.0.150 -v s2 -m 0023.8bd7.c2b3” no me reconoce el comando perl o vqpcli.pl, en todo caso no se si podrian explicar esa parte con un poco de detalle por favor.

    por lo demas veo bien, hice toda la configuracion , pero parece que no quiere comunicarse con el servidor, entonces no se si podrian ilustrar con un grafico de ejm q diga de que puerto a que puerto esta conectado el servidor y tambien mas detalles con respecto a la instalacion y ejecucion del openvmps. gracias de antemano.

  2. http://joseluis says

    Gracias por el comentario Fabrizzio; sobre tus cuestiones

    – ¿el servidor openvmps a que puerto esta conectado a uno dinámico o alguno estático?

    En uno estatico, solo se configuraron los puertos dinamicos aquellos en los que se simula la presencia de equipos de usuarios.

    – ¿como instalo el servidor vmps de forma correcta?

    Es posible que para la distribucion que uses tengas paquetes compilados; para este post se compilo a mano el codigo, una vez descargado mediante ./configure && make y si quieres instalarlo, make install.

    – ¿que comandos me permiten ver que el servidor vmps este ya en funcionamiento?

    El demonio se lanza como vmpsd, por lo tanto, un ps en busca de ese nombre es suficiente para saber si esta arrancado, una vez arrancado, ya puedes hacer consultas.

    – al querer ejecutar esta linea “perl vqpcli.pl -s 172.18.0.150 -v s2 -m 0023.8bd7.c2b3″ no me reconoce el comando perl o vqpcli.pl, en todo caso no se si podrian explicar esa parte con un poco de detalle por favor.

    Debes tener instalado el paquete perl para poder lanzar el script de consulta, lo tienes instalado?

    Un saludo

  3. http://fabrizzio%20chavez says

    gracias por la respuesta, bueno efectivamente recién encontre el paquete perl dentro de la carpeta tools,lo que me queda en duda es lo siguiente:
    – el servidor openvmps cuando se conecta a un puerto estático, este puerto debe tener algun tipo de configuración adicional o dejarlo como esta predeterminado en la vlan 1? lo pongo en modo trunk o access? o simplemente no hago nada ? xD
    – se debe habilitar algún puerto en el mismo linux para que escuche?¿y si es asi que puerto es y que lineas de código necesito?

    por lo demás ya lo veo mas claro, esto seria las dudas que me están quedando y bueno espero salga este proyecto, de todas maneras agradezco su respuesta y a este post que me sirvió de mucho, agradezco mucho su ayuda y gracias :D un saludo!

  4. http://fabrizzio%20chavez says

    gracias por la ayuda , me salio el trabajo de maravilla, solo cabe resaltar, que la vlan que use el servidor debe tener una ip asignada, por ejm si mi servidor tiene 192.168.1.5 con mascara 24 y puerta de enlace predeterminada 192.168.1.1, se pone interface vlan 1 , y luego se pone ip address 192.168.1.1 255.255.255.0; es decir que la vlan asignada al puerto donde se conecta el servidor debe ser su gateway, para que este en red la comunicacion que se consideraria UPD/IP, por lo demas está completo el trabajo, gracias.

  5. http://joseluis says

    hola
    Para las pruebas no se uso ningun demonio del sistema, simplemente se lanzo el binario vmpsd de forma manual. En caso de que la instalacion no cree el automaticamente el script de inicio/parada del demonio, no creo que hubiera problema en crear uno nuevo similar al resto de scripts de sistema.
    Mira en la lista de procesos la entrada del proceso que buscas, normalmente vmpsd.

  6. Después de configurar el servidor VMPS, clientes conectadas en las puertas que funcionarán como dinámica no ir a ninguna VLAN. Las puertas están simplemente obstruidos. ¿Qué puede hacer que esto suceda?

  7. http://joseluis says

    Hola Braz,
    No entiendo lo que quieres decir; los puertos estan deshabilitados? tienes algun otro tipo de seguridad activada tipo port-security? cual es el estado de las interfaces?

  8. Hola. ¿Qué sistema operativo se utilizan para aplicar el Service VMPS? ¿Qué versión de Linux?
    Gracias

  9. Hola, levante el servidor y anda de maravillas, pero realice una prueba de clonado de mac y me asigna ambos puertos, como hacer que me reconozca solo una mac y si existe duplicidad de mac, la segunda mac identica no la reconozca? . Gracias

  10. http://joseluis says

    Hola

    Braz: las pruebas las hice con debian 6
    Edgar: esta solucion es estandar, para el caso que comentas, se quedaria corta y seguramente habria que añadir otras medidas de seguridad tipo port security o validacion 802.1x.

  11. http://andres says

    Me sale el error cannot bien socket gracias por la ayuda

  12. http://joseluis says

    Buenos dias Andres

    Por ese error, revisa si tienes privilegios para lanzar el servicio en el puerto que tengas configurado y si no hay ya otro servicio en el mismo.