Demystifying IBNS 2.0 Configuration

In this article I would like to go through a typical Identity Based Networking Services (IBNS 2.0) configuration, breaking down each so that we can better understand the configuration. While there are many configuration elements of secure network access, this article will focus on the Cisco Common Classification Policy Language (C3PL) configurations.

I must admit, when I first got a glance of some IBNS 2.0 configuration, I was a little taken back at the amount of configuration. However, after reading up about it, and refreshing parts of my CCNP R&S skills, I was able to understand how IBNS 2.0 configuration comes together.

This article will NOT focus on use cases for using IBNS 2.0, however, I would like to point out some good, online documentation that will provide you with some useful information.

Just before we jump into the configuration element, I think its worth pointing out that IBNS 2.0 works on Cisco Common Classification Policy Language (C3PL). Simply put, C3PL is a combination of Class-maps, Policy-maps and Service-Policies. If you understand C3PL works, you shouldn’t have any trouble getting your head around the configuration you’re about to see. It’s also worth pointing out that the terminology used for C3PL in the IBNS world is slightly different to those mentioned above:

  • Class-map = Control Class
  • Policy-map = Control Policy
  • Service policy = Control Service Policy

Considerations

  • When one has decided to configure IBNS 2.0 configuration, it is often easier to implement the required global configurations as well as the interface level configurations using the classic (IBNS 1.0) way. This is because the configuration is converted automatically when you enter the required command (authentication display new-style) to use IBNS 2.0.
  • When transitioning to IBNS 2.0 you should remember the following. You will be able to transition back to IBNS 1.0 ONLY if you’ve not made changes to the control policy, any IBNS 2.0 configurations or issued a copy run start. If you’ve done any of those that I’ve just mentioned, you won’t be able to change back to IBNS 1.0.

Demystifying IBNS 2.0

Whether you’ve automatically converted your IBNS 1.0 configuration or you’ve decided to start your IBNS 2.0 configuration from scratch, you’ll be surprised at the amount of configuration lines that you could end up with depending on your requirements. Below is a snippet of the IBNS 2.0 configuration I currently have configured in my lab environment.

service-template DEFAULT_LINKSEC_POLICY_MUST_SECURE
linksec policy must-secure
service-template DEFAULT_LINKSEC_POLICY_SHOULD_SECURE
linksec policy should-secure
service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
voice vlan
service-template CRITICAL_AUTH_VLAN_DATA
vlan <VLAN>
!
service-template CRITICAL_AUTH_ACCESS
description ** Access Policy for Inaccessible Auth Bypass **
access-group IPV4_CRITICAL_ACL
!
class-map type control subscriber match-all AAA_SVR_DOWN_AUTHD_HOST
match result-type aaa-timeout
match authorization-status authorized
!
class-map type control subscriber match-all AAA_SVR_DOWN_UNAUTHD_HOST
match result-type aaa-timeout
match authorization-status unauthorized
!
class-map type control subscriber match-all DOT1X
match method dot1x
!
class-map type control subscriber match-all DOT1X_FAILED
match method dot1x
match result-type method dot1x authoritative
!
class-map type control subscriber match-all DOT1X_MEDIUM_PRIO
match authorizing-method-priority gt 20
!
class-map type control subscriber match-all DOT1X_NO_RESP
match method dot1x
match result-type method dot1x agent-not-found
!
class-map type control subscriber match-all DOT1X_TIMEOUT
match method dot1x
match result-type method dot1x method-timeout
!
class-map type control subscriber match-any IN_CRITICAL_AUTH
match activated-service-template CRITICAL_AUTH_ACCESS
match activated-service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
!
class-map type control subscriber match-any IN_CRITICAL_VLAN_DATA
match activated-service-template CRITICAL_AUTH_VLAN_DATA
match activated-service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
!
class-map type control subscriber match-all MAB
match method mab
!
class-map type control subscriber match-all MAB_FAILED
match method mab
match result-type method mab authoritative
!
class-map type control subscriber match-none NOT_IN_CRITICAL_AUTH
match activated-service-template CRITICAL_AUTH_ACCESS
match activated-service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
!
class-map type control subscriber match-none NOT_IN_CRITICAL_VLAN_DATA
match activated-service-template CRITICAL_AUTH_VLAN_DATA
match activated-service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
!
class-map type control subscriber match-all NRH
!
class-map type control subscriber match-all WEBAUTH_FAILED
!
policy-map type control subscriber POLICY_DATA
event session-started match-all
10 class always do-until-failure
10 authenticate using mab priority 20
event authentication-failure match-first
5 class DOT1X_FAILED do-until-failure
10 terminate dot1x
10 class AAA_SVR_DOWN_UNAUTHD_HOST do-until-failure
10 clear-authenticated-data-hosts-on-port
20 activate service-template CRITICAL_AUTH_ACCESS
30 activate service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
40 authorize
50 pause reauthentication
20 class AAA_SVR_DOWN_AUTHD_HOST do-until-failure
10 pause reauthentication
20 authorize
30 class MAB_FAILED do-until-failure
10 terminate mab
20 authenticate using dot1x priority 10
40 class DOT1X_NO_RESP do-until-failure
10 terminate dot1x
20 authentication-restart 60
50 class NRH do-until-failure
10 terminate webauth
20 authentication-restart 60
60 class NRH do-until-failure
10 terminate webauth
20 authentication-restart 60
80 class WEBAUTH_FAILED do-until-failure
10 terminate webauth
20 authentication-restart 60
90 class always do-until-failure
10 terminate mab
20 terminate dot1x
30 terminate webauth
40 authentication-restart 60
event agent-found match-all
10 class always do-until-failure
10 terminate mab
20 terminate webauth
30 authenticate using dot1x priority 10
event aaa-available match-all
10 class IN_CRITICAL_AUTH do-until-failure
10 clear-session
20 class NOT_IN_CRITICAL_AUTH do-until-failure
10 resume reauthentication
event inactivity-timeout match-all
10 class always do-until-failure
10 clear-session
event authentication-success match-all
10 class always do-until-failure
10 activate service-template DEFAULT_LINKSEC_POLICY_SHOULD_SECURE

