運用・管理 / 2要素認証
2要素認証(2FA = Two Factor Authentication)は、2つの異なる認証要素を併用することでセキュリティーを高める仕組みです。
基本仕様
本製品がサポートする2FAの基本仕様は以下のとおりです。
- 対象機能
- 認証要素
- 第1要素 - ユーザー名、パスワード(RADIUSサーバーまたはLDAPサーバーを利用)
- 第2要素 - 認証コード(「Google認証システム」などのモバイルアプリを利用)
- 認証コードは、TOTP(Time-based One-Time Password)またはHOTP(HMAC-based One-Time Password)方式のワンタイムパスワードをサポート
- 第1要素(RADIUS/LDAPサーバー)へのユーザー名、パスワード送信は、第2要素(認証コード)の処理後に行われる。
- 2FA有効時、2FA未設定のユーザーにログインを許可するかどうかは設定可能。初期設定ではログイン可(2FA未設定のユーザーは第1要素のみで認証する)
- 認証コード生成に必要な情報(2FAユーザーごとのシークレットキーなど)をモバイルアプリにインポートするためのQRコードをANSI/UTF-8端末画面に出力可能。また、QRコードを生成する外部Webサイトへのリンクを端末画面に表示可能。
- シークレットキーはコンフィグに含まれず、別に管理される。
- シークレットキーはAMFバックアップの対象となる。
- 対象機能側で2FAの設定が行われているにもかかわらず、2FAが無効の場合は、第1要素のみで認証を行う。
基本設定
2FAを使用するための基本設定は次のとおりです。
- 2FA関連の設定は2要素認証サービスが有効になっていないと行えないため、最初に同サービスを有効化します。
これには service 2faコマンドを使います。
awplus(config)# service 2fa ↓
awplus(config)# exit ↓
- 2FAを行うには、ユーザーごとにシークレットキー(パスワード)を生成し、本製品とユーザー(のモバイルアプリ)の間で共有する必要があります。シークレットキーの生成は特権EXECモードの2fa create userコマンドにより「2FAユーザーの追加」という形で行います。
awplus# 2fa create user userA random-secret ↓
2FAを利用するユーザーのそれぞれについて、2fa create userコマンドを実行してください。
- OpenVPNで2FAを使うよう設定します。これにはaaa authentication openvpnコマンドを使います。
OpenVPNに関するその他の設定は2FAを使わないときと同じです。詳しくは「VPN」/「OpenVPN」をご覧ください。
OpenVPNクライアントにおいて、ユーザー名・パスワードと2FA認証コードを別々に入力できるようにするには、クライアント設定ファイルに次のような設定行が必要です。必要な設定はクライアントの種類によって異なる可能性がありますので、ご使用のクライアントのマニュアルをご参照ください。
static-challenge "Verification Code:" 1
なお、使用するOpenVPNクライアントが2FA認証コードの入力に対応していない場合(認証コードの入力欄や入力画面がない場合など)は、aaa authentication openvpnコマンドの 2fa-in-password オプションを使用することで、通常のパスワードの一部として認証コードを受け取ることが可能です。
この場合、OpenVPNクライアントのパスワード入力欄に <パスワード><認証コード>
の形式でパスワードと認証コードをまとめて入力します。たとえばパスワードが「paSSxx__」で認証コードが「987654」だった場合、パスワード入力欄には「paSSxx__987654」と入力します。
- 各ユーザーにモバイルアプリ設定のための情報(シークレットキーなど)を提供します。
2FAを利用するための基本設定は以上です。
■ 2FAサービスの設定はshow 2faコマンドで確認できます。
■ 2FAユーザーの一覧はshow 2fa usersコマンドで確認できます。
■ 個々の2FAユーザーの情報(シークレットキー、バックアップコードなど)はshow 2fa userコマンドにユーザー名を指定することで確認できます。
前述のとおり、qrオプションを指定すればシークレットキー受け渡し用のQRコードを表示することも可能です。
■ 2FAユーザーのバックアップコードを再生成するには2fa reset scratch-codesコマンドにユーザー名を指定します。
同コマンドを実行すると、該当ユーザーの5つのバックアップコードがすべて新しいものに更新され、以前のコードは使用できなくなります。
awplus# 2fa reset scratch-codes userA ↓
■ 2FAユーザーを削除するには2fa delete userコマンドを使います。
awplus# 2fa delete user userA ↓
応用設定
2FAの動作は以下のコマンドでカスタマイズ可能です。
2FA未設定ユーザーの拒否
初期設定では、2FA未設定のユーザー(2fa create userコマンドで登録していないユーザー)は2FAを使わずに第1要素(RADIUSかLDAP)の認証をパスすればログインが可能です。
2FA未設定ユーザーのログインを拒否するには、2fa reject-unconfigured-usersコマンドを設定してください。
awplus(config)# 2fa reject-unconfigured-users ↓
QRコード(OTP URL)に埋め込む情報の設定
シークレットキーを受け渡すためのQRコードは、OTP URLと呼ばれるURL文字列をQRコード化したものです。
このURLにはシークレットキーのほかに、参考情報としていくつかの文字列情報を付加することができます。
これは以下の各コマンドで設定します。
- 以下のコマンドで設定した内容は、それ以降に2fa create userコマンドやshow 2fa userコマンドでQRコードを出力したときに反映されます。
- OTP URLのQRコードを読み込んだときに以下の参考情報をどのように利用するか(どのように表示するか)は認証アプリの仕様に依存します。
- これらの参考情報の有無や内容は2要素認証の動作には影響しません。
■ OTP URLに発行者情報(issuerパラメーター)を付加するには、2fa issuerコマンドを使います。初期状態は未設定で、その場合発行者情報は埋め込まれません。
awplus(config)# 2fa issuer My Company ↓
■ OTP URLに埋め込むラベル情報の後半部分を変更するには、2fa labelコマンドを使います。初期設定ではホスト名(hostname)が入ります。
awplus(config)# 2fa label My VPN ↓
TOTP方式における認証コードの再利用
カウンターベースのHOTP方式では認証コードは使うたびに変更されますが、初期設定では時間ベースのTOTP方式でも認証コードは各々1回ずつしか使用できません。
たとえば、ユーザーが複数の装置からOpenVPN接続を行う場合、ある装置からログインした直後に別の装置からもログインしようとすると、最初の装置で使用した認証コードの有効期間内であっても、2つ目の装置で入力した認証コードは使用済みであるとして拒否されます。
TOTP方式で同じ認証コードを複数回使えるようにするには 2fa allow-reuseコマンドを使います。
awplus(config)# 2fa allow-reuse ↓
TOTP方式における軽微な時刻ずれへの対応
時間ベースのTOTP方式では、認証を受ける側(ユーザー側)と認証する側(本製品)がそれぞれの時刻にもとづいてタイムステップ(30秒)ごとにワンタイムパスワード(認証コード)を計算するため、両者の時刻がずれていると正しく認証を行えません。
ただし、実際の運用ではシステム間で時刻がずれている可能性は十分考えられ、またユーザーが認証コードを確認して入力するまでのタイムラグもあるため、ある程度の時刻ずれを許容する設定が可能です。
■ 初期設定では、ある時点において現在の時刻に対応した認証コードに加え、前後1個ずつの認証コードも受け入れる設定になっています。
現在時刻を中心に前後あわせて合計何個の認証コードを許容するかを示す設定値をTOTPウィンドウサイズと呼び、2fa totp-window-sizeコマンドで変更が可能です。
たとえば次の設定ではTOTPウィンドウサイズを5に設定しています。これは現在のコードに加えて、前2個、後2個の合計5個のコードを受け入れる設定です。
awplus(config)# 2fa totp-window-size 5 ↓
一方、次の例ではTOTPウィンドウサイズを1、すなわち現在のコードしか受け入れない厳格な設定にしています。
awplus(config)# 2fa totp-window-size 1 ↓
TOTP方式における大幅な時刻ずれへの対応
時間ベースのTOTP方式では、前述のとおり、認証を受ける側(ユーザー側)と認証する側(本製品)がそれぞれの時刻にもとづいてワンタイムパスワード(認証コード)を計算するため、両者の時刻がウィンドウサイズ(2fa totp-window-sizeコマンド)よりも大きくずれていると正しく認証を行えません。
ウィンドウサイズよりも大きな時刻ずれの原因としてよく見られるものにタイムゾーン設定の不一致があります。
時刻ずれ補正機能は、このような状況に対応するために両者の時刻がずれていることを検出して自動補正する機能です。
時刻ずれ補正機能の有効時にユーザーが間違った認証コードを入力すると、本製品は現在時刻の前後 2fa max-skew個分の認証コードをチェックし、一致するコードが見つかった場合はユーザーがそのコードを入力した時刻と、実際のそのコードが使われるべき時刻の差(ずれ幅)を記憶しておきます。
該当ユーザーが同じずれ幅で間違ったコードを短期間に3回連続して入力した場合、本製品はこのずれ幅を該当ユーザーの時刻補正値として記憶し、それ以降該当ユーザーがログインしようとしてきた場合は現在時刻にこの補正値を適用して認証コードをチェックします。これにより、互いの時刻がずれたまま正しく認証が行えるようになります。
■ 初期状態では、時刻ずれ補正機能は無効です。有効にするには2fa skew-adjustコマンドを実行します。
awplus(config)# 2fa skew-adjust ↓
■ 補正可能な最大ずれ幅(前後どちらにも適用)は 2fa max-skewコマンドで設定します。
同コマンドの指定値の単位は「タイムステップ」です(1タイムステップ=30秒)。
初期値は1500タイムステップ(45000秒=750分=12時間30分)です。
次の例では、最大補正幅を設定可能な最大値である3000タイムステップ(25時間)に設定しています。
awplus(config)# 2fa max-skew 3000 ↓
■ 時刻補正値が保存されているユーザーについては、show 2fa userコマンドの出力にその旨が表示されます。
awplus# show 2fa user userA ↓
■ ユーザーごとの時刻補正値をリセットするには2fa reset skewコマンドにユーザー名を指定します。
awplus# 2fa reset skew userA ↓
HOTP方式におけるカウンターずれへの対応
カウンターベースのHOTP方式では、認証を受ける側(ユーザー側)と認証する側(本製品)がそれぞれ次が何個目の認証コードであるかを示すカウンターを保持しており、このカウンターの値にもとづいて認証コードを計算するため、両者のカウンターがずれていると正しく認証を行えません。
ただし、HOTPではユーザーが任意でカウンターを進める(認証アプリで認証コードを更新する=次のカウンターのコードを取得する)ことができるため、カウンターの不一致は起こり得る前提で、認証する側(本製品)でユーザー側がいくつまでカウンターを進めていても許容するかを設定できるようになっています。
■ 初期設定では、認証する側から見て、現在のカウンター値に対応した認証コードに加え、次とその次の認証コードを加えた合計3つの認証コードを受け入れる設定になっています。現在の認証コードを1つ目とした場合に何個目の認証コードまでを許容するかを示す設定値をHOTPウィンドウサイズと呼び、2fa hotp-window-sizeコマンドで変更が可能です。
たとえば次の設定ではHOTPウィンドウサイズを5に設定しています。これは現在のコードから4つ先のコードまで合計5個のコードを受け入れる設定です。
awplus(config)# 2fa hotp-window-size 5 ↓
一方、次の例ではHOTPウィンドウサイズを1、すなわち現在のコードしか受け入れない(カウンターのずれを許容しない)厳格な設定にしています。
awplus(config)# 2fa hotp-window-size 1 ↓
(C) 2015 - 2022 アライドテレシスホールディングス株式会社
PN: 613-002107 Rev.AU