.ovpnファイルベースのopenVPNアクセスにGoogle Authenticatorを使用して2要素認証を有効にする方法


11

openVPNを実行しているDebian VMにユーザーがシェルアカウントを持たない openVPNセットアップがあります。グーグルで見つけた記事にはすべて、従来の* nixユーザー向けにGoogle Authenticatorを設定する手順が含まれています(たとえば、ユーザーのホームディレクトリでAuthenticatorバイナリを実行する必要があります)。

.ovpnクライアント側で使用されるファイルのみに基づいて認証するopenvpnサーバー用のGoogle認証システムを統合する方法を説明するドキュメントはありますか?

私が見https://github.com/evgeny-gridasov/openvpn-otp、それはまだGoogle認証を設定する必要があります。


Googleオーセンティケーターの登録に問題がありますか、それともパスワードを入力する必要がありますか?
cornelinux 2016年

回答:


4

いいえ、もちろんできません。これは、2FAの目的そのものを無効にします。サーバーにはユーザーの資格情報を検証する手段が必要です。この情報はネットワーク経由で送信しないでください(つまり、client.ovpnファイルのみを使用することはできません)。

UNIXユーザーを作成する必要はありませんが、ユーザーに確認コードをサーバーにインストールさせる必要があります。既に発行された証明書を使用する仮想ユーザーでsftp、クライアント側(相互)許可付きのhttps、CIFS(samba)、またはTLS拡張付きの古き良きftp、またはユーザーが作成した検証コードをサーバーに通知するその他の方法を使用できます。 。通信チャネルは安全でなければなりません(暗号化された||ローカル)。

当然、ユーザーが自分のファイルをアップロードする場合、openvpn-otpで使用される集約ファイルベースの認証情報を使用することはできません。幸い、Linuxの優れたセキュリティモジュールpamを使用することで、別の(そしてはるかに優れた)オプションを利用できます。

まず、上記のいずれかの方法で、google-authenticatorによって作成されたユーザーファイルをディレクトリに収集する必要があります。この例では、/ etc / google-authになります。

実際のユーザーはいないため、ここではすべてのファイルに単一のユーザーIDを適用する必要あります。それはしてみましょうopenvpnの。権限は0400(-r --------)でなければなりません。Pamは、(確かに)世界/グループが読み取り可能な資格情報を好みません。これは、samba、apache、ftp、または最悪の場合はcronタブを使用して簡単に実施できます(非推奨)。

テスト目的のために、これをしてください:

mkdir /etc/google-auth
apt-get install libpam-google-authenticator
google-authenticator
# set up as you wish, save image and/or codes
mv ~/.google_authenticator /etc/google-auth/some_username
chown -R openvpn /etc/google-auth

その後、独自のgoogle認証モジュールを持つlibpamに対して認証するようにopenvpnに要求します。これをopenvpnサーバーファイルに追加します。

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn

これは、pam auth id openvpnでpam認証方式を使用することを示しています。

次に、openvpnのpam設定を作成します。/etc/pam.d/openvpnを編集します。

auth    requisite       /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER}  user=openvpn
account    required     pam_permit.so

ここでは、Google認証が成功しないとすぐに失敗する(必須)、デフォルトの$ HOME / .google_authenticator(secret =)の代わりに特別なシークレットファイルを使用しており、関連付けられている実際のユーザーIDがないため、ユーザーopenvpnとしてファイルにアクセスしますユーザーと。次の行では、認証が成功した後で全員に接続を許可することを示しています。もちろん、ここで独自の許可ポリシーを実装する必要があります。許可されたユーザーは、それぞれのpamモジュールを使用して、ファイル、mysql db、またはldapで制御できます。

これをopenvpnクライアントファイルに追加します

   auth-user-pass
   auth-nocache
   reneg-sec 0

auth-user-passを使用して、openvpnクライアントがユーザー名とパスワードを要求できるようにします。キャッシングは好きではなく(「パスワード」が変更されます)、同じ理由で定期的な再ネゴシエーションは好ましくありません。

その後、openvpn-otpなしで接続できるはずです。必要に応じてPAM制御ファイルに非常に複雑なルールを実装できるため、これははるかに柔軟な方法であると考えてください。たとえば、mysqlまたはldapディレクトリに基づいて、それらの証明書に触れることなくユーザーを有効/無効にすることができます。


1

セットアップ:Raspberry Piハードウェア用のUbuntu Server 18.04.4 LTS上の2FA(Google Authenticator)を備えたOpenVPNサーバー:Raspberry Pi 3モデルB + Rev 1.3

  • アクティブな2FAログイン設定のないLinuxユーザーでログインする必要があります(私の場合はsomeuser)
  • 次のコマンドを入力します
sudo apt install libqrencode3 libpam-google-authenticator
google-authenticator
sudo mv /home/someuser/.google_authenticator /etc/google-auth/someuser
sudo chown -R root /etc/google-auth
  • 次のファイルをopenvpn構成ファイルに追加します(私の場合は/etc/openvpn/server/server.conf)。
plugin /usr/lib/aarch64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so  openvpn
  • /etc/pam.d/openvpnファイルを作成し、次の内容を入力します
# Google Authenticator
auth    requisite       /lib/aarch64-linux-gnu/security/pam_google_authenticator.so secret=/etc/google-auth/someuser user=root
account    required     pam_permit.so
  • openvpnクライアントファイルに次の3行を追加します
auth-user-pass
auth-nocache
reneg-sec 0
  • openvpnサービスを再起動してテストを実行する
systemctl restart openvpn@server
  • OpenVPNクライアント(Windows 10の場合)に接続すると、追加のログインが取得されます(ユーザー:someuser /パスワード: 'OTP from Google Authenticator')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.