Un des intérêts du Cisco ASA 5505 est la présence d’un service de VPN SSL autonome et disposant d’un client pour bien des systèmes d’exploitation.
Le VPN SSL est un type de VPN qui utilise comme transport le standard TLS. Il présente une caractéristique importante : lorsqu’on s’en sert avec une authentification par certificat, il permet d’utiliser les capacités de VPN on Demand d’iOS. Cela va permettre de configurer les systèmes Apple (via un profil de configuration) pour qu’ils ouvrent automatiquement — sans aucune action de l’utilisateur — une connexion VPN dès que certains noms de domaines sont demandés. Ainsi l’accès fortement sécurisé à certaines ressources de l’entreprise se fait sans peine pour l’utilisateur.
Pour que cela fonctionne, le VPN doit pouvoir être établi sans le mot de passe de l’utilisateur, d’où l’authentification par certificat. Si un utilisateur compromet son périphérique, il n’y aura qu’à répudier son certificat et en émettre un autre.
Répudier un certificat ? En émettre un autre ? Oui, cela demande une autorité de certification, et c’est ici que le Cisco ASA prend tout son sens, il dispose d’une autorité locale pour faire fonctionner très simplement le VPN SSL !
Au-delà de cette fonction de VPN on Demand sur certains clients, les VPN SSL présentent un autre intérêt : ils sont faits pour fonctionner sur le port 443, évitant ainsi les blocages arbitraires des réseaux de type hotspot.
Attention aux licences
Par défaut, le Cisco ASA 5505 est livré avec des licences VPN SSL dites « Essential », elles permettent un accès aux terminaux mobiles de type ordinateur (Mac, PC, Linux). Si vous souhaitez pouvoir connecter un terminal de type iOS ou encore Android, vous devez obtenir une licence AnyConnect for Mobile qui vous débloquera l’usage général de votre produit pour les terminaux mobiles. Le nombre de sièges étant toujours lié au nombre de licences SSL.
Configuration de l’autorité de certification
Le point de départ est donc la création de notre autorité de certification. Cela se passe dans Configuration > Remote Access VPN > Certificate Management > Local Certificate Authority > CA Server. Dans cette fenêtre vous allez pouvoir configurer votre autorité. Attention une fois configurée, il faudra détruire cette autorité pour tout changement. Vous remarquerez d’ailleurs que dans ma version, le serveur SMTP ne peut pas être authentifié, vous devrez donc avoir un serveur e-mail autorisant le relais ouvert pour l’IP de votre ASA… Je ne sais pas ce que ça donne sur une machine à jour, LDLC n’ayant toujours pas pu me fournir de mise à jour de mon système.
Ajout d’un certificat valide pour le Cisco
Les connexions entrantes au service VPN se feront par HTTPS, il faut donc lui fournir un certificat valide. Vous pouvez vous en procurer un gratuitement chez StarSSL.
Pour les besoins de l’article, je vais en fournir un auto-signé, mais ce n’est pas du tout recommandé pour une mise en production. Les certificats auto-signés peuvent se générer via Configuration > Device Management > Certificate Management > Identity Certificates.
C’est également de cet endroit que vous pourrez charger vos vrais certificats.
Configuration du VPN SSL
La prochaine étape est la mise en service du VPN SSL, pour cela nous allons utiliser l’assistant fourni par ASDM disponible dans le menu Wizards.
Ce que nous cherchons à faire est un VPN SSL pour les clients de type Cisco AnyConnect. Le clientless sert pour exposer des sites web internes via un proxy d’authentification hébergé sur l’ASA, cela ne nous intéresse pas aujourd’hui.
La configuration est simple, elle consiste à donner un nom au groupe, ici RemoteAccess. Je rajoute également ce nom dans l’URL d’authentification qui sera utilisée par les clients pour permettre éventuellement d’autres groupes à l’avenir avec des droits différents, mais une configuration quasiment identique. Vous pouvez vous en passer si vous le souhaitez.
À l’étape suivante, l’assistant vous demande la base d’utilisateur, vous pourriez demander au Cisco de se servir d’un service AAA externe, le serveur Radius de votre OS X Server par exemple, cela permettrait d’authentifier les utilisateurs via leur compte OpenDirectory. Ici, choisissez la base locale et laissez-la vide, nous modifierons cette configuration plus tard pour passer à une authentification par certificat uniquement.
Pour les réglages des utilisateurs distants (configuration IP, routes, etc.), vous devrez spécifier un groupe de configuration, nous allons en créer un spécifique.
Dans ce groupe nous allons donner une plage IP pour les clients, ici j’ai mis 10.0.200.0/24, faites en fonction de vos plans de réseau. Concernant l’IPv6, son intégration avec l’ASA fera l’objet d’un autre article plus transversal. La dernière option concerne le client Cisco AnyConnect à envoyer aux clients n’en étant pas équipé. Il se trouve d’origine sur le disque de votre ASA, vous pouvez y accéder via le navigateur.
Il ne reste plus qu’à écrire la configuration sur votre routeur.
NAT et Firewall
Comme l’assistant vous l’a indiqué, il faut maintenant penser à exclure vos sous-réseaux VPN du NAT ainsi qu’à autoriser vos communications au niveau du firewall. On retrouve le même concept que pour la gestion de la DMZ du Cisco ASA 5505.
Pour que la DMZ puisse communiquer avec le VPN, il faut lui ajouter une règle d’exclusion NAT qui lui dira que tout trafic sortant, originaire de la DMZ et allant vers le VPN doit être exclus du NAT. Il faudra faire de même pour tous réseaux devant être accessibles depuis le VPN.
À la suite de quoi, il faut ajouter une règle d’accès pour ce type de trafic. On peut dire très simplement que le VPN est autorisé à communiquer avec tout le monde ou être plus précis pour n’autoriser que le contact de la DMZ et non des machines locales.
Concernant le VPN, la chose à garder en tête est que l’interface d’attachement de ses communications est l’interface externe. Il n’y aura pas d’interface virtuelle pour supporter ses communications.
Configuration IP des clients VPN
Avant d’aller plus loin dans la configuration de notre VPN, il faut aller régler certaines options non demandées par l’assistant. Dans Configuration > Remote Access VPN > Network (Client) Access > Group Policies, éditez votre configuration RemoteAccess et parcourez les réglages pour spécifier serveurs DNS et domaines de recherche.
Dans cette même liste d’option, vous allez devoir gérer les routes à envoyer à travers le VPN. Cela se passe dans Advanced > Split Tunneling. Il va falloir activer configurer le type de règles que vous voulez appliquer (n’envoyer que certains réseaux) ainsi que la liste des réseaux en question.
Lors de la création de ma règle de réseau, j’ai utilisé une ACL standard avec une seule ACE indiquant de récupérer tout le réseau 10.0.0.0/8 pour faire simple. Dans la vraie vie, vous souhaiterez certainement être plus précis que ça et n’autoriser par exemple que le réseau de DMZ.
Configurer le VPN pour utiliser les certificats
Votre serveur VPN SSL étant configuré, il nous reste à lui dire d’authentifier les clients uniquement par certificat. Rendez-vous dans Configuration > Remote Access VPN > Network (Client) Access > AnyConnect Connection Profiles puis dans le panneau principal, choisissez d’éditer votre profil RemoteAccess pour changer son mode d’authentification.
Ports d’écoute
Tant qu’à être dans les profils de connexion, autant en profiter pour changer le port d’écoute par défaut du VPN SSL, le port 443 est un port très demandé et l’utiliser pour quelque chose qu’un utilisateur ne va pas voir n’est pas forcément une bonne idée.
Cependant, l’intérêt du 443 réside dans le fait qu’il est très rarement bloqué sur les réseaux de type hotspot. Aussi, si vous disposez de plusieurs adresses IP publiques, utilisez en une pour le VPN et laissez cette configuration sur le port 443.
Le réglage se trouve dans Configuration > Remote Access VPN > Network (Client) Access > AnyConnect Connection Profiles et dans la partie haute de la zone principale, vous avez les interfaces en écoute ainsi que les réglages de port. J’ai configuré le VPN SSL pour utiliser le port 60443. Pour ce faire il faut d’abord décocher tous les ports en écoute.
J’en ai également profité pour activer l’écoute sur l’interface interne, inutile en production et non fonctionnelle si vous êtes en écoute sur le 443, mais c’est plus simple pour le debug, cela évite de devoir être à l’extérieur.
Ajout des autres clients Cisco AnyConnect
Vous vous êtes certainement aperçu que lors de la configuration initiale du VPN SSL, nous avons choisi de ne fournir que le paquet OS X Intel pour le client Cisco AnyConnect, vous pouvez maintenant charger les autres paquets dans Configuration > Remote Access VPN > Network (Client) Access > AnyConnect Client Settings.
Ces paquets permettent l’installation automatique du client VPN Cisco sur les machines non compatible via un simple accès à la page web du routeur. Cependant pour que cela fonctionne sous OS X, il faut que le poste client dispose de Java, ce qui est de plus en plus rare de nos jours.
Les utilisateurs
Maintenant, il va falloir fournir une liste d’utilisateurs autorisés à demander un certificat, cela se trouve dans Configuration > Remote Access VPN > Certificate Management > Local Certificate Authority > Manage User Database. Chaque utilisateur est défini par un identifiant, un e-mail pour recevoir son code temporaire pour la génération du certificat ainsi qu’un nom unique.
J’utilise ici des identités associées à des utilisateurs, en production il est mieux d’associer cela aux machines, et ainsi pouvoir bloquer l’accès du téléphone volé, mais pas de l’ordinateur toujours en possession de l’utilisateur.
Lorsque vous appuyez sur le bouton d’envois, l’e-mail envoyé à l’utilisateur ressemble à ceci :
You have been granted access to enroll for a certificate.
The credentials below can be used to obtain your certificate.Username: ygini
One-time Password: 10F7BE6F1B5AB04E
Enrollment is allowed until: 17:17:07 CEDT Fri Apr 12 2013NOTE: The one-time password is also used as the passphrase to unlock the
certificate file.Please visit the following site to obtain your certificate:
https://gateway:60443/+CSCOCA+/enroll.html
You may be asked to verify the fingerprint/thumbprint of the CA certificate
during installation of the certificates. The fingerprint/thumbprint
should be:
MD5: 9F5BF318 62B10D89 9226A05F 1C324BE4
SHA1: D7D10166 F8B4BE3B 8B74D006 64D9EB05 A00224E4
Vous pouvez aussi récupérer le code OTP depuis ASDM par le bouton adéquat, utile si c’est vous qui génèrerez le certificat de l’utilisateur.
Maintenant que vos identités sont créées, il ne vous reste qu’à connecter vos clients.
Connexion d’un client
Méthode 1 : Installation et configuration manuelle de Cisco AnyConnect
Pour commencer, nous allons utiliser la méthode la plus simple : l’installation de Cisco AnyConnect sur vos Mac et sa configuration manuelle.
Récupération et installation de Cisco AnyConnect
Premièrement, vous devez vous procurer Cisco AnyConnect pour Mac et le déployer sur vos machines clientes. Si vous avez un contrat de support, vous pouvez récupérer le logiciel à jour sur le site de Cisco, sinon il vous faudra le récupérer sur votre ASA.
Pour ce faire, allez dans ASDM puis dans le menu Tool vous trouverez un outil nommé File Management. Cet outil permet de gérer les fichiers présents sur le disque du Cisco. Dans sa barre d’outils sur le haut, faites File Transfert puis Between Local PC and Flash pour échanger des fichiers entre votre machine et le Cisco.
Utilisez les arborescences et le bouton avec une flèche pointant sur la gauche pour récupérer le fichier anyconnect correspondant à votre Mac.
Une fois récupéré sur votre disque, changez l’extension du fichier pkg pour mettre zip à la place, puis décompressez avec le Finder votre archive.
Dans le dossier ainsi créé, vous trouverez un sous-dossier binaries avec à l’intérieur, un fichier au type plus connu, vpnsetup.dmg. Il contient le package OS X d’installation du client Cisco que vous allez pouvoir déployer à l’avance sur toutes vos machines par le moyen de votre choix.
Configuration par l’utilisateur de Cisco AnyConnect
L’utilisateur ayant reçu dans sa boite e-mail un identifiant et un code OTP permettant la génération de son certificat de sécurité, il va devoir lancer le client Cisco AnyConnect pour faire une première connexion permettant la récupération de son certificat.
Comme vous le voyez, l’utilisateur va devoir spécifier le port 60443 pour que la connexion fonctionne, une mise à disposition de plusieurs IP publiques par votre FAI éviterait ce genre de problème.
Si vous avez utilisé un certificat auto-signé pour sécuriser votre routeur, un message d’avertissement va s’afficher durant la connexion. Ce n’est pas vraiment une situation acceptable pour un environnement de production.
Si aucun certificat n’est trouvé pour réussir l’authentification, AnyConnect vous proposera de le récupérer pour vous.
Pour cela il faudra entrer les codes d’identification fournis par e-mail. Le certificat généré pour vous sera enregistré dans votre trousseau d’accès.
Vous êtes maintenant connecté au VPN. Au détail de l’interface graphique près, la procédure est la même sur iOS, y compris pour la récupération du certificat.
Méthode 2 : Configuration automatique via MDM
Récupération du certificat utilisateur
Dans ce scénario ce n’est pas l’utilisateur qui va récupérer son certificat, mais vous qui allez effectuer l’opération pour lui et lui fournir dans un profil de configuration. Pour cela, connectez-vous à https://FQDN.ou.IP.de.votre.cisco:60443/+CSCOCA+/enroll.html pour vous identifier avec le code OTP de l’utilisateur (vous pouvez le récupérer via ASDM) et ainsi obtenir le certificat de l’utilisateur.
Cela va télécharger un fichier p12 qui peut être déchiffré avec le même code OTP utilisé pour l’authentification.
Note : utilisez Safari pour cette opération, les navigateurs comme Firefox ayant tendance à considérer que le certificat leur est destiné, or vous avez besoin du p12 directement pour la suite.
Configuration des terminaux
Chaque client mobile devra être équipé de Cisco AnyConnect au préalable, pour iOS vous pourrez le télécharger sur l’AppStore.
La configuration du MDM est simple, ici je vous montre un exemple avec le Profile Manager d’Apple mais l’idée reste la même sur les autres systèmes. Pour les besoins de l’article, je crée un profil en self-service, mais cela peut tout aussi bien être une configuration automatique.
On commence par charger le certificat de l’utilisateur ainsi que sa clef de déchiffrement.
Puis, dans les réglages VPN, on ajoute la configuration de notre service avec les bons numéros de port et bon groupe d’accès. Sur la fin de la configuration vous aurez la possibilité de configurer les domaines cible pour le VPN on Demand.
Note : je n’ai réussi à faire marcher la configuration automatique que sur iOS. Impossible, même avec un système à jour, de réussir la même chose sur OS X. L’interface VPN monte dans les préférences système, mais il est impossible de se connecter. Si vous avez des idées, je suis preneur.
Merci pour vos excellents tutoriels.
Même si je n’ai pas de routeur cisco, j’apprécie la clarté de vos explications. Vos tutos sont toujours une mine d’informations pour l’amateur/béotien que je suis.
Du coup j’en ai pour quelques semaines de lecture….