Citrix ADC

電子メール OTP 認証

電子メールOTPは、Citrix ADC 12.1ビルド51.xで導入されました。電子メール OTP 方式では、登録された電子メールアドレスに送信されるワンタイムパスワード (OTP) を使用して認証できます。いずれかのサービスで認証を試みると、サーバーは登録されているユーザーのメールアドレスに OTP を送信します。

電子メール OTP 機能を使用するには、まず代替電子メール ID を登録する必要があります。アカウントがロックアウトされた場合や AD パスワードを忘れた場合は、プライマリ電子メール ID にアクセスできないため、OTP をそのメール ID に送信できるように、代わりの電子メール ID の登録が必要です。

AD 属性の一部として代替電子メール ID をすでに指定している場合は、電子メール ID を登録せずに電子メール OTP 検証を使用できます。電子メールアドレスセクションで代替電子メール ID を指定する代わりに、電子メールアクションで同じ属性を参照できます。

前提条件

電子メール OTP 機能を設定する前に、次の前提条件を確認してください。

  • Citrix ADC 機能リリース 12.1 ビルド 51.28以降
  • 電子メール OTP 機能は nFactor 認証フローでのみ使用できます

アクティブディレクトリ設定

  • サポートされているバージョンは 2016/2012 および 2008 年のActive Directory ドメイン機能レベルです
  • Citrix ADC LDAPBind ユーザー名には、ユーザーのADパスへの書き込みアクセス権が必要です

メールサーバ

  • 電子メール OTP ソリューションを機能させるには、SMTP サーバーでログインベースの認証が有効になっていることを確認します。Citrix ADCは、電子メールOTPが機能するためにAUTH LOGINベースの認証のみをサポートします。

  • AUTH LOGIN ベースの認証が有効になっていることを確認するには、SMTP サーバーで次のコマンドを入力します。ログインベースの認証が有効な場合、AUTH LOGIN というテキストが出力に太字で表示されます

SMTP サーバーでログインベースの認証を有効にする

制限事項

  • この機能は、認証バックエンドが LDAP の場合にのみサポートされます。
  • すでに登録されている代替電子メール ID は表示されません。
  • KBA 登録ページの代替電子メール ID のみ更新できません。
  • 電子メール OTP 認証を認証フローの最初の要素にすることはできません。これは、堅牢な認証を実現するための仕様です。
  • 代替電子メール ID と KBA の両方が同じ認証アクションを使用して設定されている場合、属性は両方で同じである必要があります。
  • ネイティブプラグインとReceiverでは、登録はブラウザ経由でのみサポートされます。

Active Directory構成

  • 電子メール OTP は、Active Directory 属性をユーザーデータストレージとして使用します。

  • 代替電子メールIDを登録すると、電子メールIDがCitrix ADCアプライアンスに送信され、アプライアンスはADユーザーオブジェクト内の構成済みのKB属性に電子メールIDを保存します。

  • 代替電子メール ID は暗号化され、設定された AD 属性に保存されます。

AD 属性を設定する場合は、次の点を考慮してください。

  • サポートされる属性名の長さは 128 文字以上にする必要があります。
  • 属性タイプは ‘directoryString’ でなければなりません。
  • ネイティブ OTP と電子メール OTP 登録データに同じ AD 属性を使用できます。
  • LDAP 管理者には、選択した AD 属性に対する書き込みアクセス権が必要です。

既存の属性の使用

この例で使用されている属性はUserparametersです。これは AD ユーザ内の既存の属性なので、AD 自体に変更を加える必要はありません。ただし、その属性が使用されていないことを確認する必要があります。

属性が使用されないようにするには、[ ADSI ] に移動して [user] を選択し、そのユーザーを右クリックし、属性リストまでスクロールダウンします。 UserParametersの属性値が設定されていないことを確認する必要があります。これは、その属性が現在使用されていないことを示します。

AD 属性設定

電子メール OTP の設定

電子メール OTP ソリューションは、次の 2 つの部分で構成されています。

  • メール登録
  • メール検証

メールID登録

