ADC

Web 認証用の SMS OTP の設定

NetScalerをサードパーティのSMSプロバイダーと統合して、認証をさらに強化できるようになりました。

NetScalerアプライアンスは、認証の第2要素としてユーザーのモバイルにOTPを送信するように構成できます。アプライアンスは、AD ログインの成功後に OTP に入るためのログオンフォームをユーザーに提示します。SMS OTP 認証が正常に検証されて初めて、要求されたリソースがユーザーに提示されます。

SMS OTP認証を実現するために、NetScalerアプライアンスはバックエンドの以下の要素を利用します。

  1. LDAP認証を使用してユーザーを認証し、ユーザーの携帯電話番号を抽出します。
  2. OTP を作成し、NS 変数に格納します。変数の設定と使用
  3. LDAP から抽出した携帯電話番号に WebAuth 認証方式で OTP を送信します。
  4. OTP を検証します。

前提条件

機能を有効にしてSNIPを追加

以下のコマンドを実行して、この構成に必要な機能を有効にします:

enable ns feature LB SSL SSLVPN AAA

add ns ip <SNIP-IP> <subnet mask> -type SNIP
<!--NeedCopy-->

OTP ストアを構成する

管理者は、SMS 認証に使用する OTP を保存するデータベース/ストアを設定する必要があります。

expires パラメータ(OTP 有効期限)の推奨設定範囲は 30 ~ 180 秒です。この範囲外の値があると、SMS OTP 設定と nFactor フローが失敗する可能性があります。

add ns variable otp_store -type "map(text(65),text(6),100000)" -ifValueTooBig undef -ifNoValue undef -expires 60
<!--NeedCopy-->

ユーザーセッションごとにランダムOTPを生成

次のコマンドを使用して、ユーザーセッションごとに6桁のランダムOTPを生成し、OTPストアに保存します。

add ns assignment generate_otp -variable "$otp_store[AAA.USER.SESSIONID]" -set ("000000" + SYS.RANDOM.MUL(1000000).TYPECAST_UNSIGNED_LONG_AT.TYPECAST_TEXT_T).SUFFIX(6)
<!--NeedCopy-->

NetScaler によるSMS OTP認証の設定

  • SMS 2要素認証機能を構成する前に、NetScalerアプライアンスの第1要素としてLDAP認証を構成し、認証を有効にする必要があります。LDAP 認証を設定する手順については、「 構成ユーティリティを使用して LDAP 認証を構成するには」を参照してください。

  • LDAP を設定し、SMS OTP 認証に使用する携帯電話番号を抽出します。

第 1 要素構成のサンプル

認証の最初の要素として LDAP を設定します。

 add authentication ldapAction ldap_extraction_action -serverIP <IP_Adress> -ldapBase OU=Sanity,dc=aaa,dc=local  -ldapBindDn administrator@aaa.local -ldapBindDnPassword <password> -ldapLoginName samaccountname -groupAttrName memberof -subAttributeName CN -authentication disabled

 add authentication Policy ldap_extraction_policy -rule true -action ldap_extraction_action
<!--NeedCopy-->

携帯電話番号はAAA.USER.ATTRIBUTE(1)を使用して抽出でき、バックエンドサーバーに送信する際に含めることができます。

第 2 要素構成のサンプル

次のサンプル設定を使用して、エンドユーザーに送信される OTP が生成されます。

add authentication Policy set_otp -rule true -action generate_otp

add authentication policylabel set_otp_label -loginSchema LSCHEMA_INT

 bind authentication policylabel set_otp_label  -policyName set_otp -priority 1

add authentication Policy cascade_noauth -rule true -action NO_AUTHN
<!--NeedCopy-->

Web 認証ポリシーとアクション

次に、LDAP ポリシーから取得した携帯電話番号とともに OTP を任意のサードパーティの SMS 送信者に送信するように Web 認証アクションを設定します。

OTP を確認し、生成された OTP をサードパーティの SMS プロバイダーまたは以下に設定されている任意の Web サーバーに送信します:

add policy expression otp_exp_post ""Message: OTP is " + $otp_store[AAA.USER.SESSIONID] + " for login into secure access  gateway. Valid till EXPIRE_TIME. Do not share the OTP with anyone for security reasons&Mobile:" + AAA.USER.ATTRIBUTE(1)"

add authentication webAuthAction sms_post -serverIP <web_application_ip> -serverPort 80 -fullReqExpr q{"POST /MyPHP/auth.php HTTP/" + http.req.version.major + "." + http.req.version.major + "\r\nAccept:\*/\*\r\nHost: <web_application_ip> \r\nContent-Length:100\r\n\r\n" + otp_exp_post} -scheme http -successRule true

add authentication Policy post_wpp -rule true -action sms_post
<!--NeedCopy-->

ワンタイムパスワードを確認する

次のポリシーとポリシーラベルを追加して、ユーザーセッションに OTP が存在するかどうかを確認します:

add authentication policylabel check_otp_label -loginSchema LSCHEMA_INT

add authentication Policy check_otp -rule "$otp_store.valueExists(AAA.USER.SESSIONID)" -action NO_AUTHN
<!--NeedCopy-->

ユーザーが入力した値とOTPストアの値を比較することによるOTP検証

次のコマンドを実行して、ユーザーが入力した値と OTP ストア値を比較して OTP を確認します:

add authentication loginSchema onlypassword -authenticationSchema "/nsconfig/loginschema/LoginSchema/OnlyPassword.xml"

add authentication policylabel otp_verify_label -loginSchema onlypassword

add authentication Policy otp_verify -rule "AAA.LOGIN.PASSWORD.EQ($otp_store[AAA.USER.SESSIONID])" -action NO_AUTHN
<!--NeedCopy-->

ポリシーを認証ポリシーラベルにバインドする

bind authentication policylabel set_otp_label -policyName cascade_noauth -priority 2 -gotoPriorityExpression NEXT -nextFactor check_otp_label

bind authentication policylabel check_otp_label -policyName post_wpp -priority 1 -gotoPriorityExpression NEXT -nextFactor otp_verify_label

bind authentication policylabel otp_verify_label -policyName otp_verify -priority 1 -gotoPriorityExpression NEXT
<!--NeedCopy-->

認証仮想サーバーと負荷分散仮想サーバーの作成

 add authentication vserver avs SSL <ipadresss> 443

add ssl certKey aaa_local -cert aaatm_wild.cer -key aaatm_wild.key

bind ssl vserver avs -certkeyName aaa_local

bind authentication vserver avs -policy ldap_extraction_policy -priority 1 -nextFactor set_otp_label -gotoPriorityExpression NEXT

add lb vserver lb HTTP <ip_adresss> 80 -persistenceType NONE -cltTimeout 180 -AuthenticationHost <auth_server> -Authentication ON

add service svc <Ip_adresss> HTTP 80

bind lb vserver lb svc
<!--NeedCopy-->

注:

カスケード認証のポリシーが追加され、エンドユーザーの信頼性が高く継続的な認証が可能になります。現在の要因が失敗した場合、ユーザーエクスペリエンスに影響がないように次の要素が評価されます。

Web 認証用の SMS OTP の設定