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.
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.
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
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!
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.
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.
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?
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?
Hola. ¿Qué sistema operativo se utilizan para aplicar el Service VMPS? ¿Qué versión de Linux?
Gracias
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
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.
Me sale el error cannot bien socket gracias por la ayuda
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.