:-O Seems like a lot right?

Well don’t worry, lets break it down into more manageable sections so that we can better understand whats going on with all this configuration.

The best way to do this is to separate the control class, control policy and service policy.

Control Class

A control class simply put is a set of conditions that must equal true in order for a control policy to execute actions. Control classes can either match-all, match any or match none in order to get a true result. The screenshot below shows the options we have when creating control classes.

Now lets take a look at the control classes presented in this lab and break each one down. Most of the following control classes were generated when changing from IBNS 1.0 to 2.0.

class-map type control subscriber match-all AAA_SVR_DOWN_AUTHD_HOST
class-map type control subscriber match-all AAA_SVR_DOWN_UNAUTHD_HOST
class-map type control subscriber match-all DOT1X
class-map type control subscriber match-all DOT1X_FAILED
class-map type control subscriber match-all DOT1X_MEDIUM_PRIO
class-map type control subscriber match-all DOT1X_NO_RESP
class-map type control subscriber match-all DOT1X_TIMEOUT
class-map type control subscriber match-any IN_CRITICAL_AUTH
class-map type control subscriber match-any IN_CRITICAL_VLAN
class-map type control subscriber match-all MAB
class-map type control subscriber match-all MAB_FAILED
class-map type control subscriber match-none NOT_IN_CRITICAL_AUTH
class-map type control subscriber match-none NOT_IN_CRITICAL_VLAN
class-map type control subscriber match-all NRH
class-map type control subscriber match-all WEBAUTH_FAILED

Starting with the first control class: class-map type control subscriber match-all AAA_SVR_DOWN_AUTHD_HOST, lets take a look at what the configuration means.

class-map type control subscriber match-all AAA_SVR_DOWN_AUTHD_HOST
 match result-type aaa-timeout
 match authorization-status authorized
  • class-map type control subscriber match-all AAA_SVR_DOWN_AUTHD_HOST <<< We create a control class called AAA_SVR_DOWN_AUTHD_HOST and for the value to be true, everything in the control class must match.
  • match result-type aaa-timeout <<< True if aaa times-out
  • match authorization-status authorized <<< True if an authorization session is authorized.

Moving onto: class-map type control subscriber match-all AAA_SVR_DOWN_UNAUTHD_HOST

