首先,我们需要使NetScaler的网关功能。可以在GUI里设置,导航到System | Settings | Configure Basic Modes和选择Access Gateway或使用以下CLI命令:


enable ns feature SSL×××

 


注意:10.118版本发布之后,思杰推出了快速配置向导,可以很容易地设置和配置NetScaler的网关功能。在本文档介绍的步骤中,我们不使用向导,但我们会使用相同的配置。 NetScaler的网关向导可以从GUI中导航到NetScaler Gateway Pane | NetScaler Gateway Wizard.进行启动。

然后,我们从GUI进入NetScaler的网关功能。在这里,我们选择Virtual Servers,并用鼠标右键单击,然后选择Add Server。这将打开一个菜单,使我们能够创建客户端要访问的虚拟服务器。

我们需要配置多项选项以便创建一个功能齐全的vServer。首先我们需要配置默认设置,如NSIPSNIIP、功能许可证。以下是一些我们需要设置的设置:

  • Name of the server:这纯粹是用于描述目的。

  • Protocol:默认总是SSL

  • IP Address:这是VIP地址。

  • Port:默认端口是443

  • Basic mode / SmartAccess mode:对于ICA代理的配置,我们需要将其设置为基本模式。如果我们需要一个SSL ×××-based vServer的虚拟服务器,我们要创建另一个虚拟服务器并将其设置为的SmartAccess模式。

  • Certificate:受信任的证书是必需的,用于客户端访问和StoreFront服务器之间的连接。可以是公共证书,如GlobalSignGo Daddy。这个在证书窗格下添加证书。

  • Authentication Policy:它定义了和Active Directory进行身份验证的连接字符串,例如,RADIUS two-factor身份验证方法。

  • Session Policy::这个定义StoreFront服务器在哪里以及如何联系StoreFront服务器,以及如何将凭证转发到StoreFront服务器。

  • STA:这是安全票据的授权服务器。

CitrixSecure Ticket Authority (STA)

关于STASecure Ticket Authority (STA)是一个XML Web服务,是Citrix DDC服务器根据用户信息随机生成的票据。它用来控制Citrix安全网关服务器的访问。

更多STA的信息可参考http://support.citrix.com/article/CTX101997

接下来我们在窗口中输入的信息,如名称和IP地址,并设置虚拟服务器为基本模式,并保留其余的默认设置,如下面的屏幕截图:

wKioL1SkBD-j7XgJAAKCFuhxhYA529.jpg

本节假设您熟悉数字证书是如何工作的,以及创建一个证书的先决条件。为了创建一个证书,我们首先需要私钥和证书签名请求(CSR),这是发送到第三方证书发行者的申请文件。在NetScaler里,进入SSL面板在Traffic Management 界面。这个菜单也允许我们导入证书本身,和中间根证书。它也有一个选项可以导入PFX证书,这种证书通常在一个文件中包含私钥,中间证书。您还可以使用OpenSSLNetScaler CRT转换为PFX证书,详细使用指南位于http://bit.ly/1lzMvEq

接下来,我们需要添加一个vServer数字证书。典型的方式是通过证书窗格中,选择安装,并添加一个证书。现在,这取决于公共证书提供商颁发的证书,这些步骤可能会有所不同。以下是示例:

  • 如果我们有一个PFX证书,它通常包含私钥,中间证书和PFX证书本身。在这种情况下,我们需要选择PFX作为证书文件名和私有密钥文件名。如果中间证书是文件的一部分,我们也应该选择证书捆绑。

  • 如果我们有一个CER证书,它通常包含一个证书文件和密钥文件,其中包含我们需要增加的私钥。如果我们有一个额外的中级证书,我们需要增加vServer,我们首先必须导入CA证书并选择add。在许多情况下,您需要链接的主要中间证书验证证书链。你可以在http://support.citrix.com/article/CTX114146看到如何配置它。

