Double authentification (2FA) avec un Fortigate via LDAP(S) : FortiClient (2/4)

Objectif et contexte

Nous avons vu dans un premier article comment installer et configurer l’application « DUO Authentication Proxy » de DUO Security.

Cet article est donc la suite logique dans lequel nous verrons comment l’utiliser depuis un firewall Fortigate. C’est l’article le plus long de la série.

Nous étudierons ici le cas suivant via le protocole LDAP(S) :

  • Accès sécurisés distants VPN SSL (FortiClient), Ex. pour des consultants ou employés d’une compagnie

Je vous détaillerai de petites astuces notamment pour bien gérer la redondance au niveau des Fortigate si vous souhaiter configurer deux serveurs DUO Proxy.

Dans l’article suivant nous verrons comment utiliser ces serveurs pour l’administration du Fortigate lui-même.

Fortigate – Configuration LDAP

Pour authentifier les usagers qui se connecteront aux Firewalls Fortigate depuis FortiClient, nous nous appuieront sur des serveurs LDAP que nous allons configurer.

Si j’utilise le protocole LDAP à la place d’un serveur Radius, c’est que je trouve cela plus lisible et plus souple pour gérer les groupes d’utilisateurs (au sens Active Directory ou AD) et plus logique finalement.

Plus lisible car il suffit de créer des groupes locaux (sur le fortigate) qui font référence à leur pendant côté Active Directory. Comme on le verra plus loin, il suffira d’aller naviguer sur l’AD depuis le Fortigate et de choisir les différents groupes.

Plus souple car il suffira ensuite d’ajouter les futurs usagers au niveau de l’AD dans les bons groupes sans que l’on ait besoin d’intervenir au niveau du Fortigate.

Plus logique car bien souvent lorsque l’on utilise un serveur Radius, il se base lui-même sur l’AD pour autoriser ou non l’accès suivant le(s) groupe(s) au(x)quel(s) l’usager appartient. Donc autant interroger directement l’AD sans passer par un intermédiaire.

La mise en place de la double authentification au niveau des connexions FortiClient (tunnels VPN SSL) nécessite quelques changements au niveau du Fortigate.

Tous les détails dans les sections suivantes mais dans les grandes lignes :

  • Configurer de nouveaux serveurs LDAP qui seront en fait nos serveurs « Duo Authentication Proxy »
  • Créer des groupes locaux pointant sur ceux d’Active Directory
  • Ajouter ces groupes au niveau du paramétrage VPN
  • Configurer de nouvelles règles de filtrage pour utiliser ces groupes
  • Réglages finaux des connexions LDAP, notamment le « timeout »

A noter que ce qui suit a été testé et validé sur des Fortigate ayant comme version FortiOS : 6.0.x et 6.2.x

Fortigate – Serveurs LDAP (DUO Proxy)

Serveur principal :

En premier lieu nous utiliserons l’interface graphique (GUI) pour configurer le serveur LDAP primaire qui sera en fait notre nouveau serveur DUO Proxy. Le cas échéant se positionner sur le bon « VDOM » puis se rendre ici : /User & Device/LDAP Servers

Renseigner les champs suivants de cette manière avec ses propres informations :

Name DUOPROXY
Server IP/Name DUOPXY01.acme.corp
Server Port 389
Common Name Identifier sAMAccountName
Distinguished Name DC=acme,DC=corp
Username CN=ldap-query-svc,OU=ACME,OU=Service Accounts,DC=acme,DC=corp
Password L@ Securite est l affaire de t0us !!

Faire attention de bien saisir le CN de cette façon et d’indiquer le chemin complet pour l’utilisateur.

Un exemple ci-dessous, « Connection status » doit indiqué « Successful » :

La connexion au serveur est un succès

Serveur de secours :

Ensuite, nous pourrions configurer sur le Fortigate un second serveur LDAP (DUO Proxy) de secours de la même manière, cela fonctionnerait. Le problème dans cette configuration c’est que les deux serveurs seraient interrogés en même temps et que l’usager recevrait systématiquement deux demandes de validation pour le 2FA… ce qui ne donne pas une bonne expérience côté utilisateur vous conviendrez.

Aussi, nous allons procéder différent et configurer réellement un serveur de secours au principal mais cela ne peut se faire uniquement qu’en ligne de commande (CLI) avec le paramètre « set secondary-server » :

config user ldap
edit « DUOPROXY »
set server « DUOPXY01.acme.corp »
set secondary-server « DUOPXY02.acme.corp »
set source-ip 10.20.30.40
set cnid « sAMAccountName »
set dn « DC=acme,DC=corp »
set type regular
set username « CN=ldap-query-svc,OU=ACME,OU=Service Accounts,DC=acme,DC=corp »
set password ENC MTAwMKc0g0TL69uXauUZuYdZgAHh6626….
set password-expiry-warning enable
set password-renewal enable

