如何使用Google Authenticator为基于.ovpn文件的openVPN访问启用2要素身份验证?


11

我有一个openVPN设置,其中用户在运行openVPN的Debian VM上没有外壳帐户。我在Googling上找到的所有文章都包含为经典* nix用户设置Google Authenticator的说明(例如,需要在用户的主目录中执行Authenticator二进制文件)。

是否有文档说明如何为仅基于.ovpn客户端使用的文件进行身份验证的openvpn服务器集成Google Authenticator ?

我看了https://github.com/evgeny-gridasov/openvpn-otp,但是它仍然需要配置Google Authenticator。


是Google身份验证器的注册问题还是需要输入密码?
cornelinux

Answers:


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

之后,您要求openvpn针对libpam进行身份验证,libpam具有自己的google auth模块。将此附加到您的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 =),并且由于没有真正的userid关联,我们以用户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身份验证器)的OpenVPN服务器硬件:Raspberry Pi 3 Model 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 /密码:“来自Google Authenticator的OTP”)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.