德里克·希曼有一个优秀的博客,描述NetScaler如何添加一个证书,可以在http://www.derekseaman.com/2013/05/import-iis-ssl-certificate-to-citrix-netscaler.html上查看。另外,还有一篇关于如何使用OpenSSL CRT文件转换为PFX文件。这可以在http://msandbu.wordpress.com/2012/10/15/convert-from-crt-to-pfx-with-openssl/上查看。

我们已经添加了一个证书后,需要添加一个认证策略。有两种类型的身份验证策略,我们需要考虑主要和次要的。主要验证类型是典型的LDAP(Active Directory)和其次可能是RADIUS解决方案。当用户试图登录,他们将提供一个Web界面,要求他们输入用户名和密码进行活动目录认证,第二个RADIUS为次要密码的身份验证解决方案。

现在很多公司都非常依赖于RADIUS提供的认证解决方案。SafeNet公司就是一个例子,我们只需要添加作为辅助RADIUS身份验证提供者。还有其他人完全取代LDAP身份验证过程。我已经添加链接到不同的供应商及其设置的双因素认证。对于RSA SecurEnvoy,链接https://www.securenvoy.com/integrationguides/citrix%20net%20scaler%20with%20ipad.pdf。对于SafeNet公司,该链接http://www2.safenet-inc.com/cryptocard/implementation-guides/Citrix/Citrix_Access_Gateway_Implementation_Guide_1111.pdf.

对于移动设备,例如iPad,我们需要RADIUS解决方案作为主要的身份验证。基于该设备连接进行排序以及不同的身份验证策略,我们都需要使用适当的方案。我们将在本文稍后的章节介绍。你也可以在http://support.citrix.com/article/CTX125364了解更多关于这个的信息。

部署ICA代理我们只需要设置一个Active Directory来进行认证即可,因此我们只需要创建一个主要的认证策略。单击Authentication窗格下vServer Settings | Primary。转到Insert Policy | Policy Name,并选择New。这将打开一个策略窗口。首先,我们需要为这一策略输入一个名称,然后选择LDAP作为身份验证类型。

注意:如果我们想要允许用户改变他们的用户登录密码。这需要在身份验证策略配置选项中允许密码更改,并且ldap域控制器需要进行响应。

然后我们来看看策略,我们需要理解策略是如何在NetScaler中进行工作的,以及他是如何和NetScaler的特性进行关联的。但我们创建一个策略时,必须定义一个表达式,该表达式定义了当条件满足时必须或者触发策略去进行动作。NetScaler上有多种我们可以选择的策略。如果我们点击Add按钮,将会有很多的选项允许我们精确地定义这个政策应该适用于谁。

在以下场景中,我们希望设置一条策略适用于想要访问这个解决方案的所有用户。因此,我们将添加ns_true表达式,这可以在表达式字段内直接输入或通过GUI界面General | True Value Expression | Add Expression。该表达式意思是说,这个验证策略适用于通过NetScaler连接的所有用户。

注意:你可以阅读更多关于表达式和如何创建示例表达式http://support.citrix.com/proddocs/topic/ns-main-appexpert-10-map/ns-pi-config-classic-expr-tsk.html.

我们添加了表达式后,我们需要定义一个NetScaler可以联系进行验证凭证服务器。根据Server面板,选择New。在这里,我们需要输入关于活动目录服务器的信息,如以下:

  • IP AddressIP地址。

  • Base DN:它定义了组织单元在Active Directory用户。例如,一个名为test.com的用户组织单元的基本DN域,填写的样子是这样的,CN = users, DC = test, DC = com

  • Administrator Bind DN:这是连接到AD进行查询验证域的AD用户。用户名是:域\用户名的形式。

  • Administrator Password:这是帐户密码,并且需要写入两次。

  • Server Log on Name Attribute:这应该被设置为samAccountName。还可以使用UserPrincipleName。这允许用户使用他们的电子邮件地址登录。

完成上述操作后,就可以连接到域控制器,并通过点击检索属性按钮验证用户是否具有正确的权限。

注意:使用检索属性操作不会让NetScaler的本身去和AD进行连接,而是从正在通过浏览器运行连接到NetScaler的图形用户界面的机器IP地址去连接。

