Seguridad con VLANs
VACL (VLAN ACL o VLAN maps) se configuran como un access map VLAN muy parecido a un route map (donde se definen coincidencias y acciones). Cada VACL consiste en un nombre que agrupa a una o más sentencias.
Primero definimos la VACL con el nombre y número de secuencia (opcional):
switch(config)# vlan access-map map-name [sequence-number]
Cada access map se evalúa en orden de secuencia (sequence-number) por lo que es importante indicarlo si no será en orden de configuración.
Seguimos definiendo las condiciones de coincidencia que identifica el tráfico que se filtrará. Estas coincidencias se definidas por listas de acceso IP o direcciones MAC. Para ello usamos uno o más de los siguientes comandos:
switch(config-access-map)# match ip address {acl-number | acl-name} switch(config-access-map)# match mac address acl-name
Ahora debemos definir la acción a tomar si se produce una coincidencia (la primera que sea):
switch(config-access-map)# action {drop | forward [capture] | redirect type mod/num}
Finalmente debemos aplicar la VACL a la VLAN usando el comando:
switch(config)# vlan filter map-name vlan-list vlan-list
Hay que tener en cuenta que la VACL se aplica GLOBALMENTE a una o más VLANs y no a una interface VLAN (SVI).
EXAMEN: Recordar que tanto routed como bridge ACLs se pueden aplicar tanto inbound como outbound y que las VLAN maps y router ACLs se pueden usar en conjunción.
VLANs privadas (PVLAN) permiten separar en una switch diferentes interfaces de una misma red que no se ven entre ellas (o si entre algunas) pero que todas si permiten ver el GW, es como aislar redes pero en una misma red. Para ello tenemos una vlan primaria (primary) que puede ser asociada con vlans unidireccionales o secundarias (secondary). Los Hosts o dispositivos finales asociados con la vlan secundaria pueden SOLO comunicarse con la vlan primaria (que suele ser el router o GW), pero no pueden comunicarse con otras interfaces de otras vlans secundarias. Un ejemplo sería una vlan con clientes de proveedor de servicios que entre ellos no tiene por qué verse pero SI tienen TODOS que ver el GW para comunicarse con el exterior.
Una VLAN secundaria puede configurarse de dos tipos:
Además cada interface debe configurarse en un modo:
NOTA: Las VLAN privadas se configuran utilizando casos especiales de VLAN regulares. Sin embargo, el Protocolo VTP no pasa ninguna información sobre la configuración de VLAN privada. Por lo tanto, las VLAN privadas son solo localmente significativas para un switch. Cada una de las VLAN privadas debe configurarse localmente en cada conmutador que las interconecta.
Primero definimos las VLANs secundarias (tantas como necesitemos) con los comandos:
switch(config)# vlan vlan-id switch(config-vlan)# private-vlan {isolated | community}
Definimos la VLAN primaria e indicamos las VLANs secundarias asociadas a ella con estos comandos:
switch(config)# vlan vlan-id switch(config-vlan)# private-vlan primary switch(config-vlan)# private-vlan association {secondary-vlan-list | add secondary-vlan-list | remove secondary-vlan-list}
Definimos la función de la interface que participará en la VLAN privada con el comando:
switch(config)# interface type mod/num switch(config-if)# switchport mode private-vlan {host | promiscuous}
Si la interface se conecta un host debe ir en host y debemos asociar la VLAN principal y secundaria con el comando:
switch(config-if)# switchport private-vlan host-associaton primary-vlan-id secondary-vlan-id
Si la interface se conecta un GW (router, firewall, etc) debe ir en promiscuous y debemos mapear la interface a la VLAN primaria y a las VLANs secundarias con el comando:
switch(config-if)# switchport private-vlan mapping primary-vlan-id secondary-vlan-id | [add secondary-vlan-id} | [remove secondary-vlan-id}
Como una interface VLAV SVI es de capa 3 la configuración cambia ligeramente, en la interface VLAN debemos mapear las VLANs secundarias sin indicar la VLAN primaria que es la propia interface VLAN SVI con el comando:
switch(config)# interface vlan vlan-id switch(config-if)# private-vlan mapping secondary-vlan-list | [add secondary-vlan-id} | [remove secondary-vlan-id}
Cuando un puerto está configurado con Dynamic Trunking Protocol (DTP) (por defecto en Cisco una interface está así configurada) y la interface está en auto puede negociar la interface para convertirse en un Trunk, por eso un atacante que conecte un host (PC, server, etc) a una interface DTP en auto podría "negociar" con el switch para establecer un Trunk entre el host y el switch lo que se llama Switch Spoofing (engañar al switch).
Por ello es conveniente que cada interface que no se use ponerla en shutdown y configurar las interfaces donde se conecten usuarios finales en modo acceso y con la VLAN correspondiente con los comandos:
switch(config)# interface type mod/num switch(config-if)# switchport access vlan-id switch(config-if)# switchport mode access
El exploit llamado VLAN Hopping consiste en que un atacante marca doblemente el tráfico para poder alcanzar una VLAN que de por si no debería alcanzar. Primero marca con la VLAN que NO puede alcanzar y por encima vuelve a encapsular con la VLAN en la que se encuentra (que será la VLAN nativa), por ejemplo: [VLAN-30][VLAN 50][trama].
Para que este exploit funcione se deben cumplir estas condiciones:
Para evitar este tipo de ataque es conveniente seguir estos pasos:
También podemos configurar que la VLAN nativa vaya marcada siempre (y que descarte todo el tráfico SIN marcar) con el comando:
switch(config)# vlan dot1q tag native