class-map type control subscriber match-all AAA_SVR_DOWN_UNAUTHD_HOST
match result-type aaa-timeout
match authorization-status unauthorized
  • class-map type control subscriber match-all AAA_SVR_DOWN_UNAUTHD_HOST <<< We create a control class called AAA_SVR_DOWN_UNAUTHD_HOST and for the value to be true, everything in the control class must match.
  • match result-type aaa-timeout <<< True if aaa times-out
  • match authorization-status unauthorized <<< True if a session is unauthorized

Up next is: class-map type control subscriber match-all DOT1X

class-map type control subscriber match-all DOT1X
match method dot1x
  • class-map type control subscriber match-all DOT1X <<< Control class called DOT1X and for the value to be true, everything in the control class must match.
  • match method dot1x <<< True if the authentication method is 802.1X

The next control class is: class-map type control subscriber match-all DOT1X_FAILED

class-map type control subscriber match-all DOT1X_FAILED
match method dot1x
match result-type method dot1x authoritative
  • class-map type control subscriber match-all DOT1X_FAILED <<< Control class called DOT1X_FAILED and for the value to be true, everything in the control class must match.
  • match method dot1x <<< True if the authentication method is 802.1X
  • match result-type method dot1x authoritative <<< True if the 802.1X authentication method has failed

Next up is: class-map type control subscriber match-all DOT1X_MEDIUM_PRIO

class-map type control subscriber match-all DOT1X_MEDIUM_PRIO
match authorizing-method-priority gt 20
  • class-map type control subscriber match-all DOT1X_MEDIUM_PRIO <<< Control class called DOT1X_MEDIUM_PRIO and for the value to be true, everything in the control class must match.
  • match authorizing-method-priority gt 20 <<< True if the authorization method priority is greater than 20

Next up is: class-map type control subscriber match-all DOT1X_NO_RESP

class-map type control subscriber match-all DOT1X_NO_RESP
match method dot1x
match result-type method dot1x agent-not-found
  • class-map type control subscriber match-all DOT1X_NO_RESP <<< Control class called DOT1X_NO_RESP and for the value to be true, everything in the control class must match.
  • match method dot1x <<< True if the authentication method is 802.1X
  • match result-type method dot1x agent-not-found <<< True when an endpoint doesn’t have an 802.1X supplicant.

Next up is: class-map type control subscriber match-all DOT1X_TIMEOUT

class-map type control subscriber match-all DOT1X_TIMEOUT
match method dot1x
match result-type method dot1x method-timeout
  • class-map type control subscriber match-all DOT1X_TIMEOUT <<< Control class called DOT1X_TIMEOUT and for the value to be true, everything in the control class must match.
  • match method dot1x <<< True if the authentication method is 802.1X
  • match result-type method dot1x method-timeout <<< True if the method which is 802.1x has timed-out

Next up is: class-map type control subscriber match-any IN_CRITICAL_AUTH

class-map type control subscriber match-any IN_CRITICAL_AUTH
match activated-service-template CRITICAL_AUTH_ACCESS
match activated-service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
  • class-map type control subscriber match-any IN_CRITICAL_AUTH <<< Control class called IN_CRITICAL_AUTH and for the value to be true, any one of the service templates within the control class must match.
  • match activated-service-template CRITICAL_AUTH_ACCESS <<< True if the service template CRITICAL_AUTH_ACCESS is matched. This service template has an access-list tied to it and if activated the access-list will be applied to any interface that has the control class assigned to a policy.
  • match activated-service-template DEFAULT_CRITICAL_VOICE_TEMPLATE <<< True if the service template DEFAULT_CRITICAL_VOICE_TEMPLATE is matched. This service template will assign a relevant device to the voice vlan if matched within a policy.

Next up is: class-map type control subscriber match-any IN_CRITICAL_VLAN

