Citrix NetScaler Gateway con OTP (One Time Password)
Bueno, hacía tiempo que quería dejaros este post, donde vamos a ver cómo habilitar una de las grandes novedades de Citrix NetScaler 12, que es la posibilidad de utilizar autenticaciones de tipo OTP (One Time Password) o contraseña de un solo uso de forma nativa y sin tener que depender de fabricantes de terceros!
Desde la versión NetScaler 12.0 FR1 y si tenemos la versión Enterprise o Platinum, tendremos totalmente integrada la posibilidad de habilitar y configurar el requerir de un doble factor de autenticación OTP. Podremos hacer que los usuarios con su dispositivo móvil y mediante la app de Google Authenticator tengan que proporcionar para entrar en nuestro portal corporativo a parte de su contraseña una clave aleatoria OTP, y así aseguraremos que entra quien queremos en nuestra empresa y a ningún usuario le han robado su contraseña.
En este documento veremos todos los pasos necesarios, crearemos además un vServer para que los usuarios primeramente registren su dispositivo (usarán este Portal cada vez que quieran registrar un nuevo dispositivo). También veremos las configuraciones necesarias para habilitar en nuestro Gateway dicha autenticación OTP.
Tendremos en cuenta que actualmente Citrix Receiver no lo soporta, si no que será de uso exclusivo (por ahora) con navegador web, así que el usuario deberá descargarse la app de Google Authenticator (por ejemplo) y registrarse para luego ya poder acceder de forma habitual a su portal de aplicaciones o escritorios, validándose con su contraseña de siempre y el código aleatorio generado que obtenga de la app.
Importante, antes de empezar, asegúrate que tienes el servicio de hora NTP configurado. Se da por hecho que ya tienes un NetScaler Gateway configurado correctamente que valida contra tu dominio mediante una política y un servidor LDAP, esto lo usaremos para que los usuarios accedan al portal ‘manageotp‘ y puedan gestionar su dispositivo.
Autenticación LDAP
Desde “Security” > “AAA – Application Traffic” > “Polices” > “Authentication” > “Advanced Policies” > “Actions” > “LDAP” > “Add…”, creamos un nuevo Servidor LDAP. En mi caso le llamare “192.168.1.250_LDAP_OTP_sin_auth”, cumplimentamos los datos de IP y puerto como es habitual, desmarcamos “Authentication”, en “Administrator Bind DN” deberemos incluir una cuenta que tenga privilegios de modificar el atributo de OTP en las cuentas de nuestro Directorio Activo. Añadiremos, (de la derecha) el campo “OTP Secret” estableceremos cuál será el atributo que usará en las cuentas de usuario para almacenar el secreto OTP (podemos usar por ejemplo userParameters o el que más gusto nos de). Pulsamos en “Create” para crearlo.
Bien, creamos otro Servidor LDAP, en este caso le llamare “192.168.1.250_LDAP_OTP_valida_sin”, será igual que la anterior pero con un cambio en el filtro de búsqueda, añadimos en Search Filter el valor userParameters>=#@ y pulsamos en Create.
Vamos a “Security” > “AAA – Application Traffic” > “Policies” > “Authentication” > “Advanced Policies” > “Policy” y pulsamos sobre “Add” para crear unas políticas de autenticación.
Le indicamos un nombre, en mi caso “192.168.1.250_LDAP_adv”, en Action Type indicamos “LDAP”, seleccionamos en Action nuestro Servidor LDAP normal, el que ya teníamos inicialmente en nuestro entorno. En Expression indicamos true & pinchamos en Create!
Creamos otra politica nueva, esta se usará para la gestión del OTP, la llamo “192.168.1.250_LDAP_OTP_sin_auth_adv”, en Action Type seleccionamos “LDAP”, en Action la asociamos con el servidor LDAP que no tiene auth y tampoco el filtro configurado, que es el primero que hemos creado, en mi caso es “192.168.1.250_LDAP_OTP_sin_auth”. Y en Expression indicamos: HTTP.REQ.COOKIE.VALUE(“NSC_TASS”).EQ(“manageotp”) y pulsamos en Create.
Y creamos una última politica nueva, se usará para la verificación, yo la llamo “192.168.1.250_LDAP_OTP_valida_sin_auth_adv”, en Action Type seleccionamos “LDAP”, en Action le asociaremos el servidor LDAP que no tiene la autenticación habilitada, que sí tiene configurado el secreto OTP y el filtro de búsqueda, en este caso era “192.168.1.250_LDAP_OTP_valida_sin”. En Expression indicamos true y pulsamos en Create.
Login Schema,
Vamos a “Security” > “AAA – Application Traffic” > “Login Schema” > “Profiles” > “Add”,
Crearemos aquí el esquema de login de factor simple para manageotp, Le indicamos un nombre por ejemplo “Single_Manage_OTP_Login_Schema” y en Authentication Schema pulsamos el lápiz para editar,
Filtramos y buscamos el fichero SingleAuthManageOTP.xml, y pulsamos en “Select” para seleccionar este esquema, pulsamos ya en “Create”.
Pulsamos en Create,
Creamos otro perfil de esquema de login, esta vez para el doble factor de autenticación, le llamamos como nos parezca, en este caso “Single_Manage_OTP_Login_Schema” y en Authentication Schema volvemos a editar,
Y procedemos igual, filtramos esta vez y buscamos DualAuth.xml, pulsamos en “Select” y en “Create”,
Pulsamos en More… añadimos en Password Credential Index un 1 para indicar el campo que almacena la contraseña del usuario, pulsamos en “Enable Single Sign On Credentials” y en “Create”,
Bien, ahora en la pestaña de “Policies” vamos a crear sus políticas, pulsamos en “Add“,
Le damos un nombre a la política (pej:”Single_Manage_OTP_Login_Sch_Pol”) que llevará asociado el perfil que hemos creado con el esquema de login de factor simple, que era “Single_Manage_OTP_Login_Schema” y creamos una regla para que sólo muestre este portal si el usuario accedió a /manageotp. Y si queremos, también podemos añadir el rango IP local de nuestra red para que sólo se puedan registrar desde dentro de nuestra red (por los mismos motivos de seguridad), añadimos la regla:
http.req.cookie.value(“NSC_TASS”).eq(“manageotp”) && client.IP.SRC.IN_SUBNET(192.168.1.0/24)
Pulsamos en “Create”,
Creamos otra política, esta vez para el perfil del factor de doble autenticación, le damos un nombre, por ejemplo “Dual_OTP_Login_Sch_Pol” y seleccionamos nuestro perfil previamente creado, en este ejemplo es “Dual_OTP_Login_Schema”. En Rule indicamos true y damos a Create!
Authentication Policy Labels,
Seguimos, ahora vamos a “Security” > “AAA – Application Traffic” > “Policies” > “Authentication” > “Advanced Policies” > “Policy Labels” > Add”
Se utilizará para la gestion y verificación de OTP, le indicamos un nombre “OTP_Auth_Pol_Label” y le asociamos en Login Schema el LSCHEMA_INT, pulsamos en Continue,
Pulsamos en Policy Binding,
Y selecccionamos la politica que no tenia la auth habilitada y sólo tenia el secreto OTP en mi caso era “192.168.1.250_LDAP_OTP_sin_auth_adv” y damos a “Select”,
Pulsamos en “Bind”,
Pulsamos en “Add Binding” para añadir otra política,
Pulsamos en Select Policy,
Y seleccionamos la política que verifica el OTP en mi caso era “192.168.1.250_LDAP_OTP_valida_sin_auth_adv”, le damos a “Select”,
Y le damos menos prioridad que a la política de mageotp, y le damos a “Bind”,
Vamos a “Security” > “AAA – Application Traffic”, lo habilitamos > “Virtual Servers” > “Add”,
Creamos un servidor de autenticacion para el OTP, no hace falta que tenga direccionamiento, le indicamos un nombre en este caso “OTP_AAA_Auth”, en IP Address Type indicamos “Non Addressable” y pulsamos en “OK”.
Pinchamos en “No Server Certificate”,
Pinchamos en “Select Server Certificate”,
Y escogemos el certificado que tenemos ya instalado y válido, en mi caso un Wildcard, “Select”,
“Bind”,
“Continue”,
Pinchamos donde indica “No Authentication Policy“,
Pulsamos en “Select Policy”,
Y seleccionamos nuestra politica de autenticación LDAP habitual, la que tiene autenticación habilitada,
Pinchamos en “Select Next Factor”,
Y seleccionamos la Policy Label que hemos creado para OTP.
Pulsamos en “Bind”,
Pulsamos en “Continue”,
Pulsamos en el menú de la derecha en “Login Schemas” y añadimos uno desde “No Login Schema”,
Pulsamos en “Select Policy”,
Y seleccionamos nuestra política de login “Single_Manage_OTP_Login_Sch_Pol” de factor simple, “Select”,
“Bind”
Ahora, pulsamos en “Login Schema” y “Add Binding”,
Pulsamos en “Select Policy”,
Y seleccionamos la de doble factor que en este ejemplo es “Dual_OTP_Login_Sch_Pol”, & “Select”,
“Bind”,
En el menú derecho buscamos y añadimos un tema para el portal desde “Portal Themes”, seleccionamos RfWebUI.
Pulsamos en “OK”.
Traffic Policies,
Vamos a “NetScaler Gateway” > “Policies” > “Traffic” > “Traffic Profiles” > “Add”,
Creamos un perfil de tráfico para OTP, le damos un nombre, en mi caso “OTP_NS_Traffic_Profile”, en SSO Password Expression indicamos http.REQ.USER.ATTRIBUTE(1) y pulsamos en “Create”.
Creamos una política desde “Traffic Policies” > “Add”,
Le indicamos un nombre “OTP_NS_Traffic_Pol”, seleccionamos el perfil que acabamos de crear”OTP_NS_Traffic_Profile”, pulsamos en “Switch to Default Syntax”, dejamos como expresion true y pulsamos en “Create”,
Vamos a editar nuestro virtual server de NetScaler Gateway, vamos a “NetScaler Gateway” > “Virtual Servers” > seleccionamos el nuestro > “Edit”. Y añadimos políticas!
En “Choose Policy” escogemos de tipo Traffic, “Continue”,
Pulsamos en “Select Policy”,
Seleccionamos la política de tráfico recién creada, que era “OTP_NS_Traffic_Pol” & “Select”,
“Bind”,
En el menú de la derecha añadimos los “Authentication Profile”,
Pulsamos en el más de “Authentication Profile”,
Creamos un perfil que lo enlazamos con el servidor de autenticación que hemos creado, le damos un nombre y pulsamos en “Authentication Virtual Server”,
Seleccionamos el servidor, que era “OTP_AAA_Auth” & “Select”,
Pulsamos en “Create”,
Pulsamos en “OK”,
Añadimos también en el virtual server el tema del portal desde “Portal Themes” en la derecha,
Seleccionamos el portal RfWebUI,
“OK” y guardamos la configuración, aún que no te lo creas… ya está!!!! casi ná…
Portal de gestión de OTP,
Como usuario, primero, deberíamos acceder a nuestro portal corporativo para registrar nuestro dispositivo móvil, pero añadiéndole /manageotp al final de la URL, por ejemplo: https://citrix.openservices.eus/manageotp, el usuario deberá validarse con sus credenciales del AD.
Y desde aquí podra añadir un nuevo dispositivo para usarlo como token, le daría un nombre y a “Add Device”,
Le saldría un código QR que debería escanear para enlazarse con su app de Google Authenticator que está disponible tanto en Android para dispositivos genéricos o en iOS para iPhone o iPad.
Y ya nos indicará que se registró satisfactoriamente!
Ahora el usuario ya podrá entrar en su portal corporativo de siempre y seguir trabajando normal, cuando acceda como vemos, tendrá que meter sus credenciales como es habitual y luego el OTP o contraseña de un solo uso que obtendrá del móvil.
Y listo! Este sería un pantallazo de lo que vería el usuario, ese sería el código que aleatoriamente se le genera y deberá introducir cuando necesite. Algo largo de configurar pero con grandes resultados en cuanto a obtener mucha más seguridad en nuestro entorno. Ya nunca más nos podrán robar credenciales de nuestros usuarios!