Table des matières

, ,

VPNC ou « libérer » sa connexion VPN Cisco Systems®

On peut déjà constater l'usage par des étudiants et des universitaires d'un client VPN Libre compatible avec le Client VPN Cisco Systems® : le Client VPN Vpnc.

Comparé au client VPN Cisco Systems®, la procédure d'installation est plus simple. Mais l'avantage principal réside dans le fait que la connexion VPN reste fonctionnelle même après les mises à jour du noyau système, contrairement au Client VPN Cisco Systems®.

À titre d'information, nous décrivons une procédure générique pour Debian/Ubuntu issue de diverses sources disponibles sur Internet (sites Web d'universités, forums, blogs, etc.).

Installation

Installez le paquet vpnc

Pour utiliser l'interface graphique dans les paramètres de gnome installez également network-manager-vpnc-gnome

Création du fichier de conf

Votre administrateur vous a peut-être fournis les infos qui composent le

mon_fichier_vpnc.conf
IPSec gateway <gateway.to.use>
IPSec ID <groupname>
IPSec secret <passwordforgroup>
Xauth username <myusername>
Xauth password <mypassword>

puis configuration_du_client_vpn_vpnc

Conversion d'un profil Cisco Systems® en profil Vpnc

Le poste étant connecté à Internet, on place le fichier-profil Cisco Systems® avec l'extension « .pcf » correspondant au fournisseur de réseau VPN dans son Dossier personnel (le répertoire /home/NOM_DE_L'UTILISATEUR ). Puis on lance un terminal et on tape :

/usr/share/vpnc/pcf2vpnc NOM_DU_PROFIL_CISCO.pcf
Si vous avez comme retour 'bash: usr/share/vpnc/pcf2vpnc: Aucun fichier ou dossier de ce type', essayez cette commande
/usr/bin/pcf2vpnc 'Chemin/et/NOM_DU_PROFIL_CISCO.pcf'

Le résultat ressemble a ceci :

## generated by pcf2vpnc
IPSec ID XXXXX
IPSec gateway XXX.XXX.XXX.XXX
IPSec secret XXXXXXXX

IKE Authmode psk

