Netscaler配置OTP

本文中将会介绍如何在Netscaler Gateway中配置多因素认证的方法。其中多因素认证的方法为otp。
软件版本:
Netscaler NS13.0 47.24.nc
Citrix_Virtual_Apps_and_Desktops_7_1912

关于otp
OTP的意思是一次性密码,这是一个开源的密码生成的算法,它可以根据时间和一个种子文件来生成一个固定的值,只要两个设备的时间和种子文件一致,他们用otp算法算出的6位数字结果是一样的。而且这个算法不需要联网。
这次需要实现的是在gateway上输入域用户名和密码之后,外加上这个otp的token才能登陆。
效果如下:
Netscaler配置OTP
使用起来的方法是这样的,我们访问ag的地址,并且在后面加入一个自定义的域名。用于注册设备,我们会为一个用户

为了完成这个效果,必须先要完成以下准备工作:
1.必须已经完成Gateway的配置

本文参考了:https://www.carlstalhood.com/native-one-time-passwords-otp-citrix-gateway-13/#changelog
配置OTP双因素认证需要完成,
AAA Vitrual Server
对接LDAP(与域服务器对接,用于注册OTP保存种子文件,验证OTP是否正确)
配置nFactor Flows(OTP认证的一个过程,根据配置的策略,访问网页之后会显示不同的界面,不同的界面有不同的认证过程,必须要完成上一个界面的认证才能进入下一个界面的认证,需要通过所有的界面认证才能进入SF界面。)

首先在Netscaler中配置AAA服务,AAA服务在Security-AAA处,如果AAA服务是关闭的,它的右侧会有一个黄颜色感叹号,如果这样需要右键,启用服务。
Netscaler配置OTP
先创建一个Virtual Server
Netscaler配置OTP
这里根据图片照配,首先是为Authentication Virtual Server配置一个名称,IP地址选择Non Addressable。
Netscaler配置OTP
接下来绑证书,由于我在上面一步没有选IP,这个vitrual server最后将会被用在AG上,所以证书用的也是AG的证书。(我的AG的证书用的就是AG的域名,不过我发现证书申请的时候可以用通配符的,也就是说你可以用*.abc.com来匹配整个域名)
Netscaler配置OTP
选择证书并且绑定。除了证书之外,还需要配置nFactor Flows,这个配置需要先配置LDAP,所以暂时停止AAA Vitual Server的配置,先完成LDAP的配置。

NetScaler的LDAP配置的路径是Security / AAA - Application Traffic / Policies / Authentication / Advanced Policies / Actions / Servers。
如果AG配置正确,默认应该已经有一个LDAP配置在其中了,还需要配置两条。
Netscaler配置OTP
其中第一条存在的,是用于AG登录时,判断域账号密码是否正确。第二条被称为OTPRegisterDevice(实际上可以起任何名字)被用于注册设备,在后期我们注册设备的时候,我们会连接到域中,然后在用户的属性中修改一些值。实际上这个操作在用户的属性中添加了一个种子的值。
OTPAuth用于读取上面注册设备时留在域用户属性中的值,用于计算token码。
这些操作需要连接到域,所以需要提供域账号,而且其中注册设备的LDAP策略是需要修改域的信息的,所以提供的域账号必须要有修改域用户信息的权限。
Netscaler配置OTP

先配置OTPRegisterDevice这条LDAP:
IP Adress填入域服务器的ip地址

下面的的Secutity Type部分我选择的是明文传输,如果有可以选择加密传输。这里不做讨论。
Netscaler配置OTP
再接下来Base DN部分填入的是域的ADSI,你可以在域服务器中找到这个值。

接下来的域账号,这个域账号要有修改域账号属性的权限,它的格式是<域账号>@<域名>
右边部分则填写域账号的密码,然后测试网络的连通性,如果你的域账号能够成功登陆域,那么应该是这样的
Netscaler配置OTP
接下来的部分这么填
Netscaler配置OTP
Netscaler配置OTP
其中OTP Secret的部分填写的是域账号中的属性的值,理论上你可以填写任何一个属性的值,不过这里用的是userParameters。
后期注册之后,我们可以进域,然后在域账号中看到这个值。
(示例:种子放在了user1用户的userParameters中)
Netscaler配置OTP
OTPRegisterDevice配置完毕,还有一个OTPAuth。
OTPAuth的作用是读取域用户的userParameters属性,根据这个属性中的种子生成token。
它的配置和注册的LDAP极其像,不过有一个区别,就是在下图的Seach Filter,这个设置告诉设备从哪个属性值中获取种子的值。和上面保存种子值的地方是对应的。默认应该是userParameters>=#@
Netscaler配置OTP

配置完LDAP,我们可以配置nFactor Flows了,这似乎是Netscaler13的新特性。
这次完成的目标是这样的。

Netscaler配置OTP
这个流程解释了设备的OTP登录流程。这个流程中有两个分支。第一个分支为注册设备的分支。第二个分支则是通过OTP登录到SF的分支。
每一个灰框包括两个部分,一个是schema部分,一个是policy部分。schema将会决定页面的显示样式,而policy则决定验证方法。policy可以配置多个(如图中最左边的那个框),Policy会有优先级,会优先匹配最高优先级的验证方法,如果符合则转到绿色箭头的页面中去。如果不匹配则会用下一个policy。

首先是最左边的那个框,它由两个policy,定义是这样的,如果输入的gateway地址包含一个指定的二级目录,而且访问源IP为指定网段,则跳转到第一个分支的网页中去。否则跳转到第二个分支中去。
第一个分支会要求你验证域账号,一旦验证通过,则进入注册设备的页面。
第二个分支会要求验证你的域账号和OTP token,一旦验证通过则进入sf界面。

