使用一次性密码(OTP)保护OpenVPN在Ubuntu上

在Ubuntu上使用一次性密码(OTP)保护OpenVPN

所以,你有一个很好的OpenVPN盒子。 人们需要使用他们的证书登录,但是如果他们的笔记本电脑被盗,任何人都可以登录。 当然,你可以添加密码登录,但是有点过时了。 解决方案是使用OTP(一次性密码)。

这种技术被许多大型公司(包括银行)所使用。 本教程将向您介绍如何配置OpenVPN以增加额外的安全性。

这假设您已经配置了OpenVPN并正常工作。

获取Google身份验证器

首先我们需要下载Google Authenticator代码。 这可以使用“hg”完成。 你可能需要安装mercurial,如果是这样,就这么简单:

apt-get install mercurial

我们还需要一些编译工具,所以让我们安装一个编译器的包(当我们完成后你可以删除它):

apt-get install build-essential

我们来看看Google Authenticator系统的源代码:

cd /tmp && hg clone https://google-authenticator.googlecode.com/hg/ google-authenticator && cd libpam

好的,很好,所以我们现在检查了。 为了使其与OpenVPN正常工作,我们需要更改Makefile。

vim Makefile

在许可证部分之后添加以下行.SUFFIXES:

LDFLAGS="-lpam"

保存文件并让我们继续,我们呢? 我们需要编译,这样很容易:

make

没有错误? 好。 可能是您收到有关“displayQRCode”的错误。 如果是这样,您将需要对makefile进行一些更改。 如果一切顺利,你可以继续。

find /usr/lib -name libdl.so

在makefile中,将所有3个引用替换为“/usr/lib/libdl.so”与您获得的路径(例如“/usr/lib/i386-linux-gnu/libdl.so”)。 保存并重新运行make。 你现在应该可以继续下去了。

如果编译成功,请继续安装:
make install

我们完成了,我们继续吧?

配置OpenVPN使用PAM

打开/etc/openvpn/server.conf并添加以下行:

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

这将使用PAM提供额外的认证手段。 最后一部分(openvpn)是/etc/pam.d中我们想使用的文件。 因为我们不希望它干扰其他服务(例如SSH或sudo),我们只需要使用一个新的文件。

重新启动OpenVPN以重新读取配置文件。

配置PAM以使用Google Authenticator进行身份验证

创建文件/etc/pam.d/openvpn

cp /etc/pam.d/common-account /etc/pam.d/openvpn
vim /etc/pam.d/openvpn

添加以下行:

auth    required                        pam_google_authenticator.so

如果您使用的是加密的主持人,则需要将其更改为:

auth    required                        pam_google_authenticator.so secret=/var/unencrypted-home/${USER}/.google_authenticator

我们完成了PAM配置。 显然,您可以使其复杂得多,例如通过添加IP限制(在受信任的IPS上不加任何OTP)或增加更多的安全性。

配置Google身份验证器

好的,所以我们几乎有一切都到位,但正确的配置。 这应该是每个用户完成的。 以用户身份登录(su - 用户名或直接)并发出命令:

google-authenticator

这将提供几个问题:

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/me@myserver%3Fsecret%XXXXXXXXXXXXX
Your new secret key is: XXXXXXXXXXXXXXXXX
Your verification code is 1234567
Your emergency scratch codes are:
  11111111
  22222222
  33333333
  44444444
  55555555
Do you want me to update your "~/.google_authenticator" file (y/n)

保存URL和信息,以后我们将需要。 回答“y”,你会得到下一个问题:

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n)

您也应该在这里回答Y,因为它更安全,不允许重复使用的密钥。 相应地回答下一个问题:

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n)

30秒可能不会太长,所以我们可以增加时间限制。 对我来说,30秒就够了,所以我只是在这里回答N(o)。

最后的问题:

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n)

为了额外的安全性,您应该在这里回答(Y)。

OK完成! 如果你有加密的homedirs,你将需要做一个额外的步骤。 直到他们已经实施了对加密homedirs的支持,你将不得不把它放在加密的homefolders之外。

执行:

mkdir -p /var/unencrypted-home/${USER}/
cp .google_authenticator /var/unencrypted-home/${USER}/
chmod og-rwx /var/unencrypted-home/${USER}/ -R

配置客户端

客户端应该具有密码登录作为额外的安全方法。 如果您正在为OpenVPN使用NetworkManager插件,您可以将其切换到证书+密码,否则您必须在VPN客户端配置中启用“ auth-user-pass ”。

包起来

好的,现在我们有:

  1. 安装了Google Authenticator PAM模块
  2. 启用对OpenVPN的PAM支持

安装Google Authenticator应用程式,可以在Google知识库中找到每个行动平台(Android,iOS,BlackBerry)的说明

一旦您安装了应用程序,请扫描条形码。 我们之前收到的网址(google.com/chart ...一个)提供了我们可以扫描的QR码。 一旦我们扫描它,它会自动配置客户端。

所以,下次登录到您的OpenVPN服务器时,您将获得额外的密码。 提供6位密码,您将获得访问权限。

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

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

支付宝扫一扫打赏

微信扫一扫打赏