next
end

Dans cette configuration, si le serveur principal n’est pas joignable (durant une maintenance par exemple), le Fortigate enverra automatiquement les requêtes sur le serveur de secours.

Malheureusement, cette information ne sera jamais visible dans l’interface graphique (GUI), en tous les cas jusqu’à ce jour, il faut donc garder cela en tête.

Il est toujours bon de préciser la source (IPv4) qui se connecte aux serveurs pour une meilleure traçabilité et gestion des flux réseaux (set source-ip).

Et j’active également les messages via FortiClient afin d’avertir l’usager si son mot de passe venait à expirer prochainement et/ou si ce dernier devait le changer (set password-*). Ce qui n’est pas activé par défaut et seulement activable par CLI là aussi.

Fortigate – Groupes locaux

Nous devons maintenant créer des groupes locaux qui pointeront vers ceux de l’annuaire d’entreprise via nos nouveaux serveurs LDAP.

Prenons l’exemple du groupe « VPN_DUO_TEST » qui servira pour nos tests à se connecter à distance avec le FortiClient, il faut se rendre ici (interface GUI), le cas échéant se positionner sur le bon « VDOM » :

/User & Device/User Groups puis « Create New« 

Type Firewall
Members Ne rien mettre
Remote Groups Cliquer sur « Add » et choisir le nouveau « Remote Server »

Exemple ci-dessous :

Début de création du groupe local

Ce n’est pas fini, nous devons maintenant indiquer à quel groupe « distant » (= AD) est relié notre groupe local. Pour cela, il faut faire un double clic sur la ligne en jaune où se trouve le serveur LDAP « DUOPROXY ». Ensuite, dans le champ de recherche on indique le nom du groupe (= CN) que l’on cherche, comme ci-dessous (cela peut-être n’importe quel nom) :

On doit chercher le groupe sur l’annuaire d’entreprise

Faire un clic droit sur la ligne qui nous intéresse, cliquer sur « Add Selected » et enfin terminé par « OK » :

Sélection du groupe
Le groupe est sélectionné (une pastille apparaît)
On valide la sélection

Notre groupe est bien présent mais sans référence pour le moment (= non utilisé pour l’instant) :

Le groupe est créé

Pour plus de clarté, il est préférable de ne faire corresponde qu’un seul groupe local à un groupe « distant » de l’AD (du 1 pour 1 donc).

Fortigate – VPN

Une fois le groupe créé nous devons créer et lui « affecter » un portail et lui permettre ainsi de se connecter au Fortigate.

Il faut pour cela se rendre dans le menu « VPN« . Si il n’est pas visible il suffit d’activer la fonction dans « System/Feature Visibility » et choisir « SSL-VPN Realms » (uniquement).

Cliquer ensuite sur le menu « SSL-VPN Portals« . Il est préférable de distinguer les connexions suivant leur finalité. Par exemple ici nous avons 4 portails distincts :

Différents portails VPN SSL

L’intérêt de faire cela est d’appliquer des options différentes suivant qui se connecte. Comme ici, nous avons par exemple le portail des « utilisateurs classiques » qui possède son propre range d’adresses IPv4 (pour le filtrage), son propre routage (split tunneling), on interdit d’avoir plusieurs connexions actives avec le même compte, mode « Tunnel » uniquement, etc…

Une fois le portail créé, nous devons l’affecter au groupe précédemment créé. Il faut se rendre dans le menu « SSL-VPN Settings » et créer la relation entre le groupe local et le portail voulu en cliquant sur « Create New » :

On créé et on affecte le portail à notre groupe local
On sélectionne le groupe local et portail

Une fois terminé, vous devriez avoir une page comme celle-ci, il ne reste plus qu’à valider les changements :

Paramètres appliqués à VPN SSL

Vous noterez qu’il est préférable de choisir un port « non standard » pour les accès externes même si cela obligera certains compagnies à ouvrir le flux en sortie. Il faut également prévoir un délai d’inactivité afin de faire tomber la connexion. Enfin, il est conseillé d’utiliser un certificat public valide et reconnu par une autorité certification.

Fortigate – Filtrage

Nous terminons la configuration en ajoutant les règles filtrage afin d’autoriser concrètement la connexion VPN SSL en précisant les flux réseaux permis.

Dans notre cas nous prendrons pour exemple l’accès à un intranet d’entreprise, Sharepoint :

