本文中將會介紹如何在Netscaler Gateway中配置多因素認證的方法。其中多因素認證的方法爲otp。
軟件版本:
Netscaler NS13.0 47.24.nc
Citrix_Virtual_Apps_and_Desktops_7_1912
關於otp
OTP的意思是一次性密碼,這是一個開源的密碼生成的算法,它可以根據時間和一個種子文件來生成一個固定的值,只要兩個設備的時間和種子文件一致,他們用otp算法算出的6位數字結果是一樣的。而且這個算法不需要聯網。
這次需要實現的是在gateway上輸入域用戶名和密碼之後,外加上這個otp的token才能登陸。
效果如下:
使用起來的方法是這樣的,我們訪問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服務是關閉的,它的右側會有一個黃顏色感嘆號,如果這樣需要右鍵,啓用服務。
先創建一個Virtual Server
這裏根據圖片照配,首先是爲Authentication Virtual Server配置一個名稱,IP地址選擇Non Addressable。
接下來綁證書,由於我在上面一步沒有選IP,這個vitrual server最後將會被用在AG上,所以證書用的也是AG的證書。(我的AG的證書用的就是AG的域名,不過我發現證書申請的時候可以用通配符的,也就是說你可以用*.abc.com來匹配整個域名)
選擇證書並且綁定。除了證書之外,還需要配置nFactor Flows,這個配置需要先配置LDAP,所以暫時停止AAA Vitual Server的配置,先完成LDAP的配置。
NetScaler的LDAP配置的路徑是Security / AAA - Application Traffic / Policies / Authentication / Advanced Policies / Actions / Servers。
如果AG配置正確,默認應該已經有一個LDAP配置在其中了,還需要配置兩條。
其中第一條存在的,是用於AG登錄時,判斷域賬號密碼是否正確。第二條被稱爲OTPRegisterDevice(實際上可以起任何名字)被用於註冊設備,在後期我們註冊設備的時候,我們會連接到域中,然後在用戶的屬性中修改一些值。實際上這個操作在用戶的屬性中添加了一個種子的值。
OTPAuth用於讀取上面註冊設備時留在域用戶屬性中的值,用於計算token碼。
這些操作需要連接到域,所以需要提供域賬號,而且其中註冊設備的LDAP策略是需要修改域的信息的,所以提供的域賬號必須要有修改域用戶信息的權限。
先配置OTPRegisterDevice這條LDAP:
IP Adress填入域服務器的ip地址
下面的的Secutity Type部分我選擇的是明文傳輸,如果有可以選擇加密傳輸。這裏不做討論。
再接下來Base DN部分填入的是域的ADSI,你可以在域服務器中找到這個值。
接下來的域賬號,這個域賬號要有修改域賬號屬性的權限,它的格式是<域賬號>@<域名>
右邊部分則填寫域賬號的密碼,然後測試網絡的連通性,如果你的域賬號能夠成功登陸域,那麼應該是這樣的
接下來的部分這麼填
其中OTP Secret的部分填寫的是域賬號中的屬性的值,理論上你可以填寫任何一個屬性的值,不過這裏用的是userParameters。
後期註冊之後,我們可以進域,然後在域賬號中看到這個值。
(示例:種子放在了user1用戶的userParameters中)
OTPRegisterDevice配置完畢,還有一個OTPAuth。
OTPAuth的作用是讀取域用戶的userParameters屬性,根據這個屬性中的種子生成token。
它的配置和註冊的LDAP極其像,不過有一個區別,就是在下圖的Seach Filter,這個設置告訴設備從哪個屬性值中獲取種子的值。和上面保存種子值的地方是對應的。默認應該是userParameters>=#@
配置完LDAP,我們可以配置nFactor Flows了,這似乎是Netscaler13的新特性。
這次完成的目標是這樣的。
這個流程解釋了設備的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,並且新建一個策略。
注意這個圖中的表達式。
http.req.cookie.value("NSC_TASS").eq("manageotp") && client.IP.SRC.IN_SUBNET(10.2.0.0/16)
其中包含兩個變動的部分,一個是“manageotp”,另外一個是10.2.0.0/16
注意這裏goto選擇next
這個表達式代表,訪問gw網址的時候(在本次測試中,gw網址是gw.ipqn.local)如果包含二級目錄“manageotp”,並且訪問的設備ip在10.2.0.0/16網段中,那麼便從這個分支進行下去下一個Factor。否則的話繼續匹配下一個policy。
接下來點擊加號按鈕添加下一個policy。
表達式爲true代表無論什麼情況都匹配,這樣配置也就是意味着只要不符合上一個policy的所有流量,都會走這個分支。
在每一個policy右邊都有一個綠色箭頭,點擊之後就可以添加出一個新的factor。
我先敘述第一個分支的下一個factor。
第一個分支被我們定義爲註冊設備的分支,在這個分支中,需要添加schema。所以點擊Add schema
如上圖,可以在左側選擇xml模板,並且在右邊查看網頁的效果。
根據博客中的指示,添加的是SingleAuthManageOTP.xml,這個就和普通的storefront一樣的登陸界面
新建一個policy(下文中,新建policy不再截圖)
這裏認證的方法選擇ldap,然後就用到之前配置的ldap的配置了。
這裏action處我們選擇的是普通的用戶名、密碼的那個ldap。
然後點擊藍色的add按鈕。
然後再次添加下一個factor。
添加policy。
這一次選擇的是添加註冊設備的ldap。這個分支便完成了。我們敘述一下作用。首先用戶一定要是在指定的網段(一般設置成內網)並且在gw網址中輸入manageotp這個二級域名纔會進入下一個認真界面,不滿足條件或者只滿足一個的話不會進入這個分支。
這個分支接下來是要求你使用域賬號登陸,只有正確的輸入了域賬號才能進入到註冊設備的界面。
整個過程是自定義的,完全可以挑選自己選擇的認證過程。域賬號只是其中的一種,甚至可以跳過域賬號的那個過程,輸入網址之後直接進入註冊設備的階段。
甚至可以添加一個新的認證過程,整個流程可以一步一步的下去,這純粹取決於配置者在安全和方便之間的抉擇。
接下來是下一個分支。
下一個分支的網頁界面應該包含用戶名、密碼和otp。根據博客的說法,選擇的是 DualAuthPushOrOTP.xml。事實上由於我的博文中沒有用到push服務。所以我們只要找到那個頁面效果是用戶名、密碼、OTP三個輸入框的xml就可以了。
schema選擇好之後確定。然後在這個factor中添加policy,選擇普通的驗證的這個ldap。(這裏我也不清楚爲什麼要這麼做,不應該是這接選擇otp驗證嗎?)
最後再次創建一個新的factor
創建policy如下圖,此圖使用的policy決定使用的ldap驗證的方法是otp驗證。
如此整個nFactor Flow流程完成。接下來就是將這個流程綁定到aaa virtual server上。
接下來我們要把這個aaa server放到gateway上去。
在這個頁面選擇添加按鈕
下文輸入
AAA.USER.ATTRIBUTE(1)
Profile配完之後,再配置Polices
然後進入Citrix Gateway Vitual Servers配置
選擇正確的Vitual Server
policy里加一條
這裏選擇策略,就是前文提到的traffic policy中的otp策略
下圖的界面在右側,點擊authentication profile
這裏就算着之前配置的aaa vitrual server了。
記得要在這裏點個ok
還有一個“主題”,主題就是外觀,儘量把外觀設置成和sf一樣。那樣會漂亮點,實際沒啥用。
接下來是在瀏覽器中的訪問。註冊的過程,應該是很容易理解的。
你的手機上應該有一個支持otp的token軟件,比如身份驗證器啊之類的,這個很多,那個公司的無所謂,只要是otp就可以。
然後掃碼之後,在手機上獲取token並且驗證。
這裏有時候不是一步通過的,如果不能通過需要排錯。
(排錯)
域服務中userParameters是否有值?
Netscaler和你的手機時間是否一致?(因爲otp的值取決於時間)
(排錯完畢)
註冊完就可以正常登陸gw,登陸了。