## To add your username and password,
## use the following lines:
# Xauth username <your username>
# Xauth password <your password>
Parfois, la ligne IPSec gateway est donné en adresse du site Web (avec des lettres), si ça ne marche pas, on la convertit alors en adresse IP en ouvrant un Terminal puis en tapant (connexion Internet requise…) :
host ADRESSE_DU_SITE_WEB
En dé-commentant (enlever le symbole #) les lignes Xauth et en remplaçant <your username> par votre identifiant et <your password> par votre mot de passe vous n'aurez plus à les saisir à chaque connexion, mais cela constitue aussi un trou de sécurité (car ils apparaissent "en clair" sur votre ordinateur et uniquement protégé par votre mot de passe administrateur pour les visualiser. S'ils servent à d'autres accès VPN plus sensibles qu'une connexion Internet, c'est potentiellement dangereux. Sécurité ou ergonomie : au choix de chacun.

On sauvegarde le résultat dans un fichier texte simple en lui rajoutant une extension « .conf » : le profil Vpnc est créé.

Pour la suite de ce tutoriel, nous nommerons ce fichier "vpn.conf".

Avec les versions récentes de vpnc, si vous avez le message:

vpnc: no response from target

vous pouvez améliorer vos chances de connexion en ajoutant :

NAT Traversal Mode cisco-udp

à la fin du fichier vpn.conf

Configuration du Client VPN Vpnc

On place en tant que super-utilisateur le fichier-profil « vpn.conf » dans le répertoire « /etc/vpnc/ ».

Une commande dans un Terminal permet de copier simplement le fichier vpn.conf depuis son Dossier personnel (le répertoire /home/NOM_DE_L'UTILISATEUR ).

sudo cp vpn.conf /etc/vpnc/

Lancement du Client VPN Vpnc

Connexion Manuelle

Le client Vpnc peut être lancé en tapant ces lignes dans un Terminal :

Connexion "clic-clic"

On crée un Lanceur-raccourcis en cliquant avec le bouton droit de la souris sur le bureau puis « Créer un Lanceur » puis en entrant comme commande :

gksudo "xterm -e vpnc-connect --no-detach vpn.conf"

Quand on clique sur le lanceur-raccourcis une demande de mot de passe super-utilisateur apparaît puis un Terminal avec les demandes d'identifiant et mot de passe VPN (le mot de passe ne s'affiche pas quand on le tape, c'est normal). Valider à chaque fois en tapant sur Entrée. La connexion est établie si la phrase "VPNC started in foreground…" s'affiche et elle se termine si l'on ferme la fenêtre du Terminal.

Connexion "clic-clic intelligent"

Cette solution permet de lancer une déconnexion avant de relancer une nouvelle connexion, notamment utile si votre débit est faible et que la connexion est instable. Bien sûr vous pouvez ajouter d'autres commandes dans ce script.

On crée un dossier vpn et le fichier de connexion dans le répertoire home:

mkdir ~/vpn && touch ~/vpn/vpn.sh

Ensuite on remplit le fichier texte contenant les commandes :

echo -e 'vpnc-disconnect\nxterm -e vpnc-connect vpn.conf\n' | tee ~/vpn/vpn.sh

pour voir le résultat :

cat ~/vpn/vpn.sh

Puis on crée un Lanceur-raccourcis en cliquant avec le bouton droit de la souris sur le bureau puis « Créer un Lanceur » puis en entrant comme commande :

gksudo bash /home/NOM_DE_VOTRE_SESSION/vpn/vpn.sh

(gksudo est remplacé par kdesu si on est sous KDE)

Connexion via Network Manager - DRAFT

On utilise Kvpnc ou l'extension VPN de Network-manager (#aptitude install network-manager-vpnc)

NB : cette dernière solution peut ne pas fonctionner avec certains systèmes et pilotes de cartes WIFI.

Après avoir installé vpnc et converti le profil Cisco System®, ouvrir le Network-manager et aller dans l'onglet vpn.

On a uniquement besoin des informations données dans le terminal, l'étape de sauvegarde n'est donc pas nécessaire. Toutes ces informations sont aussi dans le fichier *.pcf, mais sous des noms différents.

Cliquer sur Ajouter

Dans le menu déroulant choisir VPN Compatible Cisco (vpnc)

Enter un nom voulu pour la connexion vpn et compléter en utilisant les informations récoltées dans le terminal :

Dans le second onglet, Paramètre IPv4, sous ID client DHCP, entrer : dh2

Clquer sur Valider et c'est configuré.

Pour se connecter, il suffit d'un petit clic gauche sur l'icône de connexion, et choisir la connexion vpn fraîchement configurée.

Par défaut, le network manager efface les mots de passe, il faudra soit les entrer à chaque tentative de connexion, soit les sauvegarder dans le trousseau.
Si vous obtenez le message "Pas de secrets VPN valides" et que vous utilisez une connexion de type VPNC vous devez patcher le fichier de configuration du network-manager (dans /etc/dbus-1/system.d/) avec le fichier suivant et redémarrer NetworkManager (sudo pkill -9 NetworkManager puis sudo NetworkManager)
nm-vpnc-service.patch
--- nm-vpnc-service.conf.fixed	2009-04-18 17:56:45.000000000 -0500
+++ nm-vpnc-service.conf	2009-04-18 17:57:37.000000000 -0500
@@ -6,6 +6,10 @@
 		<allow own="org.freedesktop.NetworkManager.vpnc"/>
 		<allow send_destination="org.freedesktop.NetworkManager.vpnc"/>
 	</policy>
+	<policy user="at_console">
+		<allow own="org.freedesktop.NetworkManager.vpnc"/>
+		<allow send_destination="org.freedesktop.NetworkManager.vpnc"/>
+	</policy>
 	<policy context="default">
 		<deny own="org.freedesktop.NetworkManager.vpnc"/>
 		<deny send_destination="org.freedesktop.NetworkManager.vpnc"/>
Si la connexion échoue, c'est que les paramètres Méthode de chiffrement et/ou Traversée du NAT ne sont pas configurés correctement. Le plus simple est d'utiliser le protocole de connexion manuelle, suivant l'erreur retournée, on peut déterminer ces paramètres.
vpnc-connect: peer selected (single) DES as "encrytion" method.
This algorithm is considered to weak today
If your vpn concentrator admin still insists on using DES
use the "--enable-1des" option.

Utiliser l'option Faible dans Méthode de chiffrement

use the "--enable-no-encryption" option.

Utiliser l'option Aucun dans Méthode de chiffrement

use the "--natt-mode cisco-udp" option.

Utiliser l'option UDP Cisco dans Traversée du NAT

use the "--natt-mode none" option.

Utiliser l'option Désactivé dans Traversée du NAT

Tous ces paramètres sont aussi dans le fichier *.pcf, mais certains (tels le mot de passe groupe) sont cryptés.

Problème de connexion: Deux mots de passe demandes

Il se peut que le logiciel vpnc demande deux mots de passe :

root@pc:/etc/vpnc# vpnc-connect vpn.conf 
Enter username for xxx.xxx.xxx.xxx: xxxx
Enter password for xxxx@xxx.xxx.xxx.xxx: 
Password for VPN xxxx@xxx.xxx.xxx.xxx: 
Password for VPN xxxx@xxx.xxx.xxx.xxx: 
vpnc-connect: authentication unsuccessful

Ceci veut dire que vous avez fait une erreur dans votre login ou mot de passe.

Exemple d'erreur (un peu tordue) de login :

Sur un domaine Windows, il faut parfois écrire dans le fichier de conf.

Xauth username nom_du_domaine\utilisateur

au lieu et place de

Xauth username utilisateur
Domain nom_du_domaine

Problèmes avec firestarter

L'interface graphique de firestarter ne permet pas d'autoriser les flux lorsque vpnc est lancé. Il faut modifier le fichier /etc/firestarter/user-pre pour qu'il contienne les commandes iptables suivantes:

iptables -A INPUT -j ACCEPT -s w.x.y.z -p esp
iptables -A INPUT -j ACCEPT -s w.x.y.z -p udp -m multiport --sports isakmp,10000
iptables -A INPUT -j ACCEPT -i tun+
iptables -A OUTPUT -j ACCEPT -d w.x.y.z -p esp
iptables -A OUTPUT -j ACCEPT -d w.x.y.z -p udp -m multiport --dports isakmp,10000
iptables -A OUTPUT -j ACCEPT -o tun+

il faut remplacer w.x.y.z par l'adresse IP de votre passerelle IPSEC. Il faut autoriser le protocole esp (données encryptées) dans les 2 sens. Il faut autoriser IKE (isakmp) dans le sens PC→passerelle. Certaines configurations de passerelles utilisent le port UDP/10000 pour encapsuler le flux ESP. Au lancement de firestarter, ces commandes sont prises en compte, et les connexions IPSEC sont autorisées.

Connexion à l'ouverture de session

Dans un cas courant, il peut être utile de se connecter automatiquement à l'ouverture de la session utilisateur de la machine (en supposant que l'interface réseau est déjà initialisée). Pour atteindre cet objectif, une des solutions consiste à créer un petit programme qui sera exécuté en root par l'utilisation du bit setuid. Son rôle est de placer aussi l'EUID, le GID et l'EGID à 0 (root), de sorte à pouvoir lancer vpnc à partir de l'espace utilisateur.

Attention : ce programme sera exécuté en root, ne pas l'utiliser sans prendre toutes les précautions nécessaires

Le code source du programme, baptisé usvpnc pour l'occasion (User-Space vpnc), est le suivant :

/*******************************************************************************
 *
 * Lanceur du client VPN Cisco vpnc en user-space
 * Les options en ligne de commande sont passees directement a vpnc
 *
 * Le binaire resultant de la compilation de ce code doit appartenir a
 * l'utilisateur root et avoir son bit setuid a 1.
 *
 * == Rappels ==
 * 
 * Pour compiler:                      gcc -Wall -o usvpnc usvpnc.c
 *
 * Pour changer les droits: (en root)  chown root:root usvpnc
 *                                     chmod u+s usvpnc
 *
 * Il est ensuite possible de placer l'exécutable dans /usr/sbin (pour faire
 * plus propre), puis de l'ajouter dans Système->Préférences->Session (sous
 * Gnome).
 * 
 ******************************************************************************/

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(int argc, char **argv)
{
	// UID est deja a 0 (=root) avec le bit setuid sur le binaire
	
	// placement de UID, GID et EGID a 0 aussi
	setuid(0);
	setgid(0);
	setegid(0);
	
	// positionnement de argv[0] a la valeur "vpnc"
	argv[0] = "vpnc";
	
	// execution de vpnc
	execvp("vpnc", argv);
	
	// execute si le exec() s'est mal termine
	fprintf(stderr, "Impossible d'executer vpnc\n");
	
	return EXIT_FAILURE;
}

Copiez ce code dans un fichier usvpnc.c et ouvrez un terminal. Si vous n'avez pas le paquet build-essential, installez-le : . Puis, placez vous dans le répertoire ou vous avez créé usvpnc.c et compilez-le avec la commande suivante :

gcc -Wall -o usvpnc usvpnc.c

Passez ensuite dans un terminal root et placez les droits adaptés sur le fichier :

chown root:root usvpnc
chmod u=rws,g=rx,o=rx usvpnc

Au passage, vous pouvez le copier dans un des répertoires standard :

cp usvpnc /usr/local/sbin
chmod u=rws,g=rx,o=rx /usr/local/sbin/usvpnc

Et voila ! Vous pouvez désormais utiliser la commande usvpnc à partir d'un terminal utilisateur (non administrateur) avec les même arguments que la commande vpnc (ils sont passés de manière transparente). Une des utilisations possible est de configurer Gnome pour lancer la connexion VPN automatiquement au démarrage de la session (Système→Préférences→Session→Ajouter) :


Contributeurs : andatiep, NerOlph, Mike17, wsmind, guigouz, …