class-map type control subscriber match-any IN_CRITICAL_VLAN_DATA
match activated-service-template CRITICAL_AUTH_VLAN_DATA
match activated-service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
  • class-map type control subscriber match-any IN_CRITICAL_VLAN_DATA <<< Control class called IN_CRITICAL_VLAN_DATA and for the value to be true, any one of the service templates within the control class must match.
  • match activated-service-template CRITICAL_AUTH_VLAN_DATA <<< True if the service template CRITICAL_AUTH_VLAN_DATA is matched. This service template will assign the relevant critical vlan if matched within a policy.
  • match activated-service-template DEFAULT_CRITICAL_VOICE_TEMPLATE <<< True if the service template DEFAULT_CRITICAL_VOICE_TEMPLATE is matched. This service template will assign a relevant device to the voice vlan if matched within a policy.

Next up is: class-map type control subscriber match-all MAB

class-map type control subscriber match-all MAB
match method mab
  • class-map type control subscriber match-all MAB <<< Control class called MAB and for the value to be true, everything in the control class must match.
  • match method mab <<< True if the method of authentication is MAC Authentication Bypass (MAB).

Next up is: class-map type control subscriber match-all MAB_FAILED

class-map type control subscriber match-all MAB_FAILED
match method mab
match result-type method mab authoritative
  • class-map type control subscriber match-all MAB_FAILED <<< Control class called MAB_FAILED and for the value to be true, everything in the control class must match.
  • match method mab <<< True if the method of authentication is MAC Authentication Bypass (MAB).
  • match result-type method mab authoritative <<< True if MAB method has failed.

Next up is: class-map type control subscriber match-none NOT_IN_CRITICAL_AUTH

class-map type control subscriber match-none NOT_IN_CRITICAL_AUTH
match activated-service-template CRITICAL_AUTH_ACCESS
match activated-service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
  • class-map type control subscriber match-none NOT_IN_CRITICAL_AUTH <<< Control class called NOT_IN_CRITICAL_AUTH and for the value to be true, none must match.
  • match activated-service-template CRITICAL_AUTH_ACCESS <<< True if the service template CRITICAL_AUTH_ACCESS is not matched.
  • match activated-service-template DEFAULT_CRITICAL_VOICE_TEMPLATE <<< True if service template DEFAULT_CRITICAL_VOICE_TEMPLATE is not matched.

Next up is: class-map type control subscriber match-none NOT_IN_CRITICAL_VLAN

class-map type control subscriber match-none NOT_IN_CRITICAL_VLAN_DATA
match activated-service-template CRITICAL_AUTH_VLAN_DATA
match activated-service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
  • class-map type control subscriber match-none NOT_IN_CRITICAL_VLAN_DATA <<< Control class called NOT_IN_CRITICAL_VLAN_DATA and for the value to be true, none must match.
  • match activated-service-template CRITICAL_AUTH_VLAN_DATA <<< True if the service template CRITICAL_AUTH_VLAN_DATA is not matched.
  • match activated-service-template DEFAULT_CRITICAL_VOICE_TEMPLATE <<< True if service template DEFAULT_CRITICAL_VOICE_TEMPLATE is not matched.

The last two control classes below are not used in this example so will not be discussed.

class-map type control subscriber match-all NRH
class-map type control subscriber match-all WEBAUTH_FAILED

Now that we’ve taken a look at the control classes and now hopefully understand them, we will now take a look at the service templates.

Service Templates

Service Templates contain attributes that can be applied to subscriber sessions through control policies. Features such as ACL’s & VLAN’s as used in the following templates can be configured within a service template.

The following service templates are used in this example:

service-template DEFAULT_LINKSEC_POLICY_MUST_SECURE
linksec policy must-secure
!
service-template DEFAULT_LINKSEC_POLICY_SHOULD_SECURE
linksec policy should-secure
!
service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
voice vlan
!
service-template CRITICAL_AUTH_VLAN_DATA
vlan <VLAN>
!
service-template CRITICAL_AUTH_ACCESS
description ** Access Policy for Inaccessible Auth Bypass **
access-group IPV4_CRITICAL_ACL

I will now break down each template, describing the purpose of each one, starting with service-template DEFAULT_LINKSEC_POLICY_MUST_SECURE.

service-template DEFAULT_LINKSEC_POLICY_MUST_SECURE
linksec policy must-secure
  • service-template DEFAULT_LINKSEC_POLICY_MUST_SECURE <<< Creates a service template called DEFAULT_LINKSEC_POLICY_MUST_SECURE
  • linksec policy must-secure <<< Used to secure and authorize a port if a MACsec session is established.
