Openvpn

From Global Anycast

Jump to: navigation, search

Contents

[edit] OpenVPN

[edit] Création d'un certificat pour Global Anycast (Draft)

Tuto valable pour FreeBSD, peut-être que ça marche ailleurs

  • Editer /etc/ssl/openssl.cnf et trouver la ligne "dir" et mettre ./ comme dossier (normalement dir = ./demoCA/)
  • Préparer le dossier ou seront stockées les clés & compagnie
   mkdir /usr/local/etc/openvpn
   cd /usr/local/etc/openvpn
   mkdir certs crl newcerts private
   echo "01" > serial
   touch index.txt
   openssl dhparam -out dh1024.pem 1024
  • Générer un CA en renseignant bien toutes les infos (par exemple Country : FR, Locality : Paris, Organization : Global Anycast, Organizational : GLAN, Common name : node1.fr.global-anycast.net, email : moi@moi.moi) et en choisissant un password
   openssl req -new -x509 -keyout private/cakey.pem -out cacert.pem -days 3650 -config /etc/ssl/openssl.cnf
  • Générer une paire de clés
   openssl req -nodes -new -x509 -keyout <hostname>.key.pem -out <hostname>.key.pem  -config /etc/ssl/openssl.cnf
  • Générer une demande de signature
   openssl x509 -x509toreq -in <hostname>.key.pem -signkey <hostname>.key.pem -out <hostname>.csr.pem
  • Signer les clés
   openssl ca -config /etc/ssl/openssl.cnf -policy policy_anything -out <hostname>.crt.pem -infiles <hostname>.csr.pem
  • Extraire la clé publique du certificat généré
   openssl x509 -in <hostname>.crt.pem -pubkey > <hostname>.pub.pem
  • Extraire une clé publique au format RSA pour l'utiliser avec ssh
   ssh-keygen -y -f <hostname>.key.pem > <hostname>.pub.rsa

[edit] Configuration OpenVPN

  • Il faut garder au chaud tout ce qui est ci-dessus et mettre dans /usr/local/etc/openvpn :
    • cacert.pem
    • <hostname>.key.pem
    • <hostname>.crt.pem
    • Il faut déterminer le range IPv6 à utiliser. C'est le serveur qui décide, à partir de sa racine (par exemple fd6b:a42:1a19:4f8f:f443:: suivie de 2 puis du rang du VPN à monter (0 pour le premier, 1 pour le second, ...) puis de 1 pour le serveur et 2 pour le client.
  • Sur le serveur
    • Il faut récuperer le contenu du cacert.pem fraichement généré sur le client et l'inclure à son propre cacert.pem
    • Il faut ensuite créer un fichier <hostname-du-serveur>-<hostname-du-client>.conf et y mettre :
   tls-server
   port 1194
   proto udp
   dev tun
   tun-ipv6
   ca cacert.pem
   cert node1.fr.global-anycast.net.crt.pem
   key node1.fr.global-anycast.net.key.pem
   dh dh1024.pem
   script-security 2
   up /usr/local/etc/openvpn/node1-node2.sh
   keepalive 10 120
   persist-key
   persist-tun
    • Il faut ensuite créer un fichier <hostname1>-<hostname2>.sh et y mettre :
   #!/bin/sh
   /sbin/ifconfig $dev up
   /sbin/ifconfig $dev inet6 <ipv6_du_serveur> # par exemple fd6b:a42:1a19:4f8f:f443:2:0:1
  • Sur le client
    • Il faut récuperer le contenu du cacert.pem du serveur et l'inclure au cacert.pem du client
    • Il faut créer un fichier <hostname-du-client>-<hostname-du-serveur>.conf et y mettre :
   proto udp
   dev tun
   tun-ipv6
   ca cacert.pem
   cert node2.fr.global-anycast.net.crt.pem
   key node2.fr.global-anycast.net.key.pem
   dh dh1024.pem
   tls-client
   remote 79.143.245.118 1194
   script-security 2
   up /usr/local/etc/openvpn/node2-node1.sh
   keepalive 10 120
   persist-key
   persist-tun
    • Il faut ensuite créer un fichier <hostname2>-<hostname1>.sh et y mettre :
   #!/bin/sh
   /sbin/ifconfig $dev up
   /sbin/ifconfig $dev inet6 <ipv6_du_serveur> # par exemple fd6b:a42:1a19:4f8f:f443:2:0:2