同时,你可能会遇到这样一个情况,需要用户选择不同的AD域。例如,在迁移情况下,或者如果你的用户有多个域需要选择一个域进行登录。默认情况下,没有内置的功能,允许用户选择从不同的AD域。那样的话我们其实是可以添加多个身份验证策略,来指向不同的AD域,或者我们可以使用表达式基于不同的标准过滤AD域,如IP地址。当然,我们也可以从StoreFront添加一个下拉菜单,允许用户选择不同的域。Citrix发表了一篇文章,介绍如何创建一个下拉菜单选择一个域。在http://support.citrix.com/article/CTX118657可以阅读到它。

如果从NetScalerActive Directory去进行身份验证有问题,我们可以使用CLI运行内置的工具。首先键入Shell,然后更改变tmp cd /tmp目录。然后运行下面的命令:


cat aaad.debug

 


这将为每一个认证在控制台自动生成事件。任务可以随时按下Ctrl + Z关闭。

当我们添加完Active Directory服务器之后,我们可以点击创建添加表达式和命名策略。这会将Active Directory策略添加到虚拟服务器。请注意,该策略的优先级是100。如果我们在这里有多个策略,只要表达式是相同的,一个具有最低优先级的会优先执行。因此,如果我们有三个主要的认证策略,所有具有相同的配置,但他们的优先级分别为80 90100,当所有连接尝试到该服务时,他们将被绑定到具有80的优先级的策略。

让我们看看另外一个例子策略是如何进行工作的。假设我们都有3是身份认证的策略绑定到vServer上面,每个策略都有不同的优先级,同时每个策略都有一个针对客户端特定IP地址的表达式,如下:

  • Policy 1:这个策略的优先级是80,他的表达式是:REQ.IP.SOURCEIP == 200.0.0.0 -net mask255.0.0.0.

  • Policy 2:这个策略的优先级是90,他的表达式是:REQ.IP.SOURCEIP == 210.0.0.0 -net mask255.0.0.0.

  • Policy 3:这个策略的优先级是100,他的表达式是:REQ.IP.SOURCEIP == 220.0.0.0 -net mask255.0.0.0.

当一个客户端连接上来,NetScaler将着眼于从列表中有最低的优先级策略,并查看客户端与策略列表表达式的条件是否匹配。如果他们不匹配,它将会降低优先级,去获得一个和他匹配的策略列表。说白了就是策略就是先从80开始,然后90100,其中,80的优先级最高,90次之,100最低。客户端连接上之后,首先去找优先级最高的80那条策略,然后进行匹配,如果条件不满足,那么继续去找90那条策略来进行匹配工作。同时,如果我们还拥有RADIUS这个解决方案作为二次认证的话,他们的策略和这个模式也是一样的。

现在,我们需要来完成这个配置中最重要的部分,是什么呢?会话策略。这可以在vServer上点击Policies | Session上找到。然后点击Insert Policy,然后选择New Policy,我们希望所有的用户都被绑定到这个会话策略上,那么我们可以使用通用的表达式ns_true,如下面的截图:

wKioL1SkBGLSUEBYAAFO3bqwSDQ518.jpg

我们可以给这个会话一个名字,然后我们将请求配置文件添加到策略。请求配置文件里面填写存储在StoreFront服务器的什么地方以及他应该如何的来转发凭据给StoreFront服务器、还有就是ICA代理是否应该使用等信息。

点击要求新的配置文件,将会弹出一个窗口。在这里,有多个配置,我们需要进一步了解。如下面的截图:

wKioL1SkBICxqYbHAAHrhssqbfI572.jpg

请注意,我们必须每一个项目的选项选择覆盖全局Override Global。而不是在虚拟服务器级别定义设置的。我们也可以在全局范围定义该设置,这些设置会便作用于默认为NetScaler创建的所有vServers

