部署指南:了解如何将 Citrix Gateway 配置为使用 nFactor 对 RADIUS 服务器进行 MFA 身份验证

概述

如何将 Citrix Gateway 配置为使用 nFactor 对 RADIUS 服务器进行身份验证以进行多重身份验证 (MFA)。

本文介绍如何配置 Citrix ADC 网关以将 nFactor 身份验证用于基于 LDAP 和 RADIUS 的多因素身份验证以及常规故障排除技术。

在本文中,我们假设您的 Citrix ADC 具有 Citrix Gateway 实现以及 RADIUS 和 LDAP 服务器。

本文还建议通过本地负载平衡虚拟服务器连接到 RADIUS 和 LDAP 服务器,并假定负载均衡器已创建。您可以在此处了解有关创建负载平衡虚拟服务器的更多信息,并在此处 了解有关在 负载均衡器上配置 RADIUS 持久性的更多信息。

RADIUS 通信概述

RADIUS 通信流从来自客户端(在本例中为 Citrix ADC)的访问请求数据包开始。RADIUS 服务器验证客户端并验证在访问请求中收到的凭据。验证后,RADIUS 服务器会以 “访问接受”、“拒绝” 或 “质询” 进行响应,要求用户提供更多详细信息。

RADIUS_communication_image

RADIUS 服务器有一个有效客户端列表以及每个客户端的共享密钥。RADIUS 服务器通常会忽略来自无效客户端的请求,但某些实现会返回身份验证失败。共享密钥对凭据的密码部分进行加密。当共享密钥错误时,服务器总是拒绝密码,因为密码没有解密到正确的值。

默认情况下,Citrix ADC 会从活动 HA 节点的 NSIP 发送 RADIUS 身份验证请求,并以单个 RADIUS 服务器为目标。

RADIUS_NSIP_source_image

Citrix 建议 ADC 通过本地负载平衡虚拟服务器发送身份验证请求,而不是将 HA 对中的两个 ADC 的 NSIP 定义为 RADIUS 服务器上的客户端。负载平衡虚拟服务器还为您的设置增加了恢复能力。

当 Citrix ADC 通过本地负载平衡虚拟服务器发送 RADIUS 请求时,这些请求会通过 SNIP 离开 ADC。截图是浮动 IP 地址,仅在当前主高可用性节点上可用。

使用负载平衡 (LB) 虚拟服务器时,主 HA 节点和辅助 HA 节点的 NSIP 会向本地 VIP 发出请求。LB VIP 使用高可用性对的 SNIP 发送到 RADIUS 服务器。

RADIUS_NSIP_to_VIP_to_SNIP_image

RADIUS 故障排除工具

虽然大多数 RADIUS 实施是在不使用的情况下执行的,但了解最常见的故障排除工具可能会有所帮助。

Citrix ADC 上的 “/tmp/aaad.debug” 身份验证调试管道

您可以在 Citrix ADC 上查看身份验证事件,方法是进入带有 “shell” 的 BSH shell,然后使用 “cat /tmp/aaad.debug” 查看 aaad.debug 管道。

您可以在这里找到更多关于 “aaad.debug” 的信息: https://support.citrix.com/article/CTX114999

NTRadPing

ntradping 是第三方 RADIUS 测试工具,可用于生成 RADIUS 身份验证请求并观察响应。您可以在这里下载 nTradping:

使用 ntradping,您可以将 RADIUS 身份验证请求直接从客户端发送到 RADIUS 服务器,并确保其完全正常运行。在 RADIUS 服务器上,您必须定义客户端的 IP 地址和共享密钥。您还需要防火墙规则才能让客户端与 RADIUS 服务器通信。

您还可以使用 ntradping 将身份验证请求发送到 ADC 上的 LB 虚拟服务器,后者将这些请求中继到 RADIUS 服务器。由于这些请求来自 ADC,因此在 ntradping 中您需要与 ADC 相同的共享密钥。您还需要防火墙规则才能让客户端与 ADC 的 RADIUS LB 虚拟服务器通信。

通过分别测试每个组件,测试将隔离出故障发生的位置。假设您可以使用 ADC 的 RADIUS 手动发送成功的请求。在这种情况下,您知道问题出在之前的某些方面,比如您的 ADC 上的 RADIUS 服务器定义,您可以集中精力。

RADIUS_test_locations_image

NTradping由两个文件组成,您可以将它们从其压缩的zip提取到同一个目录中。启动时,nTradping 会提示您输入:

  • RADIUS 服务器和端口
  • RADIUS 的秘密
  • 用户名和密码
  • 身份验证请求类型

RADIUS_ntradping_image

根据您正在执行的测试,您将使用 RADIUS 服务器 IP 地址或 ADC 的 LB 虚拟服务器的 IP 地址作为目标。最常见的是在端口 1812 上。

