转到 2FA(ASA SSL VPN 的双因素身份验证)

无论是您的用户还是合作伙伴需要访问组织中的特定服务器,提供对企业环境的远程访问的需求越来越频繁地出现。

出于这些目的,大多数公司都使用 VPN 技术,该技术已被证明是提供对组织本地资源的访问的可靠保护方式。

我的公司也不例外,我们和许多其他公司一样使用这项技术。 而且,与许多其他公司一样,我们使用 Cisco ASA 55xx 作为远程访问网关。

随着远程用户数量的增加,需要简化颁发凭证的程序。 但与此同时,这必须在不影响安全的情况下完成。

对于我们自己来说,我们找到了一种解决方案,使用双因素身份验证通过 Cisco SSL VPN 进行连接,并使用一次性密码。 本出版物将告诉您如何以最短的时间和零成本组织这样的解决方案(前提是您的基础设施中已经有 Cisco ASA)。

市场上充斥着用于生成一次性密码的盒装解决方案,同时提供了许多获取密码的选项,无论是通过短信发送密码还是使用硬件和软件令牌(例如,在手机上)。 但在当前的危机中,为了省钱和为雇主省钱的愿望,迫使我寻找一种免费的方式来实现生成一次性密码的服务。 虽然免费,但与商业解决方案相比并不逊色多少(在这里我们应该进行预订,请注意该产品也有商业版本,但我们同意我们的金钱成本将为零)。

所以,我们需要:

- 带有一组内置工具的 Linux 映像 - multiOTP、FreeRADIUS 和 nginx,用于通过 Web 访问服务器(http://download.multiotp.net/ - 我使用了 VMware 的现成映像)
— 活动目录服务器
— Cisco ASA 本身(为了方便起见,我使用 ASDM)
— 任何支持 TOTP 机制的软件令牌(例如,我使用 Google Authenticator,但同样的 FreeOTP 也可以)

我不会详细介绍图像如何展开。 因此,您将收到已安装 multiOTP 和 FreeRADIUS 的 Debian Linux,并配置为协同工作,以及用于 OTP 管理的 Web 界面。

步骤 1. 我们启动系统并针对您的网络进行配置
默认情况下,系统附带 root root 凭据。 我想每个人都猜到在第一次登录后更改 root 用户密码是个好主意。 您还需要更改网络设置(默认情况下为“192.168.1.44”,网关为“192.168.1.1”)。 之后您可以重新启动系统。

让我们在 Active Directory 中创建一个用户 OTP,有密码 我的超级密码.

步骤 2. 设置连接并导入 Active Directory 用户
为此,我们需要访问控制台并直接访问文件 多点处理.php,我们将使用它配置 Active Directory 的连接设置。

转到目录 /usr/local/bin/multiotp/ 并依次执行以下命令:

./multiotp.php -config default-request-prefix-pin=0

确定输入一次性 pin(0 或 1)时是否需要附加(永久)pin

./multiotp.php -config default-request-ldap-pwd=0

确定输入一次性 PIN 码时是否需要域密码(0 或 1)

./multiotp.php -config ldap-server-type=1

指示 LDAP 服务器的类型(0 = 常规 LDAP 服务器,在我们的示例中 1 = Active Directory)

./multiotp.php -config ldap-cn-identifier="sAMAccountName"

指定显示用户名的格式(此值将仅显示名称,不显示域)

./multiotp.php -config ldap-group-cn-identifier="sAMAccountName"

同样的事情,只适用于一组

./multiotp.php -config ldap-group-attribute="memberOf"

指定判断用户是否属于某个组的方法

./multiotp.php -config ldap-ssl=1

我是否应该使用与 LDAP 服务器的安全连接(当然 - 是的!)

./multiotp.php -config ldap-port=636

连接LDAP服务器的端口

./multiotp.php -config ldap-domain-controllers=adSRV.domain.local

您的 Active Directory 服务器地址

./multiotp.php -config ldap-base-dn="CN=Users,DC=domain,DC=local"

我们指示从哪里开始搜索域中的用户

./multiotp.php -config ldap-bind-dn="[email protected]"

指定在 Active Directory 中具有搜索权限的用户

./multiotp.php -config ldap-server-password="MySuperPassword"

指定连接到 Active Directory 的用户密码

./multiotp.php -config ldap-network-timeout=10

设置连接到 Active Directory 的超时

./multiotp.php -config ldap-time-limit=30

我们为用户导入操作设置了时间限制

./multiotp.php -config ldap-activated=1

激活 Active Directory 连接配置

./multiotp.php -debug -display-log -ldap-users-sync

我们从 Active Directory 导入用户

步骤 3. 生成令牌的二维码
这里的一切都极其简单。 在浏览器中打开 OTP 服务器的 Web 界面,登录(不要忘记更改管理员的默认密码!),然后单击“打印”按钮:

转到 2FA(ASA SSL VPN 的双因素身份验证)
此操作的结果将是包含两个 QR 代码的页面。 我们大胆地忽略其中的第一个(尽管有吸引人的铭文 Google Authenticator / Authenticator / 2 Steps Authenticator),并且我们再次大胆地将第二个代码扫描到手机上的软件令牌中:

转到 2FA(ASA SSL VPN 的双因素身份验证)
(是的,我故意破坏了二维码以使其无法读取)。

完成这些操作后,您的应用程序将开始每三十秒生成一个六位数的密码。

当然,您可以在同一界面中检查它:

转到 2FA(ASA SSL VPN 的双因素身份验证)
通过在手机上的应用程序中输入您的用户名和一次性密码。 您收到积极的回应了吗? 所以我们继续前进。

步骤 4. FreeRADIUS 操作的附加配置和测试
正如我上面提到的,multiOTP 已经配置为与 FreeRADIUS 一起使用,剩下的就是运行测试并将有关 VPN 网关的信息添加到 FreeRADIUS 配置文件中。

我们回到服务器控制台,到目录 /usr/local/bin/multiotp/, 进入:

./multiotp.php -config debug=1
./multiotp.php -config display-log=1

包括更详细的日志记录。

在 FreeRADIUS 客户端配置文件中 (/etc/freeradius/clinets.conf) 注释掉所有相关行 本地 并添加两个条目:

client localhost {
        ipaddr = 127.0.0.1
        secret          = testing321
        require_message_authenticator = no
}

- 用于测试

client 192.168.1.254/32 {
        shortname =     CiscoASA
        secret =        ConnectToRADIUSSecret
}

- 用于我们的 VPN 网关。

重新启动 FreeRADIUS 并尝试登录:

radtest username 100110 localhost 1812 testing321

哪里 用户名 = 用户名, 100110 = 手机上的应用程序向我们提供的密码, 本地 = RADIUS 服务器地址, 1812 — RADIUS 服务器端口, testing321 — RADIUS 服务器客户端密码(我们在配置中指定)。

该命令的输出结果大约如下:

Sending Access-Request of id 44 to 127.0.0.1 port 1812
        User-Name = "username"
        User-Password = "100110"
        NAS-IP-Address = 127.0.1.1
        NAS-Port = 1812
        Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=44, length=20

现在我们需要确保用户已成功通过身份验证。 为此,我们将查看 multiotp 本身的日志:

tail /var/log/multiotp/multiotp.log

如果最后一个条目有:

2016-09-01 08:58:17     notice  username  User    OK: User username successfully logged in from 127.0.0.1
2016-09-01 08:58:17     debug           Debug   Debug: 0 OK: Token accepted from 127.0.0.1

然后一切顺利,我们可以完成

步骤 5:配置 Cisco ASA
我们同意,我们已经配置了通过 SLL VPN 进行访问的组和策略,并与 Active Directory 一起配置,并且我们需要为此配置文件添加双因素身份验证。

1. 添加新的 AAA 服务器组:

转到 2FA(ASA SSL VPN 的双因素身份验证)
2. 将我们的 multiOTP 服务器添加到组中:

转到 2FA(ASA SSL VPN 的双因素身份验证)
3. 我们编辑 连接配置文件,将Active Directory服务器组设置为主认证服务器:

转到 2FA(ASA SSL VPN 的双因素身份验证)
4. 标签 高级 -> 身份验证 我们还选择 Active Directory 服务器组:

转到 2FA(ASA SSL VPN 的双因素身份验证)
5. 标签 高级 -> 二级 身份验证,选择已创建的注册了 multiOTP 服务器的服务器组。 请注意,会话用户名是从主 AAA 服务器组继承的:

转到 2FA(ASA SSL VPN 的双因素身份验证)
应用设置并

第 6 步,也就是最后一步
让我们检查一下双因素身份验证是否适用于 SLL VPN:

转到 2FA(ASA SSL VPN 的双因素身份验证)
瞧! 通过 Cisco AnyConnect VPN 客户端连接时,系统还会要求您输入第二个一次性密码。

我希望这篇文章能够对某人有所帮助,并且能够给人们思考如何使用它, 免费 OTP 服务器,用于其他任务。 如果您愿意,请在评论中分享。

来源: habr.com

添加评论