service-template DEFAULT_LINKSEC_POLICY_SHOULD_SECURE
linksec policy should-secure
  • service-template DEFAULT_LINKSEC_POLICY_SHOULD_SECURE <<< Creates a service template called DEFAULT_LINKSEC_POLICY_SHOULD_SECURE
  • linksec policy should-secure <<< Used to optionally secure the port.
service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
voice vlan
  • service-template DEFAULT_CRITICAL_VOICE_TEMPLATE <<< Creates a service template called DEFAULT_CRITICAL_VOICE_TEMPLATE
  • voice vlan <<< Applies the voice vlan to sessions where the service template is activated.
service-template CRITICAL_AUTH_VLAN_DATA
vlan <VLAN>
  • service-template CRITICAL_AUTH_VLAN_DATA <<< Creates a service template called CRITICAL_AUTH_VLAN_DATA
  • vlan <VLAN> <<< Applies a data vlan to sessions where the service template is activated.
service-template CRITICAL_AUTH_ACCESS
description ** Access Policy for Inaccessible Auth Bypass **
access-group IPV4_CRITICAL_ACL
  • service-template CRITICAL_AUTH_ACCESS <<< Creates a service template called CRITICAL_AUTH_ACCESS
  • access-group IPV4_CRITICAL_ACL <<< Applies an access-list called IPV4_CRITICAL_ACL to sessions where the service template is activated.

Now onto the most important part, putting everything together. We will now take a look at the example control policy and see how all the configuration comes together.

Control Policy

Control policies consist of one or more rules that governs how the policy rules are evaluated. A control policy consists of the following:

  • A control class
  • An event
  • One or more actions

The following configuration is that of the control policy created for this article. I have put together an info-graphic, breaking down the control policy for better understanding.

policy-map type control subscriber POLICY_DATA
event session-started match-all
10 class always do-until-failure
10 authenticate using mab priority 20
event authentication-failure match-first
5 class DOT1X_FAILED do-until-failure
10 terminate dot1x
10 class AAA_SVR_DOWN_UNAUTHD_HOST do-until-failure
10 clear-authenticated-data-hosts-on-port
20 activate service-template CRITICAL_AUTH_ACCESS
30 activate service-template DEFAULT_CRITICAL_VOICE_TEMPLATE
40 authorize
50 pause reauthentication
20 class AAA_SVR_DOWN_AUTHD_HOST do-until-failure
10 pause reauthentication
20 authorize
30 class MAB_FAILED do-until-failure
10 terminate mab
20 authenticate using dot1x priority 10
40 class DOT1X_NO_RESP do-until-failure
10 terminate dot1x
20 authentication-restart 60
50 class NRH do-until-failure
10 terminate webauth
20 authentication-restart 60
60 class NRH do-until-failure
10 terminate webauth
20 authentication-restart 60
80 class WEBAUTH_FAILED do-until-failure
10 terminate webauth
20 authentication-restart 60
90 class always do-until-failure
10 terminate mab
20 terminate dot1x
30 terminate webauth
40 authentication-restart 60
event agent-found match-all
10 class always do-until-failure
10 terminate mab
20 terminate webauth
30 authenticate using dot1x priority 10
event aaa-available match-all
10 class IN_CRITICAL_AUTH do-until-failure
10 clear-session
20 class NOT_IN_CRITICAL_AUTH do-until-failure
10 resume reauthentication
event inactivity-timeout match-all
10 class always do-until-failure
10 clear-session
event authentication-success match-all
10 class always do-until-failure
10 activate service-template DEFAULT_LINKSEC_POLICY_SHOULD_SECURE

Summary

By now you should hopefully understand what the IBNS 2.0 configuration means and how it’s all put together. The configurations shown in this article are for demonstration purposes only. It is recommended that your configuration is devised based on the requirements on your company.

Once you’ve created your required control policies, they need to be assigned to your data interfaces in order for them to take effect. The configuration snippet below shows how we apply policies to interfaces on a Cisco switch.

(config)#interface GigabitEthernet1/0/23
(config-if)service-policy type control subscriber <NAME OF POLICY>

One thought on “Demystifying IBNS 2.0 Configuration

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.