网络配置窗格用于常规×××配置文件,对于目前我们将跳过,。在客户端体验窗格中,我们有多种设置,我们可以定义。我们将涵盖所有这些设置,其中一些用于ICA代理,有些是用于SSL ××××××。具体设置如下:

  • Home Page:这主要是用于XenMobile部署和当你想定义一个SSL ×××会话的主页。

  • URL for Web-Based Email:这是用于登录到基于网络的电子邮件解决方案,比如ExchangeOWA

  • Split Tunnel:这用来定义只是流量或者所有客户端的流量与服务器进行通讯时是否通过×××网关进行连接。

  • Session Time-out (mins):这定义了NetScaler在没有网络流量的情况下等待多长时间才能断开会话。这适用于所有类型的客户端。

  • Client Idle Time-out (mins):这定义了NetScaler在没有用户活动的情况下等待多长时间才能断开会话。这只适用于NetScaler插件。

  • Clientless Access:这定义了基于SSL×××是否启用或禁用。

  • Clientless Access URL Encoding:这定义了是掩盖内部Web应用程序的URL呢还是以明文的方式对用户可见。

  • Clientless Access Persistent Cookie:这定义需要访问SharePoint的某些特性,如打开和编辑文档。

  • Plug-in Type:这定义提供给用户什么样的插件,是基于Windows /苹果或基于java

  • Single Sign-on to Web Applications:这允许NetScalerweb interface/StoreFront或者SharePoint自定义站点进行SSO

  • Credential Index:这定义了转发到web应用程序的身份验证凭证。在这里,我们可以选择从主或次身份验证设置。

  • Single Sign-on with Windows:这允许NetScaler网关插件使用Windows凭据进行身份验证。

  • Client Cleanup Prompt:这是用来退出一个SSL ×××会话后,控制客户端清理提示的显示。此功能适用于常规的Windows/ Mac系统的客户端,但不适合移动设备。

网络配置面板中所有我们需要做的是检查Web应用程序的单点登录选项,并设置凭据索引字段为PRIMARY。这允许NetScaler网关转发LDAP凭证(被定义为基本身份验证)StoreFront服务器。我们也应该定义插件类型为Windows / Mac,因为大部分用户希望使用Windows插件进行连接。

如果他们没有安装插件,插件将提供给用户进行安装,并使用其进行登录网站。

在安全窗格中,我们需要做的就是确保默认授权操作选项设置为允许。这确保了用户允许登录和访问资源。

接下来,我们发布的应用程序面板中。这就是我们进入访问我们的Citrix环境所需的信息。以下设置:

  • ICA Proxy:在这里,我们定义NetScaler ICA隧道流量是否通过443端口。

  • Web Interface Address:在这里,我们定义StoreFront Citrix web receiver URL

  • Web Interface Portal Mode:这个定义web接口应该出现完全图形化的体验或使用紧凑的视图。

  • Single Sign-on Domain:这定义了对AD域使用单点登录。

  • Citrix Receiver Homepage:这是用于定义客户连接到Citrix receiverURL,不支持StoreFront

  • Account Services Address:这是用于基于电子邮件帐户发现Citrix Receiver。该URL必须是HTTPS形式:https://<StoreFront/AppControllerURL>/Citrix/Roaming/Accounts。这需要DNS的配置是否正确。更多信息可在http://blogs.citrix.com/2013/04/01/configuring-email-based-account-discovery-for-citrix-receiver/找到。

在这里,我们需要设置ICA代理为On,并定义到StoreFront地址的URL。我们也可以定义一个单点登录域。这里输入的域名必须匹配一个StoreFront。在此之后,我们完成会话策略设置,就可以点击创建vServer了。现在,剩下的最后一部分是添加STA服务器。在vServer创建窗口,去发布应用程序面板中点击安全票据限添加服务器。同样,如果我们需要添加店面使用HTTPS服务器会话策略,我们需要为NetScaler导入StoreFront的受信任的根证书,否则NetScaler回拨验证将不会正常工作。可以在Traffic Management | SSL | Import PKCS #12导入StoreFront的根证书服务器。

请注意:建议STA服务器添加IP地址而不是主机名。STA服务器在这里添加的地址应该和StoreFront是相同的。