如果您直接发送查询,请为客户端设置 RADIUS 密钥。如果您要通过 ADC 的 LB 虚拟服务器发送查询以模仿来自 Gateway 的身份验证请求,请使用与配置 ADC 相同的共享密钥。 用户名和密码字段包含您希望 ADC 代表您发送到 RADIUS 服务器的凭据。通常,“密码” 字段包含用户的 MFA 令牌值。

当您单击 “发送” 时,nTradping会从您的计算机向指定的目标发送身份验证请求,并显示响应(通常是访问接受或访问拒绝)。

RADIUS_ntradping_accept_image

WireShark

如果您在身份验证过程中在 Citrix ADC 上进行数据包跟踪,则可以在 WireShark 中检查 RADIUS 请求和响应。

WireShark 是世界上最重要且广泛使用的网络协议分析器。WireShark 是免费的,无需此处即可使用。

您可以在这里找到 WireShark 的 RADIUS 过滤器。

您可以在此处找到在 Citrix ADC 上进行数据包跟踪的步骤。

在 WireShark 中,您会看到一个访问请求数据包,后面是访问接受、访问拒绝或访问质询响应。 缺少响应通常表示存在通信问题,例如缺少防火墙规则或 RADIUS 服务器没有客户端定义。

图形界面说明

假设 RADIUS 服务器上的配置已完成,请按照以下步骤进行 Citrix Gateway 的 MFA 身份验证:

启用身份验证、授权和审核 (AAA) 功能

  1. 如果 AAA 功能尚未启用,请导航到 “ 安全” > “AAA-应用程序流量”,然后右键单击以启用该功能。
    Enable_AAA_image

添加身份验证服务器

  1. 选择 安全 > AAA-应用程序流量、策略、身份验证、基本策略、RADIUS
    Navigate_to_RADIUS_server_image

  2. 选择 “服务器” 选项卡,然后单击 “添加”。
    navigate_to_radius_server_image

  3. 填充 RADIUS 服务器的详细信息

    Citrix 建议您不要将单个 RADIUS 服务器作为目标,而是以负载平衡虚拟服务器为目标。因此,请在此页面中使用您的 RADIUS LB 的 VIP 作为服务器 IP。 密钥必须与 ADC 的 SNIP 的 RADIUS 服务器上的值相匹配。 enable_aaa_image

  4. 选择 安全 > AAA-应用程序流量、策略、身份验证、基本策略、LDAP。然后,选择 “服务器” 选项卡并单击 “添加”。
    LDAP_server_image

  5. 填充 LDAP 目标的详细信息
    与 RADIUS 类似,Citrix 建议您使用本地负载平衡 (LB) 虚拟服务器作为目标。因此,请使用您的 LDAP LB 虚拟服务器的 VIP 作为此页面上的服务器 IP。 RADIUS_server_details1_image RADIUS_server_details2_image

添加高级身份验证策略

  1. 选择, 安全 > AAA — 应用程序流量、策略、身份验证、高级策略、策略。然后,单击 “添加”。
    RADIUS_select_advanced_image

  2. 如图所示填写策略详细信息,然后单击 “创建”。
    RADIUS_server_details_image

  3. 重复该步骤为 RADIUS 创建另一个策略,然后单击 “创建”。
    LDAP_auth_pol_image

创建 AAA 虚拟服务器

  1. 导航到 Configuration(配置)> Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Virtual Servers(虚拟服务器)
    RADIUS_auth_pol_image

  2. 单击 “添加” 以创建身份验证虚拟服务器。
    AAA_virtual server_add_image

  3. 输入以下信息,然后单击 OK(确定)。
    • 名称-AAA 虚拟服务器的名称。
    • IP 地址类型-将 IP 地址类型更改为不可寻址,因为此虚拟服务器仅用于 Citrix Gateway。
      AAA_virtual server_details_image
  4. 在 “证书” 下,选择 “无服务器证书”。
    AAA_virtual server_cert1_image

  5. 单击 “点击选择” 以选择服务器证书
    aaa_cert_binding_Image

  6. 单击 AAA 虚拟服务器证书旁边的单选按钮,然后单击 “选择”。选择的证书无关紧要,因为无法直接访问此服务器。
    AAA_cert_binding2_image

  7. 点击 “绑定”。
    AAA_cert_binding3_image

  8. 单击 “继续” 以关闭 “证书” 部分。
    AAA_cert_binding4_image

  9. 单击 “高级身份验证策略” 中的 “无身份验证策略”。
    AAA_virtual server_auth_image

  10. 单击 “选择策略” 字段下的 “单击以选择”。
    AAA_virtual server_auth2_image

  11. 选择 “LDAP_Pol” 策略,然后单击 “选择”。
    AAA_virtual server_auth3_image

  12. 单击 “选择下一个因素” 字段下的 “单击以选择”。
    AAA_virtual server_auth4_image

  13. 在 “身份验证策略标签” 中单击 “添加”。
    AAA_virtual server_auth5_image

  14. 输入 ADC 用来触发 RADIUS 身份验证的策略标签的名称,然后单击 “继续”。
    AAA_virtual server_create_pol_image

  15. 单击 “选择策略” 字段下的 “单击以选择”。
    AAA_virtual server_pols1_image

  16. 选择 “RADIUS_POL” 策略,然后单击 “选择”。
    AAA_virtual server_pols2_image

  17. 单击 “创建身份验证策略标签” 屏幕底部的 “绑定”。
    AAA_virtual server_create_pol_image

  18. 单击 “身份验证策略标签” 屏幕底部的 “完成”。
    AAA_virtual server_radius_pol1_image

  19. 点击 “选择”。
    AAA_virtual server_radius_pol2_image

  20. 单击 “策略绑定” 屏幕底部的 “绑定”。
    AAA_virtual server_pollab_image

