En este mismo blog, hace ya casi dos años, vimos el uso de un servidor VPMS (VLAN Management Policy Server) como punto de partida para poder asignar de forma dinámica los equipos de nuestra red a las distintas vLANs corporativas. Esta asignación estaba basada en la dirección MAC de los clientes, algo que habitualmente es complicado de mantener.
Tiempo mas tarde, hablamos de AAA (authentication, authorization and accounting ) en dos entradas (ver la primera y la segunda), donde vimos a modo de ejemplo, la autenticación de la conexión a red de los usuarios mediante 802.1x, usando para ello un servidor Radius.
Teniendo esto en mente como punto de partida, usaremos ambas aproximaciones para mejorar el control de acceso basado en MAC, mediante un control de acceso basado en usuario con asignación dinámica de vLAN.
Para ello, dispondremos de los siguientes elementos:
- Switch de acceso a la red (Cisco 2960) como Authenticator (172.18.0.200).
- Servidor Radius (Freeradius) como Authentication Server (172.17.2.23).
- Equipo de usuario (Microsoft Windows) como Supplicant.
La configuración inicial es similar a la vista en las entradas comentadas anteriormente; únicamente cambia la configuración de un router a un switch, no obstante, la repasamos rápidamente:
Configuramos nuestro switch como cliente Radius
client 172.18.0.200 { secret = password shortname = switch nasstype = cisco }
Configuramos un usuario en el servidor Radius:
juanito Cleartext-Password := "password" Service-Type = NAS-Prompt-User,
Configuramos el grupo de autenticación Radius en nuestro switch:
Switch(config)# aaa new-model Switch(config)# aaa authentication dot1x default group radius Switch(config)# aaa authorization network default group radius Switch(config)# radius-server host 172.17.2.23 auth-port 1812 acct-port 1813 Switch(config)# radius-server deadtime 15 Switch(config)# radius-server key password
Probamos el acceso desde el propio dispositivo:
Switch(config)# test aaa group radius juanito password legacy Attempting authentication test to server-group radius using radius User was successfully authenticated.
Lógicamente, en nuestro servidor Radius vemos la petición de autenticación:
Sending Access-Accept of id 3 to 172.18.0.200 port 1645 Service-Type = NAS-Prompt-User Finished request 0. Going to the next request Waking up in 4.9 seconds. Cleaning up request 0 ID 3 with timestamp +54 Ready to process requests.
A continuación, activamos 802.1x en el switch y lo configuramos en las distintas interfaces que deben autenticar las conexiones:
Switch(config)# dot1x system-auth-control Switch(config)# interface fastethernet0/1 Switch(config-if)# switchport mode access Switch(config-if)# dot1x port-control auto
En primera instancia, tras configurar el cliente Microsoft Windows para que use 802.1x, sin proporcionarle credenciales validas (intenta conectar como usuario admin), el puerto se encuentra en estado unauthorized.
rad_recv: Access-Request packet from host 172.18.0.200 port 1645, id=7, length=252 User-Name = "admin" Service-Type = Framed-User Framed-MTU = 1500 Called-Station-Id = "00-24-F7-31-65-01" Calling-Station-Id = "00-23-8B-D7-C2-B3" EAP-Message = 0x0204005719800000004d160301004801000044030154645b90ee44b4c850d326f c8490c49f27f059d0f4678e7af4de61f3ee59458600001600040005000a000900640062000300060013001200 6301000005ff01000100 Message-Authenticator = 0xeff1ecf7d1d39606489db0221e8c5329 NAS-Port-Type = Ethernet NAS-Port = 50001 NAS-Port-Id = "FastEthernet0/1" State = 0x192fe485182bfd62a347eaa218ef304c NAS-IP-Address = 172.18.0.200 Dot1x Info for FastEthernet0/1 ----------------------------------- PAE = AUTHENTICATOR PortControl = AUTO ControlDirection = Both HostMode = SINGLE_HOST Violation Mode = PROTECT ReAuthentication = Disabled QuietPeriod = 60 ServerTimeout = 30 SuppTimeout = 30 ReAuthPeriod = 3600 (Locally configured) ReAuthMax = 2 MaxReq = 2 TxPeriod = 30 RateLimitPeriod = 0 Dot1x Authenticator Client List Empty Port Status = UNAUTHORIZED
Tras proporcionar credenciales validas (usuario juanito), el puerto queda autorizado para la conexión:
Dot1x Info for FastEthernet0/1 ----------------------------------- PAE = AUTHENTICATOR PortControl = AUTO ControlDirection = Both HostMode = SINGLE_HOST Violation Mode = PROTECT ReAuthentication = Disabled QuietPeriod = 60 ServerTimeout = 30 SuppTimeout = 30 ReAuthPeriod = 3600 (Locally configured) ReAuthMax = 2 MaxReq = 2 TxPeriod = 30 RateLimitPeriod = 0 Dot1x Authenticator Client List ------------------------------- Domain = DATA Supplicant = 0023.8bd7.c2b3 Auth SM State = AUTHENTICATED Auth BEND SM State = IDLE Port Status = AUTHORIZED Authentication Method = Dot1x Authorized By = Authentication Server Vlan Policy = N/A
Como podemos ver, no se ha asignado ninguna vLAN a la conexión autenticada, dejando esta asignación directamente al switch.
Hasta aquí, todo ha funcionado de forma similar a lo visto en el post sobre AAA. Ahora estamos en el punto de partida para poder asignar las distintas vLANs a los usuarios.
Como ya vimos, lo primero es dar de alta las interfaces en el switch. En este caso, creamos una vLAN adicional (24) cuyo uso veremos más tarde:
VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 21 GESTION active 22 USUARIOS active 23 INVITADOS active 24 RESTRICTED active
Lo primero que haríamos podría ser asignar a todos los clientes que no han sido autenticados, en la vLAN de invitados. En esta vLAN se podría permitir sólo cierto tipo de tráfico en nuestra red.
Para ello, definimos la vLAN guest en la interfaz configurada:
Switch(config)# interface fas 0/1 Switch(config-if)# dot1x guest-vlan 23
De esta forma, cuando el cliente conecta, la conexión inicia el proceso de autenticación (authenticating), indicando que ya dispone de una Guest-Vlan configurada:
Dot1x Info for FastEthernet0/1 ----------------------------------- PAE = AUTHENTICATOR PortControl = AUTO ControlDirection = Both HostMode = SINGLE_HOST Violation Mode = PROTECT ReAuthentication = Disabled QuietPeriod = 60 ServerTimeout = 30 SuppTimeout = 30 ReAuthPeriod = 3600 (Locally configured) ReAuthMax = 2 MaxReq = 2 TxPeriod = 30 RateLimitPeriod = 0 Guest-Vlan = 23 Dot1x Authenticator Client List ------------------------------- Domain = DATA Supplicant = 0023.8bd7.c2b3 Auth SM State = AUTHENTICATING Auth BEND SM State = REQUEST Port Status = UNAUTHORIZED Authentication Method = Dot1x
Tras vencer el timeout (la autenticación no ha sido denegada), podemos ver como el puerto queda asignado a la vLAN de invitados:
Dot1x Info for FastEthernet0/1 ----------------------------------- PAE = AUTHENTICATOR PortControl = AUTO ControlDirection = Both HostMode = SINGLE_HOST Violation Mode = PROTECT ReAuthentication = Disabled QuietPeriod = 60 ServerTimeout = 30 SuppTimeout = 30 ReAuthPeriod = 3600 (Locally configured) ReAuthMax = 2 MaxReq = 2 TxPeriod = 30 RateLimitPeriod = 0 Guest-Vlan = 23 Dot1x Authenticator Client List Empty Domain = DATA Port Status = AUTHORIZED Authorized By = Guest-Vlan Operational HostMode = MULTI_HOST Vlan Policy = 23
El siguiente punto podría ser diferenciar la autenticación por timeout de una autenticación expresamente denegada. En versiones más actuales de IOS, es posible diferenciar esto mediante el uso de dos vLANs, para ello, usaremos nuestra vLAN 24, y de igual manera, configuramos el puerto.
Switch(config)# interface fas 0/1 Switch(config-if)# dot1x auth-fail max-attempts 1 Switch(config-if)# dot1x auth-fail vlan 24
Tras fallar expresamente la autenticación, el puerto queda asignado a dicha vLAN, sin acceso a la red:
Dot1x Info for FastEthernet0/1 ----------------------------------- PAE = AUTHENTICATOR PortControl = AUTO ControlDirection = Both HostMode = SINGLE_HOST Violation Mode = PROTECT ReAuthentication = Disabled QuietPeriod = 60 ServerTimeout = 30 SuppTimeout = 30 ReAuthPeriod = 3600 (Locally configured) ReAuthMax = 2 MaxReq = 2 TxPeriod = 30 RateLimitPeriod = 0 Auth-Fail-Vlan = 24 Auth-Fail-Max-attempts = 1 Guest-Vlan = 23 Dot1x Authenticator Client List ------------------------------- Domain = DATA Supplicant = 0024.beec.2526 Auth SM State = AUTHENTICATED Auth BEND SM State = IDLE Port Status = AUTHORIZED Authentication Method = Dot1x Authorized By = Auth-Fail-Vlan Vlan Policy = 24
Y podemos ver la asignación directamente en el switch:
Switch# show vlan id 24 VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 24 RESTRICTED active Fa0/1
Finalmente, llegamos al objetivo deseado, poder asignar a nuestro usuario juanito a la vLAN de GESTION (21) como gestor de red que es. Para ello, debemos definir esta asignación en el fichero de usuarios de Radius:
juanito Cleartext-Password := "password" Service-Type = NAS-Prompt-User, Tunnel-type=VLAN, Tunnel-Medium-Type=IEEE-802, Tunnel-Private-Group-Id="21",
Tras volver a autenticarnos en el sistema, veremos en el log del servidor el envío de los nuevos parámetros definidos para la asignación de vLAN:
Sending Access-Accept of id 22 to 172.18.0.200 port 1645 Service-Type = NAS-Prompt-User Tunnel-Type:0 = VLAN Tunnel-Medium-Type:0 = IEEE-802 Tunnel-Private-Group-Id:0 = "21" User-Name = "juanito"
Quedando la interfaz donde se ha conectado el cliente, asignada finalmente a la vLAN de gestión:
Dot1x Info for FastEthernet0/1 ----------------------------------- PAE = AUTHENTICATOR PortControl = AUTO ControlDirection = Both HostMode = SINGLE_HOST Violation Mode = PROTECT ReAuthentication = Disabled QuietPeriod = 60 ServerTimeout = 30 SuppTimeout = 30 ReAuthPeriod = 3600 (Locally configured) ReAuthMax = 2 MaxReq = 2 TxPeriod = 30 RateLimitPeriod = 0 Critical-Auth = Enabled Auth-Fail-Vlan = 24 Auth-Fail-Max-attempts = 1 Guest-Vlan = 23 Dot1x Authenticator Client List ------------------------------- Domain = DATA Supplicant = 0024.beec.2526 Auth SM State = AUTHENTICATED Auth BEND SM State = IDLE Port Status = AUTHORIZED Authentication Method = Dot1x Authorized By = Authentication Server Vlan Policy = 21 Switch# show vlan id 21 VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 21 GESTION active Fa0/1
Con esta asignación, podríamos mejorar la seguridad de nuestra red interna un poco más que con la solución VPMS vista, ya que el control de acceso se realizaría en base al usuario y no al dispositivo.
Lógicamente, podemos disponer de ambas soluciones, dependiendo de las necesidades de acceso a nuestra red. Por ejemplo, dejando la parte de autenticación de usuarios a los controladores de dominio existentes y unificando criterios de seguridad a nivel de contraseñas. Otro caso podría ser una visita que requiere acceso a internet (vía red cableada) pero no dispone de usuario en el dominio; en este caso, la vLAN de invitados podría redirigir el tráfico a un portal cautivo sobre el cual dispondría de unas credenciales temporales de uso durante su estancia en las oficinas.
Aunque hemos visto una breve aproximación de un control de acceso a red, existen multitud de soluciones NAC en el mercado, tanto libres como comerciales, para controlar este tipo de accesos, no sólo proporcionando acceso a la red en caso de disponer de usuario válido, sino también, para comprobar el sistema cliente y verificar que dispone de antivirus actualizado, parches de seguridad instalados, etc.
Esperamos que os haya resultado interesante. Si tenéis alguna duda o comentario sobre su aplicación, implementación o funcionamiento, podéis indicarlo en los comentarios.