So you run SiteManager. And somebody done decided they want to make a new server that will host the security.dat file. And… You already did the work to create custom .ini file locations for the users. NOW you have to change all those smapp.ini files with the updated location of the security.dat file. How dare they?! Well. That could be some fun if you have a lot of users. Wait…. Powershell for the rescue! If you happen to use a profile server to host the user files, you can easily replace it with the new location of the security.dat file.
Update: Not sure what happened, but the code paste didn’t take evidently. I blame gremlins. It has been corrected.
# Replace a line / value in .ini file stored in Citrix UPM folder location when a change to the application is made.
# An example is for SiteManager, if you change the location of the .dat file for security.dat file and you are using a custom .ini
# created and stored with the user profile.
$filePath = "e:\locationofupmfolders"
$Files = Get-ChildItem -Path $filePath -Recurse -File -force -Include "smapp.ini"
foreach($file in $files)
{
$find = "value-you-want-to-change"
$replace = "value-you-want-to-change-to"
$content = Get-Content $($file.FullName) -Raw
#write replaced content back to the file
$content -replace $find,$replace | Out-File $($file.FullName) | write-output
}
Easy peasy. Now they have the new location of the security.dat file!
Get rid of it! In the How To Create The Wow nFactor part one (https://xenapplepie.com/2022/03/13/how-to-create-the-wow-nfactor/), there is a section where you get a popup after configuring your LDAPS authentication. This outlines resolving that by logging into your handy, dandy Netscaler ADC with the power of SSH or putty. I’ll also link from that location the changes listed here to resolve that. This example will use putty as getting in the door. After that point of connection, the commands are the same from an SSH session.
Open up Putty and enter the host name / IP.
Login with your nsroot privilege.
Enter “shell” to drop to the Linux shell.
At the prompt, enter “cd /nsconfig/loginschema/LoginSchema.”
Press “Enter.”
Enter “ls” to list folder contents. You are looking for the PrefilUserFromExpr.xml file.
Enter “cp PrefilUserFromExpr.xml /nsconfig/loginschema/PrefilUserFromExpraaa.xml.” You can change the file name to whatever you wish. I just used this name for the example. This copies the xml file that is the template for the xml file you are going to modify.
Press “Enter.”
Type “cd..” to go up a folder level.
Type “ls” to list folder contents. This is to confirm the file copied correctly.
Type “vi PrefilFromUserExpraaa.xml.” This will open the file in vi editor so that you can make changes to the file.
Press “Enter.”
Use your arrow keys to navigate to the ${http.req.user.name}.
Highlight the first “h.”
Press the “Del” key to delete the text until you have just “{}.”
Press the “i” key to “Insert” and enter “AAA.USER.NAME” in the area so that it looks like ${AAA.USER.NAME}.
Press the “Esc” key and enter “:w!” This will write the file.
Press the “Esc” key and enter “:q” This will quit the vi session.
Type “exit” and press “Enter.” This exits the shell session.
Type “exit” and press “Enter.” This will exit your putty session.
Now you will need to go back to the section for the LDAP schema in your nFactor flow and edit. You will choose the LDAPS_Auth_Test Login Schema.
Click “Edit.”
Click the pencil icon.
Click on the “PrefilFromUserExpraaa.xml.”
Click “Select.” If you do not do this part, you won’t see the change reflected. You will see the ${AAA.USER.NAME} in the “User name” field.
Click “OK.”
Click “Done.”
You have completed the change to the custom XML file to move from the deprecated setting!
So ran into something fun with the 13.0-84.11 firmware for the ADC. After moving to this version, we noticed the packet engine crashed and failed over. Then it did it again a few days later. After a call with Citrix, looks like there is a known bug in there that is to be remediated in the next month with a new firmware release. The recommendation to do the fix is to run this command on each node of an HA pair: nsapimgr -ys enable_ica_edtinsight=0. There was a CTX article that was referenced (https://support.citrix.com/article/CTX341028), but I was unable to view it. There is a caveat if you happen to be using EDT that it won’t show in ADM after you make this change, so you would need to disable HDX Adaptive Transport if you want to see session information in ADM.
This is part 2 of the nFactor setup that outlines how to setup the AAA-TM server and the Authentication Profile that you need in order to implement the nFactor flow you created in part 1. Link to Part 1 below.
This section outlines setting up the AAA-TM server to replace basic authentication on Citrix Gateway. If you want to make this accessible to things other than just Citrix Gateway, you will need an IP address, a certificate, and a DNS entry to point to said IP address. If you want to ONLY use it for Citrix Gateway, there is an option under the configuration for IP Address Type to select “Non Addressable.” In this example, an IP address will be used.
Login to you Citrix ADC and navigate to Security > AAA – Application Traffic > Authentication Virtual Servers. Select “Add.”
You can do two different assignments with this setting. Under “IP Address Type,” you can select “Non Addressable” if you only wish to use for Citrix Gateway.
Enter “Name.”
Select “IP Address Type” as “IP Address.”
Enter IP address.
Click “OK.”
Click on “No Server Certificate.”
Select the certificate you wish to bind to the AAA-TM server.
Click “Select.”
Select “Bind.”
Select “Bind.”
Select “Continue.”
Click “nFactor Flow.”
Click “Add Binding.”
Select the nFactor flow you created previously and click “Select.”
Enter “true” for the “Expression.”
Click “Bind.”
In the upper-right, select “Portal Themes.”
Select “Add.”
Here you can change the look of the theme. Accepting the defaults, click “OK.”
Click “Done.”
Click “OK.”
Click “Done.”
This completes the setup of the AAA-TM vserver. The next step is to create the Authentication Profile that will be used on Citrix Gateway to utilize the AAA-TM vserver.
Recently we had upgraded firmware on a Citrix ADC from 13.0-83.27 to 13.0-85.15. This was to try and correct an issue with the HTML interface not updating the custom settings on the Login Schemas for nFactor configuration. It would create the custom XML file for use, but it wouldn’t reflect any changes to it. I checked the permissions on the XML file and they would show root had read / write. You could still copy the XML file down via tools like WinSCP, make the edit, and copy back to the ADC.
Below you can see what happened. You would navigate to AppExpert > Responder and you would see the proper number of policies showing.
After you click on the the # Responder Policies, you see below.
It shows that there are no policies there. You can click on “Statistics” and you see this below.
It appears that it reset the counters as well. You can putty into the ADC and do a “show run” and you see that they are still there.
You can see that the policies are there. They do appear to work, but they just don’t show on the HTML GUI.
So a downgrade of version will be in order to see if that resolves the issue and Citrix is still looking at the issue to find a resolution.
UPDATE: Looks like a firmware revision reversion took care of the display issue with the showing of Responder policies.
This configuration covers setting up EULA as a first factor in an nFactor flow to do one side of an MFA configuration. This will setup a group extraction that looks for an assigned Universal group that is designated to trigger directing traffic to an MFA provider. The reason for using a Universal group would be in an instance where you have a forest with multiple subdomains that have a two-way transitive trust. This allows you to manage group membership from one domain as the Universal group will be replicated to all the domain controllers. This example is to check membership of the Universal group and perform cascading LDAP for the users that are NOT members of that Universal group.
So I was trying to move to advanced authentication in a test environment. While I was doing that, I thought to myself that since my end goal with that test, would be to prep to move to MFA. That led to me thinking how I would want to implement that. Then…… I ran into a very interesting thing when you move from using basic authentication to an authentication profile with AAA-TM, that the EULA option goes bye bye. There isn’t even an option to select. So I went looking how to resolve that. One option was to follow a guide that I found to edit some xml files, but that meant that I would have to manually copy these to keep them in sync between the Citrix ADCs. I didn’t like that idea but did see the option to use EULA as a first factor in nFactor. Hmm… I was already thinking in that mode to setup nFactor since it would be needed to go down the MFA road. So that is the decision I decided to work on and get testing. I also found some interesting tidbits that I’ll point out in the configuration.
Update: Changed LDAPS policy settings to fix “Anonymous” issue.
Update: Added link to article to create custom XML file to change ${http.req.user.name} to ${AAA.USER.NAME}
So here we go!
You will need to have either Advanced or Premium license to have access to this feature. You will also need to have configured an Authentication Virtual Server which I will link soon.
In the “Authentication Schema” box, select the “Edit” pencil.
Click on the “LoginSchema.” This will bring up a list to choose from.
Scroll down and select “Eula.xml.”
Click the “Edit” button if you want to edit the EULA message.
After you change the EULA message below and click “Save,” click the “Select” button. This is VERY important or it won’t select it.
After you have configured the message, click “Save.”
Click “Create” button.
Click “OK.”
Click on “Add Policy.”
Click the “Add” button.
Name the policy and select “Action” as “NO_AUTHN.”
For the “Expression,” enter “HHTP.REQ.URL.CONTAINS(“/nf/auth/doAuthentication.do”)
Click “OK.”
Click “+” sign beside “NO_Authn_Pol” (whatever you name the Authentication Policy).
Select “Create Factor.” This factor will do the group extraction to test group access.
Name “Factor Name.” (Grp_Ext_Test in this example)
Select “Add Schema.”
Select “Only_User_Name.” This will have the user enter their user name to be evaluated.
Click “OK.”
Click “Add Policy.”
Click “Add.”
Enter “Name” for policy (test-ldap-grpexpt-pol in this example).
Select “Action Type” as “LDAP.”
For the “Expression” enter “true.”
Click “Add” on “Action.”
Select the root of the forest (domain if you only have 1 domain) for the “Server Name.” (The DC that you are trying to access will need to have the Global Catalog available for this to work correctly)
For the “Port,” choose either 3268 for unsecure LDAP or 3269 for secure LDAP (This will require that you upload the root certificate for the organization to utilize).
Make sure the UNCHECK the box for Authentication. This is just going to do a lookup if the user is part of the MFA group.
Enter your “Base DN” as where the users will be or the root of the forest / domain.
Enter “Administrator Bind DN” which is the account that will authenticate to the domain.
Enter and confirm “Administrator Password.”
Click “Test Network connectivity” to make sure that it is working correctly.
Complete “Server Logon Name Attribute” as “sAMAccountName.” The samaccountnames need to be unique in the forest or you will have issues with this global catalog lookup.
For “Group Attribute” select “memberOf.”
For “Sub Attribute Name” select “cn.”
Click the “+” sign beside “test-ldap-grpext-pol.”
Select “Create decision block” and enter “Decision block Name.” (Grp_Eval_Test in this example)
Click “Create.”
Click “Add Policy.”
Click “Add.” (NonMFA_Test in this example)
Select “Action Type” as “N0_AUTHN.”
Select “Action” as “NO_AUTHN.”
In the “Expression” enter “AAA.USER.IS_MEMBEROF(“UniversalGroup”).NOT.” (UniversalGroup is the group name of the MFA testing group)
Click on the “+” sign beside “NonMFA_Test.”
Select “Create Factor.”
Enter “Factor Name.” (LDAPS_Auth_Test in this example)
Click “Create.”
For the “Authentication Schema” click the pencil icon.
This allows you to take what was entered just after click on “Continue” for the EULA and populating that in the User Name / Password dialogue to prevent users from having to enter it twice.
Under the “Login Schema Files” select “PrefilUserFromExpr.xml. (Note that User Name contains $(http.req.user.name).
You can click the “+” sign on the bottom of the box to add additional LDAP/LDAPS policies. This is what you would normally see under the Basic Authentication on the Citrix Gateway.