如何设置OpenVPN与LinOTP进行身份验证

如何设置OpenVPN使用LinOTP进行身份验证

介绍

此操作将显示您设置OpenVPN以根据LinOTP身份验证后端验证用户的方式 。 因此,您可以使用不同类型的OTP令牌的双因素身份验证来启动您的VPN。

如果您只有几个用户或几台机器,并将智能手机用作您的令牌套件,那么您应该可以在本网站上查看此操作。

但另一方面,如果您需要使用不同类型的令牌来管理多个用户,那么您应该继续阅读本文。

设置LinOTP

首先你需要设置LinOTP。 有几种方法可以做到这一点。 您可以下载Debian和Ubuntu软件包 ,也可以使用Python Package Index安装系统。 它提供了一个很好的快速启动,以获得服务并运行演示目的(检查最新版本)。

您可以将LinOTP后端与OpenVPN守护程序一起安装在同一台机器上,以保持直观简单。

为LinOTP配置PAM

有不同的方法来验证LinOTP。 您可以使用Web API或RADIUS服务器,但也可以使用PAM模块对OTP令牌进行身份验证。

LinOTP提供了一个用C编写的pam_linotp,它包含在认证模块中。 但是,我们现在不想经历编译C的麻烦,并且安装所有必要的devel软件包。

所以我们转向另一个PAM模块: pam_py_linotp

我们现在要在OpenVPN服务器上安装这个pam模块。

你可以下载它,打开它,安装它:

tar -ztf pam_py_linotp-0.1.tar.gz
cd pam_py_linotp-0.1/
sudo python setup.py install

或者,您可以使用pip工具更快地执行:

sudo pip install pam_py_linotp

或者您可以将单个python模块复制到给定位置:

cd pam_py_linotp-0.1/
cp src/ pam_linotp.py /lib/security

要使用此模块,您需要安装libpam-python。

libpam-python允许您在PAM中使用pam_py_linotp.py python模块。

根据您的分布安装libpam-python,如:

sudo apt-get install libpam-python

要么

yum install libpam-python

为了使使用更加舒适,并且还可以简单地为您的其他服务(如ssh,gdm或kdm)添加双因素身份验证,我们定义了一个可堆叠的验证文件common-linotp:

auth    [success=1 default=ignore]      pam_python.so /lib/security/pam_linotp.py \
debug url=https://localhost/validate/check
auth requisite pam_deny.so
auth required pam_permit.so

请注意,pam_python.so模块之后的第一个参数是您安装或复制的python模块。 并且您需要提供一个LinOTP服务器所在的URL。 如果在OpenVPN即将运行的同一台机器上安装了LinOTP,则可以将其保留为“localhost”。 否则相应地调整名称或IP地址。

在URL中,您还需要调整协议(在https或http上运行LinOTP)和端口。

我们现在有一个简单的文件common-linotp,我们以后可以使用它来包含在我们的PAM定义中。

用PAM设置OpenVPN

在客户机上设置客户端配置client.ovpn,如下所示:

client
dev tun
proto udp
remote your.server.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
comp-lzo
verb 3
auth-user-pass

当然,您需要调整服务器名称和证书名称。

在您的OpenVPN服务器上设置server.conf,如下所示:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 192.168.42.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
plugin /usr/lib/openvpn/openvpn-auth-pam.so openvpn

调整证书名称和IP池。

最后我们需要编辑/etc/pam.d/openvpn ,它应该包含以下几行:

@include common-linotp 
session    sufficient pam_permit.so
account    sufficient  pam_permit.so

会话和帐户使用pam_permit.so,以便我们不需要为OpenVPN服务器上的VPN用户创建本地用户帐户。

当用户输入正确的OTP值和可选的OTP PIN时,建立VPN。

结论

我们设置了一个OpenVPN服务器,以验证由LinOTP管理的OTP令牌。

有趣的是,我们还使用客户端证书,以便只有在机器具有正确的客户端证书并且用户具有正确的OTP令牌的情况下才能建立VPN。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