LoginSignup
2
3

More than 5 years have passed since last update.

OneLoginのRADIUSを使ってAWS WorkSpacesのMFAを実現したときに詰まったところ

Posted at

基本的に以下の2つの記事どおりにやっていけば問題ないのですが、詰まったところがあったので書いておきます。

TL;DR

  • OneLogin AD Conectorがインストールできない
    • マニュアルの必須要件を確認しよう
    • AD Domain Service を事前に入れておこう
  • AWS WordspacesのVDIに ID/PW では入れるけど MFA 有効にすると入れない
    • radtest でRADIUSをテストしよう
    • RADIUSにどの属性値を使ってOTPを投げているか確認しよう、確認できなかったら総当たりで

OneLogin AD Conectorがインストールできない

マニュアルに書いてある必要要件は満たしているはずなのに、インストーラーが先に進まない。

onelogin_ad_connector_error.png

原因は結構単純で、そもそもWindows Serverに AD Domain Service をインストールする前だったので入らなかったようです。
AD Domain Service を入れた後に起動したら問題なくインストールできました。

OneLogin RADIUSにRejectされる

ユーザー同期も問題なく、ID/PWでログインできることは確認できたのですが、MFA有効にしてOTPを送ってもOneLogin RADIUSでRejectされました。

reject_radius_event_log.png

PasswordかOTPが正しくないのかと思いましたが、OneLoginの画面には問題なくログインできました。

FreeRADIUSの出番

今回初めて存在を知って触ったんですが、 radtest というコマンドでRADIUSへ問い合わせできます。

OTPは問題ないとしたら、OneLogin RADIUSがなにかおかしいのかなと思い radtest から叩いてみました。

インストール

# apt-get -y install freeradius

疎通できてないときのログ

使っていた環境が1812ポートのOutbound閉じてた。

# radtest user password 52.34.255.206 1812 secret
Sending Access-Request of id 174 to 52.34.255.206 port 1812
    User-Name = "user"
    User-Password = "password"
    NAS-IP-Address = 172.17.0.3
    NAS-Port = 1812
    Message-Authenticator = 0x00000000000000000000000000000000
Sending Access-Request of id 174 to 52.34.255.206 port 1812
    User-Name = "user"
    User-Password = "password"
    NAS-IP-Address = 172.17.0.3
    NAS-Port = 1812
    Message-Authenticator = 0x00000000000000000000000000000000
Sending Access-Request of id 174 to 52.34.255.206 port 1812
    User-Name = "user"
    User-Password = "password"
    NAS-IP-Address = 172.17.0.3
    NAS-Port = 1812
    Message-Authenticator = 0x00000000000000000000000000000000
radclient: no response from server for ID 174 socket 3

# traceroute -U -p 1812 52.34.255.206

入力値が正しくないときのログ

  • OneLogin RADIUS Attribute
    • User-Name
      • SAMAccountName
    • User-Password
      • Password

OneLogin側でMFA必須となっていたのにOTPを送っておらず、RADIUS側でもOTPを受け取るようにAttributeも設定されていないのでエラーとなった。

# radtest user password 52.34.255.206 1812 secret
Sending Access-Request of id 92 to 52.34.255.206 port 1812
    User-Name = "user"
    User-Password = "password"
    NAS-IP-Address = 172.17.0.3
    NAS-Port = 1812
    Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Challenge packet from host 52.34.255.206 port 1812, id=92, length=168
    Reply-Message = "Please enter your one-time password (OTP). If you do not have an OTP, please register an authentication device in your OneLogin user profile."
    State = 0x353535

MFA必須を外してID/PWだけで試したときのログ

  • OneLogin RADIUS Attribute
    • User-Name
      • SAMAccountName
    • User-Password
      • Password

Access-Acceptとなり成功。

# radtest user password 52.34.255.206 1812 secret
Sending Access-Request of id 15 to 52.34.255.206 port 1812
    User-Name = "user"
    User-Password = "password"
    NAS-IP-Address = 172.17.0.3
    NAS-Port = 1812
    Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 52.34.255.206 port 1812, id=15, length=20

OTP必須にしてAttributeでOTPを受け取るようにしたときのログ

  • OneLogin RADIUS Attribute
    • User-Name
      • SAMAccountName
    • User-Password
      • Password+OTP

Access-Acceptとなり成功。

# radtest user password+OTP 52.34.255.206 1812 secret
Sending Access-Request of id 225 to 52.34.255.206 port 1812
    User-Name = "user"
    User-Password = "password+OTP"
    NAS-IP-Address = 172.17.0.3
    NAS-Port = 1812
    Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 52.34.255.206 port 1812, id=225, length=20

オプションいろいろ盛ってみて再度確認。

# radtest -t pap user password+OTP 52.34.255.206 1812 secret 1
Sending Access-Request of id 173 to 52.34.255.206 port 1812
    User-Name = "user"
    User-Password = "password+OTP"
    NAS-IP-Address = 172.17.0.3
    NAS-Port = 1812
    Message-Authenticator = 0x00000000000000000000000000000000
    Framed-Protocol = PPP
rad_recv: Access-Accept packet from host 52.34.255.206 port 1812, id=173, length=32
    Framed-Protocol = PPP
    Framed-Compression = Van-Jacobson-TCP-IP

RADIUSパケット

OneLoginのRADIUSにて、Attributeで設定できる User-Name User-Password は、RADIUSの属性値ペアの名前だったんですね。
属性値ペアで渡せるものは定義されており、ベンダ特有の属性値を作るのは推奨されていない。
だからOTPを渡すときに User-Password を使っているんですね。

AWSのAD ConnectorはOTPをRADIUSにどう送っているのか

ここまでくるとさすがに原因がわかりました。
OneLogin RADIUSのAttribute設定が、AWSのAD Connectorが送っている値とかみ合っていないことが原因です。
radtest使うまでは OTP が専用の項目で来ると思っていたので、User-Password の項目は Password で設定していました。

AWSのマニュアルを探しても、どう送っているのか見あたらなかったので、ここからは総当たりです。
Attributeの設定には以下の選択項目があります。

  • User-Name
    • Email
    • Username
    • Password
    • OTP
    • Password+OTP
    • SAMAccountName
  • User-Password
    • Email
    • Username
    • Password
    • OTP
    • Password+OTP
    • SAMAccountName

さすがにUser-Nameの項目を使ってOTPを送ることはないと思うので、候補としてはUser-Password項目の OTP Password+OTP のどちらかですね。

一応両方試してみましたが、うちの環境ではこのパターンでのみログインできました。

  • User-Name
    • SAMAccountName
  • User-Password
    • OTP

オチ

ServerWorksさんのブログにキャプチャでRADIUSのAttribute設定が載っていました。見逃していた。。。

OneLogin RADIUSのIPが変わっているので注意

ここは間違えなかったですが、最初に紹介したブログに書かれているIPだと設定が古いです。

Configure the RADIUS Server Interface - OneLogin Knowledge Base

US側なら radius.us.onelogin.com radius2.us.onelogin.com になります。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3