[edit] Générer des signatures pour des fichiers et les vérifier

Soit data le nom du fichier à signer :

   openssl dgst -sha256 -sign <hostname>.key.pem -out data.sign data

le fichier data.sign contient la signature chiffrée du fichier. Pour vérifier qu'elle est bonne, il faut que le destinataire connaisse la clé publique de l'émetteur et fasse :

   openssl dgst -sha256 -verify <hostname>.pub.pem -signature data.sign data

[edit] Tuto brut

Billet écrit par Arkados et distribué en CC-by-sa, version originale disponible ici : [1] Adaptation à venir

Lire la section suivante avant de mettre en place le VPN en suivant ce guide

Dans les grandes lignes, le tutoriel d’Ubuntu-fr parvient déjà à un VPN anonymiseur presque opérationnel. Je vais reprendre les différentes étapes:

  1. Installer les paquets openvpn, openssh-server et openssl.
  2. Créer les certificats de sécurité
  3. générer les paramètres Diffie-Hellman
  4. transférer les clés à ceux qui en ont besoin
  5. configurer OpenVPN
  6. configurer le client
  7. tester la configuration
  8. activer le routage

Note: contrairement à ce qui est indiqué dans le tuto, la copie des scripts de génération de clés doit se faire avec cette commande:

  cp /usr/share/doc/openvpn/examples/easy-rsa ~/openvpn/easy-rsa/ -R

Ensuite, suivez tout simplement le tutoriel. Sauf: préférez générer des clés d’une longueur de 2048 au lieu de 1024, si vous voulez la mêmes sécurité qu’Arethusa :) Et prenez aussi le cipher AES-256-CBC.

Pour la configuration du serveur, voici le fichier server.conf utilisé par Fansub Streaming:

   port 3125
   proto tcp-server
   dev tun
   ca ca.crt
   cert vpn.fansub-streaming.eu.crt
   key vpn.fansub-streaming.eu.key
   dh dh2048.pem
   server 10.10.0.0 255.255.255.0
   ifconfig-pool-persist ipp.txt
   push "dhcp-option DNS 10.10.10.10"
   push "dhcp-option DNS 8.8.8.8"
   keepalive 10 120
   cipher AES-256-CBC
   comp-lzo
   persist-key
   persist-tun
   status openvpn-status.log
   verb 3
   client-config-dir ccd
   route 10.10.0.0 255.255.255.0

Ensuite, important, il faut que l’interface réseau route l’accès pour le réseau VPN. Pour ce faire, il faut modifier le fichier /etc/network/interfaces

Soyez très prudents avec ce fichier, une mauvaise config et votre serveur peut ne plus être accessible. Contentez vous d’ajouter ces lignes à la fin du fichier:

   post-up iptables -t nat -A POSTROUTING -o eth0 -s 10.10.0.1/24 -j MASQUERADE
   post-up echo 1 > /proc/sys/net/ipv4/ip_forward

Opération optionnelle: j’ai remarqué que Sakura faisait ses requêtes DNS d’abord sur lui (et vu que Bind est pas installé, ça lui fait perdre du temps), puis sur un serveur DNS d’OVH (qui est lent). Du coup, il fallait attendre ~5 secondes pour que le site se charge. Pour changer la configuration des serveurs DNS, modifier le fichier /etc/resolv.conf. Par exemple ici avec un serveur DNS public sans log faisant partie d’OpenNIC:

   nameserver 217.79.186.148

Voilà, le serveur est prêt. Configurons à présent le client OpenVPN sur les ordinateurs qui doivent avoir un accès. Que vous soyez sous Windows ou GNU/Linux, la config est pareil (seule différence: sous Windows le fichier doit avoir une extension .ovpn)

   client
   dev tun
   proto tcp
   remote vpn.fansub-streaming.eu 3125
   resolv-retry infinite
   nobind
   persist-key
   persist-tun
   ca ca.crt
   cert client1.crt
   key client1.key
   ns-cert-type server
   cipher AES-256-CBC
   comp-lzo
   verb 3
   redirect-gateway def1 bypass-dhcp

