Catalystスイッチで2要素認証を実現する

#はじめに
この記事はシスコの有志による Cisco Systems Japan Advent Calendar 2019 の 2 日目として投稿しています。

2017年版: https://qiita.com/advent-calendar/2017/cisco
2018年版: https://qiita.com/advent-calendar/2018/cisco
2019年版: https://qiita.com/advent-calendar/2019/cisco

Catalystスイッチでホストの２要素認証の実現は可能ですか？と時々お問い合わせを受けます。
CatalystスイッチではMACアドレス(MAC認証バイパス/Mab)/802.1x認証/WEB認証方式をサポートし
認証のフェールオーバー順序を指定したり、 [MACアドレス(Mab)認証失敗時にWEB認証にフェールオーバーする](https://www.cisco.com/c/ja_jp/support/docs/security/identity-services-engine/113362-config-web-auth-ise-00.html)
など、"or"条件での複数認証の方法は各種ドキュメントで解説がありますが、この記事では、
MACアドレス認証とWEB認証の２要素認証 ("and"条件) の実現方法と設定例、動作確認結果を
ご紹介したいと思います。CatalystではWEB認証方式として、[ローカルWEB認証](https://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst9200/software/release/16-12/configuration_guide/sec/b_1612_sec_9200_cg/configuring_web_based_authentication.html) と 
中央WEB認証/Central Web Auth（CWA) の方式がありますが、本記事では、CWAの方式を使用します。

#Centeral Web Authentication (CWA)とは
[Cisco Identity Services Engine （ISE）](https://www.cisco.com/c/ja_jp/products/security/identity-services-engine/index.html)を使用したWEB認証方式です。
ISEは、RadiusサーバとWEEBポータルとして機能する中央ポリシーサーバの位置付けになります。

<img width="904" alt="スクリーンショット 2019-11-26 0.09.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/8bdcb488-31ed-5105-f689-9a67f307dc62.png">
図：[Cisco Live資料](https://www.ciscolive.com/c/dam/r/ciscolive/apjc/docs/2019/pdf/BRKCRS-3811.pdf)より引用
######認証フロー
1. RADIUS サーバ(ISE)でホストの MACアドレスまたは802.1x認証が失敗または成功した後に、 サーバはRadiusの認可プロセスを開始し、クライアント端末を認証用WEBポータルへリダイレクトさせるためのリダイレクト用URLとWEB認証前に許可するトラフィックを指定した動的なアクセスリストをスイッチへ返します。
4. スイッチはポートに動的なアクセスリストを適用して、WEBトラフィック（*ポータルへリダイレクトされるトラフィックは事前にスイッチ上のアクセスリストで定義)をポータルにリダイレクトします。
5. ユーザがWEBポータルログインに成功した後、サーバは[RFC5176](https://tools.ietf.org/html/rfc5176)で定義されている [Radius CoA（Change of Authoraization/認可変更） ](https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/sec_usr_aaa/configuration/xe-16-12/sec-usr-aaa-xe-16-12-book/sec-rad-coa.html)
によって再認証を開始し、そのユーザの属性に基づいたポリシー(VLANやACLなど）を各ホストにダイナミックに適用します。


#構成と設定例
下記の要件を実現する構成と設定例をご紹介します。
##要件
-１ポート配下に島ハブを介して複数の端末が存在する。
-各端末単位でMACアドレス認証(Mab)とWEB認証の両方が成功した場合にのみアクセスを許可する。
（2要素認証）
-２要素認証成功後にユーザ属性に基づいて各ユーザ端末に対してダイナミックにVLAN割り当てを行う。

##構成
<img width="1172" alt="スクリーンショット 2019-11-29 15.45.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/fe6b9a7e-ab8a-dd4c-4a3c-2862965b51f7.png">



##ISEの設定
2要素認証を実現するためのポリシー設定はISEでのポリシー定義がキーとなり、 [MACアドレス(Mab)認証失敗時にWEB認証にフェールオーバーする](https://www.cisco.com/c/ja_jp/support/docs/security/identity-services-engine/113362-config-web-auth-ise-00.html)設定例の応用で実現できます。ここでは2要素認証を実現するための各ポリシー設定のポイントをご紹介します。

###Authentication policy 設定のポイント
**MACアドレス認証(Mab)時の条件として、認証失敗時（Auth fail)、端末未登録時（User not found)に、アクセス拒否(REJECT)する設定を適用します。**
<img width="1670" alt="スクリーンショット 2019-11-28 17.06.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/5fd3c167-f3f0-4989-17df-9f3c8f5d4035.png">

###Authorization policy 設定のポイント
**MACアドレス認証成功後に適用するポリシーとして、認証成功時（"Network_Access_Authentication_Passed")にCWAを実行する認可プロファイル("CentralWebauth")を指定するポリシーを作成します。**
CWAの認可プロファイルではスイッチに返す認証前のアクセス制限用の動的アクセスリストと、WEB認証のためのポータルリダイレクト用の URLを定義します。
WEB認証成功後のCoAによる再認証用のポリシーとして、Teachersグループに所属するユーザデバイスにはVLAN10を、Studentsグループに所属するユーザデバイスにはVLAN20を動的に割り当てるポリシーを作成します。
<img width="1677" alt="スクリーンショット 2019-11-29 15.46.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/211ccb05-27d4-be4c-895a-c471541ed1f3.png">
**CWA認可プロファイル**
<img width="1668" alt="スクリーンショット 2019-11-29 16.22.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/468bf33a-90bf-3ac9-9ff4-292d0f58bd43.png">
**VLAN割り当て認可プロファイル**
<img width="995" alt="スクリーンショット 2019-11-29 16.34.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/a80e7a0c-0ec5-819f-493d-7802c9ec9cf3.png">

##Catalystスイッチの設定
キーとなる2要素認証のポリシーはISE側のポリシーで定義するため
スイッチで行う設定は基本的なRadius/CoA許可設定とMACアドレス認証(Mab)、WEBポータルへのリダイレクトトラフィック用のACL設定です。

```ios:Cat9200L/IOS-XE/version16.12.1
#Radius設定
aaa new-model
aaa group server radius ISE_GRP
 server name ISE
aaa authentication dot1x default group ISE_GRP
aaa authorization network default group ISE_GRP
!
dot1x system-auth-control
!
radius server ISE
 address "ise ip address" auth-port 1812 acct-port 1813
 key "shared-secret-key"

#CoA許可
aaa server radius dynamic-author
 client  server-key "shared-secret-key"
!
#Interface設定
interface GigabitEthernet1/0/5
 switchport access vlan 3
 switchport mode access
 device-tracking
 authentication host-mode multi-auth
 authentication order mab
 authentication port-control auto
 mab
 spanning-tree portfast 
!
#Webポータルへのリダイレクト用設定
ip http server
ip http secure-server
!
ip access-list extended redirect
 deny   ip any host "ise ip address"
 permit tcp any any eq www
 permit tcp any any eq 443

＃dynamic 割り当て用VLAN定義
vlan 10
vlan 20

```

##動作確認ログ
###Macアドレス認証成功後
認可（Authorization）プロセスが開始され、サーバから動的ACLとWEB認証用のリダイレクト用URLがスイッチに返されます。

```ios:Cat9200L/IOS-XE/version16.12.1
Cat9200L#show authentication sessions interface gigabitEthernet 1/0/5 details 
            Interface:  GigabitEthernet1/0/5
               IIF-ID:  0x1782A091
          MAC Address:  000c.290a.57b1
         IPv6 Address:  Unknown
         IPv4 Address:  Unknown
            User-Name:  00-0C-29-0A-57-B1
               Status:  Authorized
               Domain:  DATA
       Oper host mode:  multi-auth
     Oper control dir:  both
      Session timeout:  N/A
    Common Session ID:  B7AC460A0000002DCB00E39B
      Acct Session ID:  Unknown
               Handle:  0x00000023
       Current Policy:  POLICY_Gi1/0/5
Local Policies:
Service Template: DEFAULT_LINKSEC_POLICY_SHOULD_SECURE (priority 150)
      Security Policy:  Should Secure

Server Policies:
     URL Redirect ACL: redirect
         URL Redirect: https://10.70.170.168:8443/portal/gateway?sessionId=B7AC460A0000002DCB00E39B&portal=429c0e20-0fa7-11ea-9969-000c297fae95&action=cwa&token=87e5533f96b13f570ab1d6445f5ec6bd
              ACS ACL: xACSACLx-IP-DACL-5dde097e

Method status list:
       Method           State
          mab           Authc Success

----------------------------------------
            Interface:  GigabitEthernet1/0/5
               IIF-ID:  0x1D77E1AB
          MAC Address:  000c.297c.1ec9
         IPv6 Address:  Unknown
         IPv4 Address:  Unknown
            User-Name:  00-0C-29-7C-1E-C9
               Status:  Authorized
               Domain:  DATA
       Oper host mode:  multi-auth
     Oper control dir:  both
      Session timeout:  N/A
    Common Session ID:  B7AC460A0000002CCB00E397
      Acct Session ID:  Unknown
               Handle:  0xab000022
       Current Policy:  POLICY_Gi1/0/5 
Local Policies:
Service Template: DEFAULT_LINKSEC_POLICY_SHOULD_SECURE (priority 150)
      Security Policy:  Should Secure

Server Policies:
     URL Redirect ACL: redirect
         URL Redirect: https://10.70.170.168:8443/portal/gateway?sessionId=B7AC460A0000002CCB00E397&portal=429c0e20-0fa7-11ea-9969-000c297fae95&action=cwa&token=923ce99eb810cbc544f60af11dd4ff27
              ACS ACL: xACSACLx-IP-DACL-5dde097e
```

###ユーザがWEBポータルにログイン
<img width="1641" alt="スクリーンショット 2019-11-29 15.46.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/2260529f-ee51-9f33-a809-c6b24cafcf3f.png">



###WEB認証成功後
ユーザ属性に応じたVLANがサーバからスイッチに返され各ホスト毎に適用されます。

```ios:Cat9200L/IOS-XE/version16.12.1
Cat9200L#show authentication sessions interface gigabitEthernet 1/0/5 details 
            Interface:  GigabitEthernet1/0/5
               IIF-ID:  0x1C7EBE53
          MAC Address:  000c.290a.57b1
         IPv6 Address:  Unknown
         IPv4 Address:  192.168.10.4
            User-Name:  yamada
               Status:  Authorized
               Domain:  DATA
       Oper host mode:  multi-auth
     Oper control dir:  both
      Session timeout:  N/A
    Common Session ID:  B7AC460A0000002FCB41353B
      Acct Session ID:  Unknown
               Handle:  0xbc000025
       Current Policy:  POLICY_Gi1/0/5

Local Policies:
Service Template: DEFAULT_LINKSEC_POLICY_SHOULD_SECURE (priority 150)
      Security Policy:  Should Secure

Server Policies:
           Vlan Group:  Vlan: 10
          
Method status list:
       Method           State
          mab           Authc Success

---------------------------------------- 
            Interface:  GigabitEthernet1/0/5
               IIF-ID:  0x178E109E
          MAC Address:  000c.297c.1ec9
         IPv6 Address:  Unknown
         IPv4 Address:  192.168.20.1
            User-Name:  suzuki
               Status:  Authorized
               Domain:  DATA
       Oper host mode:  multi-auth
     Oper control dir:  both
      Session timeout:  N/A
    Common Session ID:  B7AC460A0000002ECB413537
      Acct Session ID:  Unknown
               Handle:  0x1c000024
       Current Policy:  POLICY_Gi1/0/5
          
Local Policies:
Service Template: DEFAULT_LINKSEC_POLICY_SHOULD_SECURE (priority 150)
      Security Policy:  Should Secure
 
Server Policies:
           Vlan Group:  Vlan: 20
```
**ISEのオペレーションログ**
<img width="1671" alt="スクリーンショット 2019-11-29 16.51.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/9e6a999b-ffae-b0ca-0be8-f5c61b26e43b.png">


# 最後に
最後まで読んでいただきありがとうございました。
CatalystスイッチではAND条件での２要素認証は実現不可、と思われている方が多いと感じたため
今回この記事を書かせていただきました。
今回ご紹介した構成と設定例はあくまで一例ですが、CWA方式の場合、ISEのポリシー設定次第で
柔軟な条件設定が可能です。ご参考になれば幸いです。


# 参考
**Catalystの認証モード**

```ios:IOS-XE
Cat9200L(config)#interface gigabitEthernet 1/0/1
Cat9200L(config-if)#authentication host-mode ?
  multi-auth    Multiple Authentication Mode
  multi-domain  Multiple Domain Mode
  multi-host    Multiple Host Mode
  single-host   SINGLE HOST Mode
```

| 認証モード | 説明 |
|:-:|:-:|
| single-host | 単一のMACアドレスのみを認証し、2台目以降のMACアドレスは拒否。|
| multi-host  | 最初のMACアドレスが認証されると2台目以降は認証結果を引き継ぎ認証をバイパス。|
| multi-auth | 音声端末は1台、データ端末は複数台同時に認証可能。各ホスト毎に異なるdACL/dVLANポリシーを適用可能。|
| multi-domain  | 各ドメイン(Voice / Data)で単一MACアドレスのみが認証され、各ドメインの2台目以降は拒否。| 


**Catalystの認証順序**

```ios:IOS-XE
Cat9200L(config)#interface gigabitEthernet 1/0/1
Cat9200L(config-if)#authentication order ?
  dot1x    Authentication method "dot1x" allowed
  mab      Authentication method "mab" allowed
  webauth  Authentication method "webauth" allowed
```
* 上記コマンドのwebauthはローカルwebauth方式です。

**Catalystの認証の優先順位**

個々のポートの方式についてフェールオーバー順を制御するための設定です。
認証の優先順位を設定するには、認証順序を設定しておく必要があります。

```ios:IOS-XE
Cat9200L(config)#interface gigabitEthernet 1/0/1
Cat9200L(config-if)#authentication priority ?
  dot1x    Authentication method "dot1x" allowed
  mab      Authentication method "mab" allowed
  webauth  Authentication method "webauth" allowed
```
* 上記コマンドのwebauthはローカルwebauth方式です。






#免責事項
本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。