インターネットへ接続制限されているWindowsサーバーに多要素認証を組み込む(HTTP Proxy経由のみ利用)

## はじめに
IBM Security Verify の Gateway for Windows Login を利用すると、Windowsのリモートデスクトップのログインや、ローカルログインに多要素認証を組み込むことができます。

今回はHTTP Proxyを利用する設定を試してみたことを記載しています。
インターネットへの接続をHTTP Proxy経由のみに制限されているWindowsサーバーに対して多要素認証を組み込むというシナリオを想定しました。
検証で利用するWindowsサーバーは、HTTP Proxyを介してインターネットに接続することは可能で、
インターネット側から直接の接続はできないという前提です。

## 構成のイメージ
![プレゼンテーション1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147690/5834b383-fe81-4521-bfdc-0978da13dd65.gif)




動作確認にあたり、HTTP ProxyにはSquidを使用しました。

多要素認証をしたいWindowsサーバーは、Squidの提供するHTTP Proxyを経由しインターネットにHTTPSで接続をすることができるようになっています。インターネット側からは、多要素認証をしたいWindowsサーバーへはアクセスできません。

構成イメージでは、メールやSMS等を使ってワンタイムパスワードを通知していますが、Google AuthenticatorのようなTOTPアプリケーションを利用してワンタイムパスワードを管理することも試しています。


## 設定手順
### 事前準備
以下の設定を行います。
+ IBM Security Verify の APIクライアントの構成
+ WindowsサーバーにIBM Security Verify Gateway for Windows Login アプリケーションをダウンロード
+ IBM Security Verify Gateway for Windows の構成


### 設定後のconfig.jsonの設定イメージ
IBM Security Verify Gateway for Windows の構成パラメーターである config.json は以下のように設定をしました。
```config.json
{
    "ibm-auth-api":{
        /*IBM Security Verify tenant API Client and connection details. */
        "client-id":"xxxxxxxx-xxxx-xxxx-8196-01f6b288b4cb",
        /* See obfuscate.exe tool to obfuscate "client-secret". */
        "obf-client-secret":"xxxxxxxxxxxxxxxx4AWf4dNB62XMzwBe39CGuhVcT3A=",
        "protocol":"https",
        "host":"xxxx.verify.ibm.com",
        "port":443,
        "proxy":"http://192.168.101.bbb:3128",
        "revoke-best-effort":true ,
        "max-handles":16
    },
    "credential-provider":{
        /* Windows Logon behavior */
        "trace-file":"c:/work/credprov.log",
        "username-format":"%U",
        "disable-builtin-password-logon": false,
        "rdp-only": false,
        "auth-method":"winpwd-then-choice-then-otp",
        "choices":["device","transient","totp","smsotp","emailotp", "voiceotp"]
    }
}

```
HTTP Proxy を経由して接続するための設定として、config.jsonに以下のパラメータを設定しました。(192.168.101.bbb:3128 は HTTP Proxy のアドレスとポートです）

"proxy":"http://192.168.101.bbb:3128",
"revoke-best-effort":true ,

### 動作確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147690/295bce7c-346d-4e4b-ad06-1ee73e70ad82.png)



HTTP Proxy経由で IDaaSである IBM Security Verify に接続できるように設定したことで、多要素認証を実現することができました。
画面右下に![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147690/a33c6a51-a4f1-4292-884b-d32fcf655c53.png)このように表示されているように、このサーバーはインターネットへの接続が制限された状態になっていることがわかります。

Gateway for Windows Login に HTTP Proxy の設定をすることで、インターネット上のIDaaSサービスである、IBM Security Verify を利用して多要素認証を実現することができました。
WindowsサーバーにID・パスワードを入力後、ユーザーは通知されたワンタイムパスワードを使って多要素認証をすることができます。



### 多要素認証の方式
メール、SMS、電話などは、IBM Security Verify からユーザーに通知されます。
メール、SMS、電話でのワンタイムパスワードの通知以外にも、ワンタイムパスワードを表示するアプリケーション (Google Authenticator など)を利用した方法、スマートフォンアプリのIBM Security Verifyを利用する方法もあります。

参考）スマートフォンアプリでTOTP（時間ベースのワンタイムパスワード）を利用して多要素認証した動作例
![プレゼンテーション2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147690/5e1cd989-2fba-43be-810a-6aa8ffc37381.gif)


## 最後に
今回は、インターネットへの接続をHTTP Proxy経由のみに制限されているWindowsサーバーに対して多要素認証を組み込みました。

### 参考資料
+ マニュアル: [IBM Security Verify Gateway for Windows のインストール](　https://www.ibm.com/docs/ja/security-verify?topic=login-installing-security-verify-gateway-windows)
+ [VerifyでWindowsリモートデスクトップに多要素認証を導入してみた。](https://www.niandc.co.jp/tech/20240826_53394/)
+ [Windowsリモートデスクトップに多要素認証を組み込む](　https://qiita.com/ogawa_to/items/930eb202832578224a11)