Placez les fichiers ca.crt, client1.crt et client1.key, précédemment récupérés du serveur, dans le dossier config d’OpenVPN. Lancez la connexion. Si ça marche, le client affichera (ici sur Windows):

   Wed Mar 03 12:16:19 3125 OpenVPN 2.1_rc19 i686-pc-mingw32 [SSL] [LZO2] [PKCS11] built on Aug 20 2009
   Wed Mar 03 12:16:19 3125 NOTE: OpenVPN 2.1 requires ‘–script-security 2′ or higher to call user-defined scripts or executables
   Wed Mar 03 12:16:22 3125 WARNING: this configuration may cache passwords in memory — use the auth-nocache option to prevent this
   Wed Mar 03 12:16:22 3125 LZO compression initialized
   Wed Mar 03 12:16:22 3125 Control Channel MTU parms [ L:1560 D:140 EF:40 EB:0 ET:0 EL:0 ]
   Wed Mar 03 12:16:22 3125 Data Channel MTU parms [ L:1560 D:1450 EF:60 EB:135 ET:0 EL:0 AF:3/1 ]
   Wed Mar 03 12:16:22 3125 Local Options hash (VER=V4): ’958c5492′
   Wed Mar 03 12:16:22 3125 Expected Remote Options hash (VER=V4): ’79ef4284′
   Wed Mar 03 12:16:22 3125 Attempting to establish TCP connection with 94.23.213.133:3125
   Wed Mar 03 12:16:23 3125 TCP connection established with 94.23.213.133:3125
   Wed Mar 03 12:16:23 3125 Socket Buffers: R=[8192->8192] S=[8192->8192]
   Wed Mar 03 12:16:23 3125 TCPv4_CLIENT link local: [undef]
   Wed Mar 03 12:16:23 3125 TCPv4_CLIENT link remote: 94.23.213.133:3125
   Wed Mar 03 12:16:23 3125 TLS: Initial packet from 94.23.213.133:3125, sid=8872ace5 41c32636
   Wed Mar 03 12:16:28 3125 VERIFY OK: depth=1, /C=FR/ST=b/L=../O=../CN=../emailAddress=..
   Wed Mar 03 12:16:28 3125 VERIFY OK: nsCertType=SERVER
   Wed Mar 03 12:16:28 3125 VERIFY OK: depth=0, /C=FR/ST=../L=../O=vpnFS/CN=../emailAddress=..
   Wed Mar 03 12:16:36 3125 Data Channel Encrypt: Cipher ‘AES-256-CBC’ initialized with 256 bit key
   Wed Mar 03 12:16:36 3125 Data Channel Encrypt: Using 160 bit message hash ‘SHA1′ for HMAC authentication
   Wed Mar 03 12:16:36 3125 Data Channel Decrypt: Cipher ‘AES-256-CBC’ initialized with 256 bit key
   Wed Mar 03 12:16:36 3125 Data Channel Decrypt: Using 160 bit message hash ‘SHA1′ for HMAC authentication
   Wed Mar 03 12:16:36 3125 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA
   Wed Mar 03 12:16:36 3125 [..] Peer Connection Initiated with 94.23.213.133:3125
   Wed Mar 03 12:16:37 3125 SENT CONTROL [..]: ‘PUSH_REQUEST’ (status=1)
   Wed Mar 03 12:16:38 3125 PUSH: Received control message: ‘PUSH_REPLY,redirect-gateway def1 bypass-dhcp,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5′
   Wed Mar 03 12:16:38 3125 OPTIONS IMPORT: timers and/or timeouts modified
   Wed Mar 03 12:16:38 3125 OPTIONS IMPORT: –ifconfig/up options modified
   Wed Mar 03 12:16:38 3125 OPTIONS IMPORT: route options modified
   Wed Mar 03 12:16:38 3125 ROUTE default_gateway=192.168.0.1
   Wed Mar 03 12:16:38 3125 TAP-WIN32 device [Connexion au réseau local] opened: \\.\Global\{D7A81234-E87D-4CC9-AAD3-32EC0FC2E6DD}.tap
   Wed Mar 03 12:16:38 3125 TAP-Win32 Driver Version 9.6
   Wed Mar 03 12:16:38 3125 TAP-Win32 MTU=1500
   Wed Mar 03 12:16:38 3125 Notified TAP-Win32 driver to set a DHCP IP/netmask of 10.8.0.6/255.255.255.252 on interface {D7A81234-E87D-4CC9-AAD3-32EC0FC2E6DD} [DHCP-serv: 10.8.0.5, lease-time: 31536000]
   Wed Mar 03 12:16:38 3125 Successful ARP Flush on interface [4] {D7A81234-E87D-4CC9-AAD3-32EC0FC2E6DD}
   Wed Mar 03 12:16:43 3125 TEST ROUTES: 2/2 succeeded len=1 ret=1 a=0 u/d=up
   Wed Mar 03 12:16:43 3125 C:\WINDOWS\system32\route.exe ADD 94.23.213.133 MASK 255.255.255.255 192.168.0.1
   Wed Mar 03 12:16:43 3125 Route addition via IPAPI succeeded [adaptive]
   Wed Mar 03 12:16:43 3125 C:\WINDOWS\system32\route.exe ADD 0.0.0.0 MASK 128.0.0.0 10.8.0.5
   Wed Mar 03 12:16:43 3125 Route addition via IPAPI succeeded [adaptive]
   Wed Mar 03 12:16:43 3125 C:\WINDOWS\system32\route.exe ADD 128.0.0.0 MASK 128.0.0.0 10.8.0.5
   Wed Mar 03 12:16:43 3125 Route addition via IPAPI succeeded [adaptive]
   Wed Mar 03 12:16:43 3125 C:\WINDOWS\system32\route.exe ADD 10.8.0.1 MASK 255.255.255.255 10.8.0.5
   Wed Mar 03 12:16:43 3125 Route addition via IPAPI succeeded [adaptive]
   Wed Mar 03 12:16:43 3125 Initialization Sequence Completed