应用向用户显示用户名、密码和通行码字段的登录架构

  1. 单击右侧 “高级设置” 菜单中的 “登录架构”。
    AAA_virtual server_cert6_image

  2. 单击 “无登录架构” 以显示用于选择架构的窗口。
    AAA_virtual server_loginschema_image

  3. 单击 “选择策略” 下的 “单击以选择”。
    AAA_virtual server_loginschema_binding_image

  4. 选择内置的 “lschema_dual_factor_builtin” 策略,然后单击 “选择”。
    AAA_virtual server_loginschema_binding2_image

  5. 单击 “绑定” 并选择 “完成” 退出 AAA 虚拟服务器配置菜单。
    AAA_virtual server_loginschema_binding3_image

注意: ADC 13.0 固件中添加了 “lschema_dual_factor_builtin” 策略。如果您使用的是早期版本,则需要创建策略。您可以在此处找到解释如何创建策略的说明。

将网关虚拟服务器配置为使用新的 AAA 服务器

  1. 选择 “Citrix Gateway、虚拟服务器”,然后选择您的网关虚拟服务器并单击 “编辑”。
    Gateway_virtual server_image

  2. 在右侧的 “高级设置” 菜单中选择 “身份验证配置文件”。
    Gateway_virtual server1_image

  3. 在 “身份验证配置文件” 部分中选择 “添加”。
    Gateway_virtual server2_image

  4. 输入显示的新身份验证配置文件的名称,然后单击 “身份验证虚拟服务器” 下的 “单击以选择”。
    Gateway_virtual server3_image

  5. 选择我们之前创建的AAA虚拟服务器,然后单击 “选择”。
    Gateway_virtual server4_image

  6. 点击 “创建”。
    Gateway_virtual server5_image

  7. 点击 “确定”。
    Gateway_virtual server6_image

  8. 点击 “完成”。
    Gateway_virtual server7_image

执行测试

现在,您已准备好在 Citrix Gateway 虚拟服务器上使用多重身份验证。 Gateway_virtual server8_image

如果您遇到任何身份验证质询,请参阅本文档的故障排除部分。

CLI 指令

如果您更喜欢使用 CLI 配置 ADC,则以下配置脚本可以完成所有必要的步骤。

# 1. Enable AAA
en ns feature aaa

# 2. Creating LDAP Server
add authentication ldapAction LDAP_for_Gateway -serverIP LDAP_LB_IP -serverPort 636 -ldapBase "DC=citrix,DC=lab" -ldapBindDn readonly@citrix.lab -ldapBindDnPassword PASSWORD -ldapLoginName sAMAccountName -groupAttrName memberOf

# 3. Creating LDAP Policy
add authentication Policy LDAP_Pol -rule true -action LDAP_for_Gateway

# 4. Creating RADIUS Server
add authentication radiusAction RADIUS_Server -serverIP 192.168.1.100 -serverPort 1812 -radKey sharedsecret

# 5. Create RADIUS Policy
add authentication Policy RADIUS_Pol -rule true -action RADIUS_Server

# 6. Create a PolicyLabel triggering the RADIUS Policy
add authentication policylabel RADIUS_PolicyLabel -loginSchema LSCHEMA_INT
bind authentication policylabel RADIUS_PolicyLabel -policyName RADIUS_Pol -priority 100

# 7. Create the AAA virtual server
add authentication vserver nFactorAuthvServer SSL 0.0.0.0

# 8. Bind an SSL certificate to the AAA virtual server
bind ssl vserver nFactorAuthvServer -certkeyName "Example Cert"

# 9. Bind the LDAP policy and RADIUS PolicyLabel to the AAA virtual server
bind authentication vserver nFactorAuthvServer -policy LDAP_Pol -priority 100 -nextFactor RADIUS_PolicyLabel -gotoPriorityExpression NEXT

# 10. Bind the builtin Login Schema for dual factor authentication to the AAA virtual server
bind authentication vserver nFactorAuthvServer -policy lschema_dual_factor_builtin -priority 100 -gotoPriorityExpression END

# 11. Create an Authentication Profile attached to the AAA virtual server
add authentication authnProfile MFA_Authentication_Profile -authnVsName nFactorAuthvServer

# 12. Configure your existing Gateway virtual server to use the Authentication Profile
set vpn vserver "Steven Demo Gateway" -authnprofile "MFA_Authentication_Profile"
<!--NeedCopy-->