Evolucionando nuestro VPMS

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.