Web 認証用の SMS OTP の設定
NetScalerをサードパーティのSMSプロバイダーと統合して、認証をさらに強化できるようになりました。
NetScalerアプライアンスは、認証の第2要素としてユーザーのモバイルにOTPを送信するように構成できます。アプライアンスは、AD ログインの成功後に OTP に入るためのログオンフォームをユーザーに提示します。SMS OTP 認証が正常に検証されて初めて、要求されたリソースがユーザーに提示されます。
SMS OTP認証を実現するために、NetScalerアプライアンスはバックエンドの以下の要素を利用します。
- LDAP認証を使用してユーザーを認証し、ユーザーの携帯電話番号を抽出します。
- OTP を作成し、NS 変数に格納します。変数の設定と使用。
- LDAP から抽出した携帯電話番号に WebAuth 認証方式で OTP を送信します。
- 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-->
注:
カスケード認証のポリシーが追加され、エンドユーザーの信頼性が高く継続的な認証が可能になります。現在の要因が失敗した場合、ユーザーエクスペリエンスに影響がないように次の要素が評価されます。