= Création d'un tunnel VPN = <> Voici un petit guide pour installer un serveur et un client OpenVPN, qui correspond à ce que j'ai (CédricProtière) mis en oeuvre à Cotonou, en utilisant http://openvpn.net/howto.html et la patience de JérômeSantini. = Sur le serveur = == Initialisation == * Installer openvpn {{{ aptitude install openvpn }}} * Copier le contenu du répertoire `/usr/share/doc/openvpn/examples/easy-rsa` dans un nouveau répertoire `/etc/openvpn` afin de ne rien perdre lors d'une mise à jour d'openvpn (et puis c'est mieux rangé) * Modifier `/etc/openvpn/vars` -pour Cotonou : {{{ export KEY_COUNTRY=BJ export KEY_PROVINCE=Atlantique export KEY_CITY=Cotonou export KEY_ORG="AUF" export KEY_EMAIL="root+openvpn@bj.refer.org" }}} == Création des certificats et des clés == * Initialiser la PKI (Public Key Infrastructure) ; créer le certificat et la clé du CA (Certificate Authority) maître : cf http://openvpn.net/howto.html#pki {{{ cd /etc/openvpn/easy-rsa . vars #l'espace après le point est important !!!! ./clean-all # A ne faire que la première fois ! ./build-ca }}} * Créer la paire certificat/clé du serveur : {{{ ./build-key-server server }}} (__/!\__ A la question '''Common Name''', répondre `server` ; '''"Sign the certificate? [y/n]"''' y ; '''"1 out of 1 certificate requests certified, commit? [y/n]"''' y) * Générer une paire par client : {{{ ./build-key sysadmin }}} par exemple (bien choisir '''''sysadmin''''' comme '''Common Name''') pour créer la paire qui ira sur le client sysadmin * Générer les paramètres Diffie Hellman : {{{ ./build-dh }}} == Initialisation du fichier de configuration == * Copier '''''/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz''''' dans '''''/etc/openvpn''''' et le décompresser '''''gunzip /etc/openvpn/server.conf.gz''''') * Modifier les paramètres ca, cert, key, dh : {{{ ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key dh /etc/openvpn/keys/dh1024.pem server 10.25.2.0 255.255.255.0 #Je choisis ici d'avoir comme RPV 10.25.2.0/24 push "route 10.0.0.0 255.0.0.0" #pour ajouter la route 10.0.0.0/8 }}} == Mettre à jour le filtrage == * Ajouter les lignes suivantes dans le fichier de configuration du filtrage (par exemple '''''/etc/network/firewall-install''''') : {{{ #openvpn : on accepte openvpn (depuis poste de l'admin) # nfs-cotonou a cause de snat, sinon ca devrait etre l'ip du poste : $IPT -A INPUT -p udp --dport 1194 -s 81.91.236.4 -j ACCEPT $IPT -A OUTPUT -p udp --dport 1194 -d 81.91.236.4 -j ACCEPT # Allow TUN interface connections to OpenVPN server ${IPT} -A INPUT -i tun+ -j ACCEPT # Allow TUN interface connections to be forwarded through other interfaces ${IPT} -A FORWARD -i tun+ -j ACCEPT }}} == Tester == * '''''sudo openvpn /etc/openvpn/server.conf''''' devrait donner quelque chose comme : {{{ Thu Nov 23 17:20:37 2006 OpenVPN 2.0 i386-pc-linux [SSL] [LZO] [EPOLL] built on Apr 6 2006 Thu Nov 23 17:20:37 2006 Diffie-Hellman initialized with 1024 bit key Thu Nov 23 17:20:37 2006 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Thu Nov 23 17:20:37 2006 TUN/TAP device tun0 opened Thu Nov 23 17:20:37 2006 /sbin/ifconfig tun0 10.25.2.1 pointopoint 10.25.2.2 mtu 1500 Thu Nov 23 17:20:37 2006 /sbin/route add -net 10.25.2.0 netmask 255.255.255.0 gw 10.25.2.2 Thu Nov 23 17:20:37 2006 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:23 ET:0 EL:0 AF:3/1 ] Thu Nov 23 17:20:37 2006 GID set to openvpn Thu Nov 23 17:20:37 2006 UID set to nobody Thu Nov 23 17:20:37 2006 UDPv4 link local (bound): [undef]:1194 Thu Nov 23 17:20:37 2006 UDPv4 link remote: [undef] Thu Nov 23 17:20:37 2006 MULTI: multi_init called, r=256 v=256 Thu Nov 23 17:20:37 2006 IFCONFIG POOL: base=10.25.2.4 size=62 Thu Nov 23 17:20:37 2006 IFCONFIG POOL LIST Thu Nov 23 17:20:37 2006 Initialization Sequence Completed }}} = Sur le client = * Installer le paquet openvpn * Récupérer la pair clé/certificat du client ainsi que le CA maître générés sur le serveur (/!\ ce n'est pas optimal : il serait mieux de créer les pairs de chaque client directement sur le client et pas sur le serveur) * Récupérer '''''client.conf''''' dans '''''/usr/share/doc/openvpn/examples/sample-config-files''''' et configurer les paramètres ca, cert, key, remote : {{{ remote 81.91.236.1 1194 ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/sysadmin.crt key /etc/openvpn/keys/sysadmin.key }}} * Tester : '''''sudo openvpn /etc/openvpn/client.conf''''' doit vous donner un affichage du genre : {{{ Fri Nov 24 10:04:12 2006 OpenVPN 2.0.6 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Apr 10 2006 Fri Nov 24 10:04:12 2006 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA. OpenVPN 2.0-beta16 and earlier used 5000 as the default port. Fri Nov 24 10:04:12 2006 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info. Fri Nov 24 10:04:12 2006 LZO compression initialized Fri Nov 24 10:04:12 2006 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Fri Nov 24 10:04:12 2006 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Fri Nov 24 10:04:12 2006 Local Options hash (VER=V4): '41690919' Fri Nov 24 10:04:12 2006 Expected Remote Options hash (VER=V4): '530fdded' Fri Nov 24 10:04:12 2006 UDPv4 link local: [undef] Fri Nov 24 10:04:12 2006 UDPv4 link remote: 81.91.236.1:1194 Fri Nov 24 10:04:12 2006 TLS: Initial packet from 81.91.236.1:1194, sid=c77a8b68 48e5b272 Fri Nov 24 10:04:12 2006 VERIFY OK: depth=1, /C=BJ/ST=Atlantique/L=Cotonou/O=AUF/OU=CNFC/CN=fw-cotonou/emailAddress=root_openvpn@bj.refer.org Fri Nov 24 10:04:12 2006 VERIFY OK: depth=0, /C=BJ/ST=Atlantique/O=AUF/OU=CNFC/CN=server/emailAddress=root_openvpn@bj.refer.org Fri Nov 24 10:04:12 2006 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Fri Nov 24 10:04:12 2006 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Fri Nov 24 10:04:12 2006 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Fri Nov 24 10:04:12 2006 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Fri Nov 24 10:04:12 2006 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA Fri Nov 24 10:04:12 2006 [server] Peer Connection Initiated with 81.91.236.1:1194 Fri Nov 24 10:04:13 2006 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1) Fri Nov 24 10:04:13 2006 PUSH: Received control message: 'PUSH_REPLY,route 10.0.0.0 255.0.0.0,route 10.25.2.1,ping 10,ping-restart 120,ifconfig 10.25.2.6 10.25.2.5' Fri Nov 24 10:04:13 2006 OPTIONS IMPORT: timers and/or timeouts modified Fri Nov 24 10:04:13 2006 OPTIONS IMPORT: --ifconfig/up options modified Fri Nov 24 10:04:13 2006 OPTIONS IMPORT: route options modified Fri Nov 24 10:04:13 2006 TUN/TAP device tun0 opened Fri Nov 24 10:04:13 2006 ifconfig tun0 10.25.2.6 pointopoint 10.25.2.5 mtu 1500 Fri Nov 24 10:04:13 2006 route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.25.2.5 Fri Nov 24 10:04:13 2006 route add -net 10.25.2.1 netmask 255.255.255.255 gw 10.25.2.5 Fri Nov 24 10:04:13 2006 Initialization Sequence Completed }}} == Finalisation == * Le paquet openvpn a déjà installé '''''/etc/init.d/openvpn''''' qui démarrera automatiquement le serveur OpenVPN en utilisant ce qu'il trouve comme fichier de configuration dans '''''/etc/openvpn/*.conf''''' au prochain démarrage (ou avec un simple '''''sudo invoke-rc.d openvpn start''''') * Il faut maintenant spécifier automatiquement dans votre '''''resolv.conf''''' que le serveur de nom ne doit pas être récupéré par dhcp : * Installer le paquet '''''resolvconf''''' * Ajouter les lignes suivantes dans /etc/network/interfaces : {{{ dns-nameservers 10.25.1.1 dns-search refer.bj}}} * Empêcher le client DHCP de récupérer les serveurs de nom et le search : supprimer les requêtes {{{ domain-name, domain-name-servers }}} de '''''/etc/dhcp3/dhclient.conf''''' * Redémarrer les interfaces : '''''sudo invoke-rc.d networking restart'''''