Règles de firewall

Comme vous le voyez il faut également ne pas oublier d’ajouter le flux pour les requêtes DNS car les usagers utiliseront certainement le nom des serveurs.

A noter que l’interface source sera toujours « SSL-VPN tunnel » et qu’en source il faudra toujours préciser le range d’adresses IPv4 + le groupe local créé précédemment. Et le NAT ne doit pas être activé.

Une précision : le choix d’attribution de l’adresse IP est fait au moment de l’affectation du portail pour le groupe (étape précédente). En d’autres termes, ici avec la règle de filtrage, c’est le groupe qui va « orienter » le choix de l’adresse IPv4 qui est attribuée et non le fait de mettre tel ou tel range d’adresse IP (en bleu dans l’exemple).

Fortigate – Timeout (important)

Dans les sections précédentes nous avons vu quelques « astuces » seulement activables par ligne de commande (CLI), comme l’ajout d’un serveur de secours et les notifications lors de l’expiration des mots de passe.

Il reste un dernier changement important à faire pour laisser le temps à l’usager de valider ou non la demande de connexion lors de la deuxième authentification (si accès frauduleux ou erreur).

En effet, par défaut, le Fortigate n’attendra que 5 secondes. Ce qui est problématique car cela ne laisse pas assez de temps à l’usager de sortir son smartphone par exemple ou de recevoir l’appel téléphonique pour agir (voir Méthodes DUO offertes).

Nous allons donc devoir augmenter ce temps d’attente à 60 secondes, ce qui est largement suffisant.

Il faut pour cela se rendre en ligne de commande dans la configuration globale, comme ici dans la démo, cliquer sur le signe « >_ » :

On change la durée d’attente globale

Tout est prêt, nous allons pouvoir passer au FortiClient, le premier cas d’utilisation.

FortiClient – Installation et configuration

Installation

Pour valider le fonctionnement de l’ensemble, il est nécessaire d’installer et de configurer le FortiClient sur son PC/Mac (ou Tablette dans l’App store). Il s’agit d’un client VPN disponible sur de nombreuses plateformes :

https://forticlient.com/downloads

Cette version « allégée » est suffisante pour nos tests :

Télécharger la dernière version du FortiClient

L’installation est très intuitive mais il faut les droits d’administration.

Configuration

Il faut créer une nouvelle connexion comme ici en cliquant sur la petite roue crantée en haut à droite dans le menu « REMOTE ACCESS » :

Ajouter une nouvelle connexion

Il peut être nécessaire de déverrouiller l’accès avant en bas à gauche :

Si besoin, déverrouiller l’accès aux paramétrage

Puis saisissez les informations correspondantes à votre environnement :

Paramètres de la nouvelle connexion VPN SSL

Bien se positionner sur le type de VPN « SSL-VPN », cocher la case « Customize port » et mettre le bon numéro de port dans la case correspondante. Et il faudra bien-sur créer une nouvelle entrée DNS publique. Enregistrer le tout.

Si vous voulez vérifier que le certificat est bien valide, il suffit de se rendre à cette l’URL avec votre navigateur depuis l’extérieur de votre entreprise : https://sslvpn.acme.com:12443

Test de connexion

Vous devrez ensuite créer un utilisateur sur votre annuaire d’entreprise et le mettre dans le groupe « distant » que nous avons relié au groupe local du firewall. Dans notre exemple le CN « VPN_DUO_TEST ».

Au niveau de la console FortiClient, sélectionnez votre connexion créée auparavant et saisir les informations de connexions, cliquer sur « Connect » comme ici :

Saisir les informations de connexion AD de l’utilisateur

Ensuite, la connexion va commencer à s’établir puis s’arrêter à 45%, l’usager aura 60 secondes pour répondre :

La connexion complète ne peut se faire qu’avec l’accord de l’usager

Une fois que l’utilisateur valide, la connexion s’établie.

En cas d’échec, il faudra vérifier les fichiers de logs sur serveur, notamment le fichier nommé « authevents » qui sera d’une grande aide pour identifier la ou les causes. Se référer au premier article pour plus de détails, section « Lancement et fichiers de logs ».

Mot de la fin

Nous venons de voir une manière de configurer un Fortigate avec un serveur DUO Authentication Proxy afin d’activer la double authentification pour les connexions VPN SSL avec FortiClient.

Nous verrons dans l’article suivant comment utiliser la même méthode pour l’administration des Fortigate.

Pour connaître les différentes méthodes de validation côté utilisateur avec DUO et son enrôlement, il faut vous rendre au dernier article de la série (4/4) – en cours de rédaction.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.