Résumons les points forts et points faibles de ce réseau OpenVPN:

  1. mon adresse IP externe est cachée: les sites et autres ordinateurs ne voient que l’IP du serveur VPN (voir GeoIpTool). Puissante mesure contre Hadopi, car elle devra contacter l’hébergeur pour connaître l’identité de la personne, et la Hadopi a une procédure « spéciale » pour les personnes morales (sociétés, associations,..), et si le VPN est à l’étranger, la Hadopi ne peut rien faire
  2. contrairement à un proxy, un VPN route une interface entière et pas seulement un logiciel
  3. avec un VPN on peut faire reconnaître 2 ordinateurs sur internet comme étant en réseau local (pratique pour les jeux vidéos en LAN, les transferts avec les clients de messagerie, accéder aux dossiers partagés, se connecter à l’intranet de son entreprise depuis l’extérieur,…)
  4. cette solution ne peut pas être interdite par la loi: les VPN sont beaucoup utilisés par les grosses entreprises (intranet depuis internet)
  5. on contourne ainsi le filtrage et le bridage mis en place par son fournisseur d’accès internet pour des services précis (exemple: SFR qui ralentit l’UDP, pour brider le peer to peer, ou Orange dont les DNS donnent un accès très lent à Youtube, ou encore permettre un accès à Hulu pour un non-américain)
  6. OpenVPN est meilleur que PPTP (utilisé notamment par iPredator) car supporte une compression, permet un chiffrage bien plus puissant et contourne plus facilement les pare-feu.
  1. avec un serveur VPN, ça fait un intermédiaire de plus, donc une connexion moins performante
  2. OpenVPN nécessite l’installation d’un logiciel
  3. via un VPN, le pare-feu du routeur est contourné donc ça donne accès à un poste local via internet
  4. en cas de déconnexion du VPN, il faut mettre en place des mesures de coupure (pour éviter une fuite d’anonymat)
  5. il faut un serveur VPN très rapide si l’on veut aussi une connexion très rapide – vitesse de connexion autour de 50-100 Mb/s, je m’entends, un serveur RPS ou Cloud à 10 € par mois chez OVH ou 1&1 fait l’affaire pour 10 utilisateurs

[edit] Tuto adapté

(à faire : supprimer tout ce qui touche à l'anonymat, réécrire en incluant le tuto d'ubuntu-fr directement, l'adapter en IPV6)

Remplacer dev tun par dev tap, et tcp par udp

Personal tools