使用 Telegram 机器人在 OpenVPN 中进行双因素身份验证

本文介绍了如何设置 OpenVPN 服务器,以通过 Telegram 机器人启用双因素身份验证,该机器人在连接时会发送确认请求。

OpenVPN 是一款著名的免费开源 VPN 服务器,广泛用于组织员工对内部组织资源的安全访问。

作为连接到 VPN 服务器的身份验证,通常使用密钥和用户登录名/密码的组合。 同时,存储在客户端上的密码将整个集合变成一个单一因素,无法提供适当的安全级别。 攻击者在获得对客户端计算机的访问权限后,也获得了对 VPN 服务器的访问权限。 对于来自运行 Windows 的计算机的连接尤其如此。

使用第二个因素可将未经授权访问的风险降低 99%,并且根本不会使用户的连接过程变得复杂。

让我立即进行预订:为了实施,您需要连接第三方身份验证服务器 multifactor.ru,您可以在其中使用免费关税来满足您的需求。

的操作原理

  1. OpenVPN 使用 openvpn-plugin-auth-pam 插件进行身份验证
  2. 该插件检查服务器上的用户密码,并通过 Multifactor 服务中的 RADIUS 协议请求第二个因素
  3. Multifactor 通过 Telegram 机器人向用户发送消息以确认访问
  4. 用户在 Telegram 聊天中确认访问请求并连接到 VPN

安装 OpenVPN 服务器

网上有很多文章介绍安装和配置OpenVPN的过程,我们就不重复了。 如果您需要帮助,文章末尾有几个教程链接。

设置多因素

多因素控制系统,转到“资源”部分并创建一个新的 VPN。
创建后,您将有两个可用选项: NAS 标识符 и 共享秘密,后续配置将需要它们。

使用 Telegram 机器人在 OpenVPN 中进行双因素身份验证

在“组”部分中,转到“所有用户”组设置并删除“所有资源”标志,以便只有特定组的用户才能连接到 VPN 服务器。

创建一个新组“VPN 用户”,禁用除 Telegram 之外的所有身份验证方法,并指示用户有权访问创建的 VPN 资源。

使用 Telegram 机器人在 OpenVPN 中进行双因素身份验证

在“用户”部分中,创建有权访问 VPN 的用户,将其添加到“VPN 用户”组并向他们发送链接以配置第二个身份验证因素。 用户登录名必须与 VPN 服务器上的登录名匹配。

使用 Telegram 机器人在 OpenVPN 中进行双因素身份验证

设置 OpenVPN 服务器

打开文件 /etc/openvpn/server.conf 并添加使用 PAM 模块进行身份验证的插件

plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn

该插件可以位于目录中 /usr/lib/openvpn/插件/ или /usr/lib64/openvpn/插件/ 取决于您的系统。

接下来需要安装 pam_radius_auth 模块

$ sudo yum install pam_radius

打开文件进行编辑 /etc/pam_radius.conf 并指定 Multifactor 的 RADIUS 服务器地址

radius.multifactor.ru   shared_secret   40

其中:

  • radius.multifactor.ru — 服务器地址
  • shared_secret - 从相应的 VPN 设置参数复制
  • 40秒-等待大margin请求超时

其余服务器必须删除或注释掉(开头加分号)

接下来,创建服务类型openvpn的文件

$ sudo vi /etc/pam.d/openvpn

并写在

auth    required pam_radius_auth.so skip_passwd client_id=[NAS-IDentifier]
auth    substack     password-auth
account substack     password-auth

第一行使用参数连接 PAM 模块 pam_radius_auth:

  • Skip_passwd - 禁用将用户密码传输到 RADIUS Multifactor 服务器(他不需要知道它)。
  • client_id — 将 [NAS-Identifier] 替换为 VPN 资源设置中的相应参数。
    所有可能的参数在中描述 模块的文档.

第二行和第三行包括服务器上的登录名、密码和用户权限的系统验证以及第二个身份验证因素。

重新启动 OpenVPN

$ sudo systemctl restart openvpn@server

客户端设置

在客户端配置文件中包含对用户登录名和密码的请求

auth-user-pass

Проверка

启动 OpenVPN 客户端,连接到服务器,输入您的用户名和密码。 Telegram 机器人将发送带有两个按钮的访问请求

使用 Telegram 机器人在 OpenVPN 中进行双因素身份验证

一个按钮允许访问,第二个按钮阻止访问。

现在您可以安全地将密码保存在客户端上;第二个因素将可靠地保护您的 OpenVPN 服务器免遭未经授权的访问。

如果有什么不起作用

依次检查您是否错过了任何内容:

  • 服务器上有一个使用 OpenVPN 并设置了密码的用户
  • 服务器可以通过 UDP 端口 1812 访问地址 radius.multifactor.ru
  • NAS-Identifier 和 Shared Secret 参数指定正确
  • 已在 Multifactor 系统中创建具有相同登录名的用户,并已被授予访问 VPN 用户组的权限
  • 用户已通过 Telegram 配置身份验证方法

如果您之前没有设置过 OpenVPN,请阅读 详细文章.

这些说明是在 CentOS 7 上以示例进行的。

来源: habr.com

添加评论