KBA 登録スキーマが正常に作成されたら、CLI を使用して次の設定を行います。

  1. ポータルテーマと証明書を VPN Global にバインドします。

    bind authentication vserver authvs -portaltheme RfWebUI
    bind vpn global -userDataEncryptionKey c1
    <!--NeedCopy-->
    

    注:

    AD 属性に格納されているユーザーデータ (KB Q&A および登録済みの代替メール ID) を暗号化するには、証明書のバインドを先行する必要があります。

  2. LDAP 認証ポリシーを作成します。

    add authentication ldapAction ldap -serverIP 10.102.2.2 -serverPort 636 -ldapBase "dc=aaatm-test,dc=com" -ldapBindDn administrator@aaatm-test.com -ldapBindDnPassword freebsd -ldapLoginName samAccountName -secType SSL
    add authentication Policy ldap -rule true -action ldap
    <!--NeedCopy-->
    
  3. 電子メール登録用の LDAP 認証ポリシーを作成します。

    add authentication ldapAction ldap_email_registration -serverIP 10.102.2.2 -serverPort 636 -ldapBase "dc=aaatm-test,dc=com" -ldapBindDn administrator@aaatm-test.com -ldapBindDnPassword freebsd -ldapLoginName samAccountName -secType SSL -KBAttribute userParameters -alternateEmailAttr userParameters
    add authentication Policy ldap_email_registration -rule true -action ldap_email_registration
    <!--NeedCopy-->
    
  4. E メール登録ログインスキーマとポリシーラベルを作成します。

    add authentication loginSchema onlyEmailRegistration -authenticationSchema /nsconfig/loginschema/LoginSchema/AltEmailRegister.xml
    add authentication policylabel email_Registration_factor -loginSchema onlyEmailRegistration
    bind authentication policylabel email_Registration_factor -policyName ldap_email_registration -priority 1 -gotoPriorityExpression NEXT
    <!--NeedCopy-->
    
  5. 認証ポリシーを認証仮想サーバーにバインドします。

    bind authentication vserver authvs –policy ldap -priority 1 -nextFactor email_Registration_factor -gotoPriorityExpression NEXT
    <!--NeedCopy-->
    
  6. 前のセクションで説明した手順をすべて設定したら、次の GUI 画面が表示されます。URL(たとえば、https://lb1.server.com/) を使用してアクセスすると、LDAP ログオン資格情報だけを必要とする初期ログインページが表示され、その後に代替の電子メール登録ページが表示されます。

    注: ドメインhttps://lb1.server.com/は、ゲートウェイまたは認証仮想サーバのいずれかに属することができます。

    二要素ログインページ

    メール登録ログオン

注:

  • KBA 登録と電子メール ID 登録の両方に同じ認証スキーマを使用できます。

  • KBA 登録の設定時に、[ 電子メール登録] セクションの [代替電子メールの登録 ] を選択して、代替電子メール ID を登録できます。

メール検証

E メール検証を行うには、次の手順を実行します。

  1. ポータルテーマと証明書を VPN Global にバインドする

    bind authentication vserver authvs -portaltheme RfWebUI
    bind vpn global -userDataEncryptionKey c1
    <!--NeedCopy-->
    

    注:

    AD 属性に保存されているユーザーデータ (KB Q&A および登録済みの代替電子メール ID) を復号化するには、証明書のバインドを先行する必要があります。

  2. LDAP 認証ポリシーを作成します。電子メール OTP 検証にはユーザーの電子メール ID または代替電子メール ID が必要なため、LDAP は電子メール検証係数の前の要素である必要があります。

    add authentication ldapAction ldap1 -serverIP 10.102.2.2 -serverPort 636 -ldapBase "dc=aaatm-test,dc=com" -   ldapBindDn administrator@aaatm-test.com -ldapBindDnPassword freebsd -ldapLoginName samAccountName -secType SSL -KBAttribute userParameters -alternateEmailAttr userParameters
    add authentication Policy ldap1 -rule true -action ldap1
    <!--NeedCopy-->
    
  3. E メール認証ポリシーを作成します。

    add authentication emailAction email -userName sqladmin@aaa.com -password freebsd-encrypted -encryptmethod ENCMTHD_3 -serverURL "smtps://10.2.3.3:25" -content "OTP is $code" -defaultAuthenticationGroup emailgrp -emailAddress "aaa.user.attribute("alternate_mail")"
    add authentication Policy email -rule true –action email
    <!--NeedCopy-->
    

    前述のコマンドでは、 メールアドレスは KBA 登録時に指定された代替電子メール ID ユーザーです。

  4. 電子メール OTP 検証ポリシーラベルを作成します。

    add authentication policylabel email_Validation_factor
    bind authentication policylabel email_Validation_factor -policyName email -priority 1 -gotoPriorityExpression NEXT
    <!--NeedCopy-->
    
  5. 認証ポリシーを認証仮想サーバーにバインドします。

    bind authentication vserver authvs – policy ldap1 -priority 1 -nextFactor email_Validation_factor -gotoPriorityExpression NEXT
    <!--NeedCopy-->
    
  6. 前のセクションで説明した手順をすべて設定したら、電子メール OTP 検証用の次の GUI 画面が表示されます。URL(たとえば、https://lb1.server.com/)を使用してにアクセスすると、LDAP ログオン資格情報だけを必要とする初期ログインページが表示され、その後に [電子メール OTP 検証] ページが表示されます。

    注:

    LDAP ポリシーでは、AD 属性からユーザの電子メール IDを照会できるようにalternateEmailAttrを設定することが重要です。

    二要素ログインページ

    メールからの OTP

トラブルシューティング

ログを分析する前に、以下のようにログレベルを debug に設定することをお勧めします。

set syslogparams -loglevel DEBUG
<!--NeedCopy-->

登録-成功シナリオ

次のエントリは、ユーザ登録が成功したことを示します。

"ns_aaa_insert_hash_keyValue_entry key:kba_registered value:1"
Nov 14 23:35:51 <local0.debug> 10.102.229.76 11/14/2018:18:05:51 GMT  0-PPE-1 : default SSLVPN Message 1588 0 :  "ns_aaa_insert_hash_keyValue_entry key:alternate_mail value:eyJ2ZXJzaW9uIjoiMSIsICJraWQiOiIxbk1oWjN0T2NjLVVvZUx6NDRwZFhxdS01dTA9IiwgImtleSI6IlNiYW9OVlhKNFhUQThKV2dDcmJSV3pxQzRES3QzMWxINUYxQ0tySUpXd0h4SFRIdVlWZjBRRTJtM0ZiYy1RZmlQc0tMeVN2UHpleGlJc2hmVHZBcGVMZjY5dU5iYkYtYXplQzJMTFF1M3JINFVEbzJaSjdhN1pXUFhqbUVrWGdsbjdUYzZ0QWtqWHdQVUI3bE1FYVNpeXhNN1dsRkZXeWtNOVVnOGpPQVdxaz0iLCAiaXYiOiI4RmY3bGRQVzVKLVVEbHV4IiwgImFsZyI6IkFFUzI1Nl9HQ00ifQ==.oKmvOalaOJ3a9z7BcGCSegNPMw=="

<!--NeedCopy-->

登録-失敗シナリオ

ユーザーのログインページに、「リクエストを完了できません」というエラーメッセージが表示されます。これは、ユーザデータを暗号化するために VPN グローバルにバインドされる証明書キーがないことを示します。

Jul 31 08:51:46 <local0.info> 10.102.229.79 07/31/2020:03:21:4 6 GMT  0-PPE-1 : default SSLVPN Message 696 0 :  "Encrypt UserData: No Encryption cert is bound to vpn global"
Jul 31 08:51:46 <local0.info> 10.102.229.79 07/31/2020:03:21:46 GMT  0-PPE-1 : default SSLVPN Message 697 0 :  "KBA Register: Alternate email id Encrypted blob length is ZERO aaauser"
<!--NeedCopy-->

メール検証 — 成功シナリオ

次のエントリは、電子メール OTP 検証が成功したことを示します。

"NFactor: Successfully completed email auth, nextfactor is pwd_reset"
<!--NeedCopy-->

E メール検証 — 失敗シナリオ

ユーザーのログインページに、「リクエストを完了できません」というエラーメッセージが表示されます。これは、電子メールサーバーでログインベースの認証が有効になっていないため、同じ認証を有効にする必要があることを示します。

" /home/build/rs_130_36_15_RTM/usr.src/netscaler/aaad/pocomail.cpp[100]: void ThreadWorker_SendMailJob(SMTPJob*) 0-215: [POCO][JobID: 8]SMTP Configuration is Secure..
/home/build/rs_130_36_15_RTM/usr.src/netscaler/aaad/pocomail.cpp[108]: void ThreadWorker_SendMailJob(SMTPJob*) 0-215: [POCO][JobID: 8] First login succeeded
Wed Mar  4 17:16:28 2020
/home/build/rs_130_36_15_RTM/usr.src/netscaler/aaad/naaad.c[697]: main 0-0: timer 2 firing...
/home/build/rs_130_36_15_RTM/usr.src/netscaler/aaad/pocomail.cpp[127]: void ThreadWorker_SendMailJob(SMTPJob*) 0-0: [POCO-ERROR][JobID: 8] Poco SMTP Mail Dispatch  Failed. SMTP TYPE:1, SMTPException: Exception occurs. SMTP Exception: The mail service does not support LOGIN authentication: 250-smtprelay.citrix.com Hello [10.9.154.239]
250-SIZE 62914560
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-BINARYMIME
250 CHUNKING
<!--NeedCopy-->
電子メール OTP 認証