web-dev-qa-db-ja.com

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

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

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

https://github.com/evgeny-gridasov/openvpn-otp を確認しましたが、それでもGoogle認証システムを構成する必要があります。

11
Animesh

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

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

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

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

あなたmustここにはすべてのファイルに単一のユーザー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 idopenvpnで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ディレクトリに基づいて、それらの証明書に触れることなくユーザーを有効/無効にすることができます。

4
goteguru

セットアップ: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
  • 次の3行をopenvpnクライアントファイルに追加します。
auth-user-pass
auth-nocache
reneg-sec 0
  • openvpnサービスを再起動してテストを実行する
systemctl restart openvpn@server
  • openVPNクライアント(Windows 10の場合)と接続すると、追加のログインが取得されます(ユーザー:someuser /パスワード: 'OTP from Google Authenticator')
1