在这个步骤完成之后,我们就完成了NetScaler网关功能的配置。现在,我们开始配置StoreFront,允许通过远程连接身份验证。

集成StoreFront

这些步骤需要现有的StoreFrontXenApp / XenDesktop部署到位。首先,我们需要在StoreFront中添加一个网关。这可以从GUI完成导航到StoreFront Administration Console | Gateways。在右侧,点击添加网关服务器,然后添加信息,如下截图所示:

wKioL1SkBKeB09LGAAEb5d_iqRU296.jpg

输入相关信息。回调URL字段需要指出的NetScaler网关的VIP地址。这是必要的,使得网关的认证服务可以发送验证返回给StoreFrontStoreFront所使用的子网IP地址来确定用户是否从NetScaler连接过来。在NetScaler 10.x的版本中这个字段是可选的。如果不填,如果我们使用NetScalerStoreFront做负载均衡,这就会引起一个问题。所以建议能填上就尽量填上。

现在,通过在DMZ外部的VIP通信时回调URL有可能发生一些问题。在这里这一问题可能是双重的。我们面临的问题之一是证书不匹配。首先,通过访问VIP打开一个web浏览器并验证证书链连接到StoreFront服务器。如果不成功,我们需要添加根或中级证书到StoreFront服务器验证链。同样,如果DNS指向你外部的VIP,您可以将一个条目添加到StoreFront服务器上的本地主机文件Hosts中,输入的VIP服务器FQDN和内部VIP。第二个问题可能出现的是防火墙的问题。例如,如果StoreFront位于内网区,VIP位于DMZ区,可能出现防火墙不允许StoreFront回传给VIP

如果我们因为网络的限制,内部的网络和VIP之间不能进行通信,我们可以添加一个虚拟VIPNetScaler驻留的SNIP的内部网络上。所有我们需要创建的并添加了STA和证书的虚拟服务器,都需要改变StoreFrontHosts文件,让其指向驻留在DMZ区的虚拟的VIP而不是外部的VIP

现在最后的部分,我们需要去存储节点,右侧的控制台的启用远程访问选项点击选项Enable Remote Access。在这里,我们必须指定方式和使用那些资源进行连接。以下设置:

  • None:此选项意味着只有本地、内部网络上的用户将能够访问该存储区。

  • No ××× Tunnel:此选项使现有的资源直接连接NetScaler的网关,并且不需要使用的NetScaler网关插件。

  • Full ××× Tunnel:此选项必须通过SSL ×××进行NetScaler网关资源连接。这需要一个NetScaler网关插件。

由于ICA代理只需要的Citrix Receiver,我们选择No ××× Tunnel,然后选择我们刚才添加的NetScaler设备。最后,我们需要从StoreFront认证窗格中启用传递身份验证。这是必要的,因为我们希望用户打开VIP地址之后通过NetScaler网关就自动登录StoreoFront并可以输入他们的凭据。这如在下面的截图:

wKiom1SkBAzy1fntAABHbkpBjmg683.jpg

最后一件事我们需要配置StoreoFront的信号。信号是用来识别用户是否内部或外部的。你可以阅读Citrix文章如何设置信号http://support.citrix.com/proddocs/topic/dws-storefront-21/dws-configure-beacon.html。至此,我们已经成功地建立和配置了ICA代理。

值得注意的是,ICA代理允许在默认情况下客户端启动重新协商建立一个SSL连接后。这适用于通过NetScaler使用SSL创建每个虚拟服务器。因为SSLTLS协议的安全漏洞,这将允许***者在启动时自定义数据包的安全会话内注入。https://www.ssllabs.com/提供一个免费的工具,我们可以用它来看看我们的服务很容易受到这种***。在下面的截图中,我们可以看到,我们的解决方案很容易受到client renegotiation的***。

wKioL1SkBNrgyPoQAAHRwP44bu8542.jpg

有一种解决方法,我们可以配置NetScaler禁用这种***。我们可以通过下面的CLI命令做到这一点:


Set ssl parameter    –denySSLrenegNONSECURE