802.1x認証方式の1つであるEAP-TLSは、クライアント証明書を使用したセキュアなRADIUS認証方式です。
Microsoft社がNTLMv1を非推奨としたこともあり、EAP-PEAP MSCHAPv2 からEAP-TLSへと移行をご検討のユーザ様も多くいらっしゃるかと思います。
さて、EAP-TLSを利用する環境では、EAP-TLSのパケットがフラグメンテーション(分割)されることにより、802.1x認証が失敗してしまうことがあります。本ポストではこの問題と対処法について解説します。
EAP-TLSパケットのフラグメンテーションとは
パケットのフラグメンテーションとは、IPパケットのサイズがMTU(多くの場合1500 Byte)を超えた場合にネットワークインターフェース(APやスイッチの場合アップリンクインターフェース)により分割されることで、これ自体は正常な仕組みです。
ただし、UDPパケットについては、ファイアウォール等の通信機器がフラグメント化されたパケットを(ポリシーで定義していなくても)ドロップしてしまうことがあります。RADIUSプロトコルは多くの場合UDP 1812を使用しますが、EAP-TLSはクライアント証明書の情報を送信する性質上、1パケットあたりのサイズが1500 Byteを超えることがあり、「UDPパケットのフラグメンテーション」に該当してしまいます。
※特に、近年AWSやAzure等パブリッククラウド上にClearPassを移行するユーザ様が増えていますが、パブリッククラウドへの経路上で、自社により管理できない範囲でEAP-TLSのパケットがドロップされるケースが散見されるため注意が必要です。
どうやって問題を見つけるか?
EAP-PEAP MSCHAPv2では認証が通るのにEAP-TLSでは認証失敗する場合は、EAP-TLSのフラグメンテーション問題を1つの可能性として疑ってください。
EAP-TLSのフラグメンテーション問題が発生している場合、無線/有線クライアントや Authenticater(AP/無線コントローラ/スイッチ)側では「接続に失敗しました」「認証サーバのタイムアウト」等として表示されます。
RADIUSサーバとしてClearPassを使っている場合は、アクセストラッカーで認証タイムアウトのレコードが載り、Error Code: 9002 "RADIUS: Client did not complete EAP transaction" というアラートが表示されます。このエラー自体は必ずしもEAP-TLSのフラグメンテーションを示すものではなく、他の問題を起因としている可能性もありますが、「EAP-PEAPでは認証成功しているのにEAP-TLSでは認証失敗」という状況ではEAP-TLSのフラグメンテーション問題の可能性が高くなります。
確実な確認方法として、RADIUSサーバ側と Authenticater側双方でパケットキャプチャを取得し、RADIUSサーバ側でのみフラグメントパケットが届いていなければ、途中経路のどこかでドロップしていることになります。ClearPassの機能としてパケットキャプチャを取得することも可能です(参考動画)。
EAP-TLSのパケットがフラグメント化している例(RADIUSサーバ側でキャプチャ)
どうやって対処するか?
大まかに、3通りの対処方法があります。
- ソフトウェア処理によりRADIUSパケットを分割する
Authenticater側で、ソフトウェア処理により予めEAP-TLSのパケットをMTUサイズ以下(1200 Byteなど)となるよう分割することにより、アップリンクインターフェースによるフラグメンテーションを防ぐ方法です。HPE Aruba Networkngの AP, Mobility Gateway/Controller, AOS-CX Switch, ArubaOS-Switch ではこの機能に対応しています。
※詳細は、それぞれのプロダクトの最新ドキュメントを参照してください。
- HPE Aruba Networkng Central管理のIAPまたはAOS10 APでの設定方法
対象グループのSecurity>Authentication Servers でEAP Fragmentation MTUを設定します
- IAPでの設定方法
CLIで、"dot1x eap-frag-mtu <ipmtu>" コマンドにより設定します。
(Instant AP)(config) #dot1x eap-frag-mtu 1200
IAPでeap-frag-mtu値が1200 Byteに設定されている場合の例(RADIUSサーバ側でキャプチャ)
IAPが送信するEAP-TLSのパケットが全て1200 Byte以下になっている
- Mobility Gateway/Controllerでの設定方法
CLIで、"aaa authentication dot1x eap-frag-mtu <ipmtu>"コマンドにより設定します。
(host) [mynode](config) #aaa authentication dot1x eap-frag-mtu 1200
- AOS-CX Switchでの設定方法
CLIで、"aaa authentication port-access dot1x authenticator eap-tls-fragment towards-server <max-fragment-size>"コマンドにより設定します。
switch(config)# aaa authentication port-access dot1x authenticator eap-tls-fragment towards-server 1200
- ArubaOS Switchでの設定方法(Ver16.11以上)
CLIで、"aaa port-access authenticator eap-tls-fragment towards-server <max-fragment-size>"コマンドにより設定します。
switch(config)# aaa port-access authenticator eap-tls-fragment towards-server 1200
- RadSecを利用する
UDPを用いるRADIUSでなく、TCPを用いるRadSec(RADIUS-Over-TLS)を使用することで、EAP-TLSのパケットがフラグメント化されても問題なくAuthenticater-RADIUSサーバ間で通信できるようになります。Authenticater側・RADIUSサーバ側双方に設定や証明書のインストールが必要になりますが、RADIUS通信がTLSにより暗号化されるため、インターネット越えの構成において特に推奨されます。
設定方法は、それぞれのプロダクトの最新ドキュメントを参照してください。
- Jumbo Frameを有効化する
あまり現実的ではないかもしれませんが、Authenticater-RADIUSサーバ間の通信経路の全てでJumbo Frameを有効化することでフラグメンテーションを回避することができます。
EAP-TLSへの移行や、認証サーバのクラウド移行に伴ってEAP-TLSのフラグメンテーション問題に直面するユーザ様が増えてきています。このポストをご参考にいただければ幸いです。
#Blog #ClearPass
------------------------------
Stephane Kazuki Chartrand
HPE Aruba Networking
------------------------------