私はユーザーがを実行していないopenVPNセットアップを持っていますはDebianにシェルアカウントを持っていますVM openVPNを実行しています。記事すべてのグーグル検索中に、従来の* nixユーザー向けにGoogle認証システムを設定する手順が記載されています(たとえば、ユーザーのホームディレクトリで認証システムバイナリを実行する必要があります)。
クライアント側で使用される.ovpn
ファイルのみに基づいて認証するopenvpnサーバー用のGoogle認証システムを統合する方法を説明するドキュメントはありますか?
https://github.com/evgeny-gridasov/openvpn-otp を確認しましたが、それでもGoogle認証システムを構成する必要があります。
いいえ、もちろんできません。これは、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ディレクトリに基づいて、それらの証明書に触れることなくユーザーを有効/無効にすることができます。
セットアップ:Raspberry Piハードウェア用のUbuntu Server 18.04.4 LTS上の2FA(Google Authenticator)を備えたOpenVPNサーバー:Raspberry Pi 3モデルB + Rev 1.3
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
plugin /usr/lib/aarch64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so 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
auth-user-pass auth-nocache reneg-sec 0
systemctl restart openvpn@server