配置方法参考:https://www.carlstalhood.com/native-one-time-passwords-otp-citrix-gateway-13/#nfactorflow

图中从左到右,从上到下开始描述配置。第一个流程是用于分支的,我们会设置两个分支,一个是注册设备,一个是登陆sf。
所以我们先写注册设备的分支。
点击Add Policy,并且新建一个策略。
Netscaler配置OTP
注意这个图中的表达式。
http.req.cookie.value("NSC_TASS").eq("manageotp") && client.IP.SRC.IN_SUBNET(10.2.0.0/16)
其中包含两个变动的部分,一个是“manageotp”,另外一个是10.2.0.0/16
Netscaler配置OTP
注意这里goto选择next
这个表达式代表,访问gw网址的时候(在本次测试中,gw网址是gw.ipqn.local)如果包含二级目录“manageotp”,并且访问的设备ip在10.2.0.0/16网段中,那么便从这个分支进行下去下一个Factor。否则的话继续匹配下一个policy。
Netscaler配置OTP
接下来点击加号按钮添加下一个policy。
Netscaler配置OTP
Netscaler配置OTP
表达式为true代表无论什么情况都匹配,这样配置也就是意味着只要不符合上一个policy的所有流量,都会走这个分支。
Netscaler配置OTP
在每一个policy右边都有一个绿色箭头,点击之后就可以添加出一个新的factor。
我先叙述第一个分支的下一个factor。
第一个分支被我们定义为注册设备的分支,在这个分支中,需要添加schema。所以点击Add schema
Netscaler配置OTP
Netscaler配置OTP
Netscaler配置OTP
如上图,可以在左侧选择xml模板,并且在右边查看网页的效果。
根据博客中的指示,添加的是SingleAuthManageOTP.xml,这个就和普通的storefront一样的登陆界面
Netscaler配置OTP
新建一个policy(下文中,新建policy不再截图)
Netscaler配置OTP
Netscaler配置OTP
这里认证的方法选择ldap,然后就用到之前配置的ldap的配置了。
这里action处我们选择的是普通的用户名、密码的那个ldap。
然后点击蓝色的add按钮。
然后再次添加下一个factor。
Netscaler配置OTP
添加policy。
Netscaler配置OTP
这一次选择的是添加注册设备的ldap。这个分支便完成了。我们叙述一下作用。首先用户一定要是在指定的网段(一般设置成内网)并且在gw网址中输入manageotp这个二级域名才会进入下一个认真界面,不满足条件或者只满足一个的话不会进入这个分支。
这个分支接下来是要求你使用域账号登陆,只有正确的输入了域账号才能进入到注册设备的界面。
整个过程是自定义的,完全可以挑选自己选择的认证过程。域账号只是其中的一种,甚至可以跳过域账号的那个过程,输入网址之后直接进入注册设备的阶段。
甚至可以添加一个新的认证过程,整个流程可以一步一步的下去,这纯粹取决于配置者在安全和方便之间的抉择。
接下来是下一个分支。
Netscaler配置OTP
下一个分支的网页界面应该包含用户名、密码和otp。根据博客的说法,选择的是 DualAuthPushOrOTP.xml。事实上由于我的博文中没有用到push服务。所以我们只要找到那个页面效果是用户名、密码、OTP三个输入框的xml就可以了。
Netscaler配置OTP
schema选择好之后确定。然后在这个factor中添加policy,选择普通的验证的这个ldap。(这里我也不清楚为什么要这么做,不应该是这接选择otp验证吗?)
Netscaler配置OTP
最后再次创建一个新的factor
Netscaler配置OTP
创建policy如下图,此图使用的policy决定使用的ldap验证的方法是otp验证。
如此整个nFactor Flow流程完成。接下来就是将这个流程绑定到aaa virtual server上。
Netscaler配置OTP
Netscaler配置OTP
接下来我们要把这个aaa server放到gateway上去。
Netscaler配置OTP
在这个页面选择添加按钮
Netscaler配置OTP
下文输入
AAA.USER.ATTRIBUTE(1)

Netscaler配置OTP
Profile配完之后,再配置Polices

Netscaler配置OTP
Netscaler配置OTP

然后进入Citrix Gateway Vitual Servers配置
选择正确的Vitual Server
Netscaler配置OTP
policy里加一条
Netscaler配置OTP
Netscaler配置OTP
这里选择策略,就是前文提到的traffic policy中的otp策略
Netscaler配置OTP
下图的界面在右侧,点击authentication profile
Netscaler配置OTP
Netscaler配置OTP
Netscaler配置OTP
这里就算着之前配置的aaa vitrual server了。
Netscaler配置OTP
记得要在这里点个ok
Netscaler配置OTP
还有一个“主题”,主题就是外观,尽量把外观设置成和sf一样。那样会漂亮点,实际没啥用。
Netscaler配置OTP

接下来是在浏览器中的访问。注册的过程,应该是很容易理解的。
Netscaler配置OTP
Netscaler配置OTP
Netscaler配置OTP
Netscaler配置OTP
Netscaler配置OTP
你的手机上应该有一个支持otp的token软件,比如身份验证器啊之类的,这个很多,那个公司的无所谓,只要是otp就可以。
然后扫码之后,在手机上获取token并且验证。
Netscaler配置OTP
这里有时候不是一步通过的,如果不能通过需要排错。
(排错)
域服务中userParameters是否有值?
Netscaler和你的手机时间是否一致?(因为otp的值取决于时间)
(排错完毕)
注册完就可以正常登陆gw,登陆了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章