<> = Généralités = == Un VPN c'est quoi..? == Un VPN permet d'étendre la zone de sécurité du système d'information interne à travers un réseau non sécurisé (de type Internet). Cela permet à un poste non physiquement connecté sur le réseau local d'être considéré comme une machine branchée directement au sein de celui-ci. == Fonctionnement == La connexion à un VPN se déroule comme suit : * Lancement d'une application de connexion sur l'ordinateur se trouvant en dehors du réseau du SI. * L'application se connecte au serveur gérant les accès aux VPN : pendant cette phase, l'application et le serveur échangent les informations nécessaires à vérifier l'identité du client et son droit ou non droit à se connecter au réseau VPN. * Une fois l'authentification effectuée, le serveur et l'application mettent en place une connexion point à point entre eux, dans laquelle l'ensemble des données circulant sont cryptées. * L'ordinateur externe peut alors accéder à l'ensemble des données de l'entreprises dont le contenu est accessible via les règles mises en place par l'administrateur de la sécurité. Différentes technologies existent pour pouvoir se connecter à distance via un VPN. Ces techniques s'appuient sur l'un des protocoles de tunnelisation existant (IPSec, PPTP, SecuRemote, ssh...) == Pré-requis == * Une adresse IP joignable du réseau du client * Un port d'écoute non filtré [Attention aux FW] * Une méthode permettant de générer des certificats SSL (souvent fournit avec openvpn) == Un tunnel VPN simple et TEMPORAIRE avec SSH == === Sur le serveur ssh === Sur le serveur sshd (enfin la machine avec laquelle vous voulez établire un tunnel ssh), dans la fichier " /etc/ssh/sshd_config" il faut activer ses deux options : {{{ PermitRootLogin yes PermitTunnel yes }}} et redémarrer le service sshd {{{ /etc/init.d/ssh restart }}} === Sur le client === {{{ ssh -f -w 0:1 ip_serv true }}} Cette commande va initialiser une interface sur chaque machine : tun0 sur le client et tun1 sur le serveur ssh. Les numéros sont tout à fait arbitraires et n'on aucune significations réelle. === Sur les deux machines === {{{ ip addr show tun0 #pour voir que l'interface existe bien }}} Cette commande va permettre de vérifier qu'une unterface tunX a été bien créer === Configurer l'interface client === {{{ ifconfig tun0 192.168.1.1 pointopoint 192.168.1.2 netmask 255.255.255.252 # ou ip addr add 192.168.1.1/32 peer 192.168.1.2 dev tun0 }}} === Configurer l'interface serveur === {{{ ifconfig tun1 192.168.1.2 pointopoint 192.168.1.1 netmask 255.255.255.252 # ou ip addr add 192.168.1.2/32 peer 192.168.1.1 dev tun1 }}} * Sur une machine et pinguer l'autre pour voir... ca devrait marcher. * Ensuite, vous pouvez rajouter des des options de routages pour donner accès aux sous réseaux connecter aux 2 machines .. = OpenVPN = == Installation == Simple : apt-get install openvpn Fichiers de configuration : * /etc/openvpn * /etc/default/openvpn * /etc/init.d/openvpn == Quelques choses préalables == Il faut avant de lancer le serveurs générer les pairs de clés nécessaires pour la certification des clés du client, la sécurisation de la connexion etc. Sous débian, les outils nécessaires sont installés dans "/usr/share/doc/openvpn/examples/easy-rsa/2.0". Donc je recommande de faire une copie de ce répertoire dans /root : {{{ cp -av /usr/share/doc/openvpn/examples/easy-rsa/2.0 /root/ }}} === Variables === * Adaptez le contenu du fichier "vars" dans le répertoire "easy-rsa" qui est dans root à vos données locales en modifiant les lignes suivantes : {{{ export KEY_COUNTRY="BJ" export KEY_PROVINCE="Ctn" export KEY_CITY="COTONOU" export KEY_ORG="AUF" export KEY_EMAIL="technique@bj.auf.org" }}} * Rendre le fichier excécutable et remplir les variables de session {{{ chmod +x vars ./vars }}} === Procéder au grand nettoyage === {{{ ./clean-all #Attention car le script supprime le contenu du répertoire keys qui se trouve dans le répertoire courant }}} === Création du CA === {{{ ./build-ca }}} et ça doit donner un truc comme cela {{{ Generating a 1024 bit RSA private key ...++++++ ................++++++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [BJ]: State or Province Name (full name) [Ctn]: Locality Name (eg, city) [COTONOU]: Organization Name (eg, company) [AUF]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [TEST CA]: RTL Name []: Email Address [technique@bj.refer.org]: }}} On obtient une clé "ca.key" Uniquement accessible à root et une demande de signature pour le certificat de l'autorité de certification === Génération du Diffie-Hellman === {{{ ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 | }}} == Génération des clés == Voila, à cette étape, on est prêt à signer des clés. On va commencer par le serveur lui même === Serveur === {{{ ./build-key-server server # Qui va vous générer le clé, une demande der certification et signer la clé rien que pour vous }}} '''Il Faut répondre oui aux 2 dernières questions''' === Clients === Ensuite on va générer des clés pour les clients pour X de 1 à n {{{ ./build-key client_X }}} Les cles se trouvent dans le répertoirte "keys" == Configuration du serveur == Cela se passe dans "/etc/openvpn/openvpn.con". Voici un exemple type avec quelques commentaires pour expliquer ce que chaque chose fait : {{{ #local XXX.XXX.XXX.XXX # Adresse IP d'écoute Commenter pour une écoute sur toutes les interfaces port 1194 # Port d'écoute #nobind # Permet de dire au serveur de en pas écouter sur un port spécifique A ne pas utiliser avec l'option "port " proto udp # Protocol utilisé (TCP ou UDP) dev tun # Permet de créer des tunnels IP routés alors que "tap" permet de créer des tunnels ethernet ??? ca /root/easy-rsa/keys/ca.crt cert /root/keys/easy-rsa/test.crt key /root/keys/easy-rsa/test.key # Fichier à concerver secret dh /root/keys/easy-rsa/dh1024.pem # Localisation des paramètres Diffie-Hellman server 10.25.2.0 255.255.255.0 # Le sous réseau de notre VPN #ifconfig-pool-persist ipp.txt # Enregistres les associations entre les clients VPN et les adresses IP reçues. En cas de redémarrage après un crash, il permet aux clients de retrouver leurs adresses IP précédentes user nobody group nobody #push "redirect-gateway" # Change la route par défaut des clients via le VPN. #push "dhcp-option DNS 10.25.1.1" # Une option très intéressante qui permet de changer le serveur DNS vers un serveur accessible du VPN #duplicate-cn # décommenter pour permettre à plusieurs client de présenter le même certificat keepalive 10 30 # Ping toute les 10 sec et considère la liaison morte si aucune réponse n'est recue au bout de 30 sec comp-lzo # Active la compression LZO sur la liaison VPN max-clients 20 # Nombre maximum de clients log openvpn.log verb 4 # up /etc/openvpn/cmd/up.sh # Lors de la connexion, ce script est excécuté #ccd-exclusive # Permet d'imposer des conditions particulières aux xlients. #client-config-dir /etc/openvpn/ccd #persist-key #persist-tun #status /var/state/openvpn.status }}} Tout ce qui est commenté n'est pas encore utile. Allez on va lancer en regardant ce que le serveur nous dit : {{{ /etc/init.d/openvpn start }}} et ensuite un {{{ netstat -laput }}}. Notez qu'il y a un serveur qui écoute sur le port 1194. Regarder aussi les logs.. == Configuration du client == === Installation pure de openvpn sur debian like === {{{ apt-get install openvpn }}} Alors ici ce qui est bien c'est que vous pouvez configurer openvpn pour se connecter à plusieurs réseaux vpn.. Chacun avec sa configuration dé"fini dans un fichier dans "/etc/openvpn/EXAMPLE_CONFIG1.conf" : {{{ cd /etc/openvpn; touch mon_vpn1.conf vi mon_vpn1.conf }}} Dedans rajouter les informations concernant le VPN auquel vous voulez vous connecter : {{{ client # fonctionnement en mode client remote XXX.XXX.XXX.XXX # adresse ip du serveur VPN port 1194 #Port d'écoute du serveur VON #nobind # a utiliser si l'option nobind a été activer sur le serveurr dev tun # conformément à la configuration du serveur comp-lzo # conformément à la configuration du serveur # SSL Configuration ca /home/toto/keys/ca.crt cert /home/toto/keys/client.crt key /home/toto/keys/client.key # Logging configuration log /var/log/openvpn.log verb 4 }}} Bon vous aurez notez que on a vraiment besoin de trois fichiers pour cela : * ca.crt qui est récupérer du serveur * client.crt qui le certificat du client signé par le serveur * client.keys qui est la clé du client Bon il y a une longue littérature sur comment transmettre ces informations de façon sécurisé pour les préserver de toutes agressions. Moi, je suggère ssh, mais il y a d'autre façons ... A vous de voir Ensuite dans "/etc/default/openvpn" il est important de faire : {{{ AUTOSTART="none" }}} et ... {{{ /etc/init.d/openvpn start mon_vpn }}} === Installation pure de openvpn windows/mac === Who cares ...? == Références == * http://openvpn.net/index.php/open-source/documentation/howto.html * http://openvpn.se/install.txt * http://doc.opensuse.org/products/draft/SLES/SLES-security_sd_draft/cha.security.vpnserver.html * http://mantis.free.fr/articles/diffie.htm