Outils pour utilisateurs

Outils du site


braveo:docinstallsrvopenvpn

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
braveo:docinstallsrvopenvpn [2013/04/20 13:14]
127.0.0.1 modification externe
braveo:docinstallsrvopenvpn [2016/07/19 15:36] (Version actuelle)
Ligne 1: Ligne 1:
 +===== Openvpn =====
 +
 +==== Pré-requis ====
 +
 +Une Debian toute fraiche.
 +
 +==== À l'​attaque ====
 +Bon comme d'​habitude deux ou trois doc
 +
 +[[http://​www.coagul.org/​spip.php?​article422|coagul openvpn]]
 +
 +[[http://​www.moroblog.info/​Tutoriel-OpenVPN.html|moroblog]]
 +
 +[[http://​cihan.me/​how-to-setup-openvpn-server-on-debian-lenny/​|cihan.me en anglais]]
 +
 +Nous avons repris le tutoriel [[http://​www.coagul.org/​spip.php?​article422|coagul openvpn]] et adapté a notre plateforme
 +
 +Nous installons openvpn
 +  aptitude install openvpn
 +
 +Ensuite nous créons des certificats ​
 +Ces certificats vont servir pour identifier le client et le serveur ​
 +  cp -R /​usr/​share/​doc/​openvpn/​examples/​easy-rsa/​ /​etc/​openvpn/​
 +
 +<​note>​Si /​usr/​share/​doc/​openvpn/​examples/​easy-rsa/​ n'​existe pas regardez dans /​usr/​share/​easy-rsa/​. Si toujours rien vérifiez que //​easy-rsa//​ est installé.</​note>​
 +
 +nous placons dans ce nouveau repertoir
 +  cd /​etc/​openvpn/​easy-rsa/​2.0
 +
 +Nous renseignons le fichiers vars
 +  vi vars
 +
 +En lui mettant a la fin  ​
 +  export KEY_COUNTRY="​FR"​
 +  export KEY_PROVINCE="​BRETAGNE"​
 +  export KEY_CITY="​BREST"​
 +  export KEY_ORG="​maison du libre"
 +  export KEY_EMAIL="​contact@mdl29.net"​
 +
 +nous pouvons exécuter ce fichier ​
 +  . ./vars
 +
 +<note important>​la commande ci dessous videra entièrement toutes les clés. ​
 +Vous pouvez enlever les clés que dans le cas d'une installation neuve ou si vous voulez tout effacer.
 +</​note>​
 +Nous donnons un petit coup de balai :
 +  ./clean-all
 +
 +=====Création de l'​autorité de certification=====
 +Le script suivant permet de créer dans «  keys  » le certificat principal du serveur « ca.crt ​ » et la clé correspondante « ca.key » :
 +  ./build-ca
 +
 +et renseigner les champs demandé comme cela
 +  Country Name (2 letter code) [FR]:
 +  State or Province Name (full name) [BRETAGNE]:
 +  Locality Name (eg, city) [BREST]:
 +  Organization Name (eg, company) [maison du libre]:
 +  Organizational Unit Name (eg, section) []:
 +  Common Name (eg, your name or your server'​s hostname) [maison du libre CA]:maison du libre CA
 +  Email Address [contact@mdl29.net]:​
 +
 +===== Création du certificat Serveur(openvpn c'est son petit nom) =====
 +Le script suivant permet de créer dans «  keys  » le certificat « openvpn.crt » et la clé « openvpn.key » pour le serveur VPN nommé par exemple «openvpn » :
 +
 +  ./​build-key-server openvpn
 +
 +que vous renseignez comme cela
 +  countryName ​          :​PRINTABLE:'​FR'​
 +  stateOrProvinceName ​  :​PRINTABLE:'​BRETAGNE'​
 +  localityName ​         :​PRINTABLE:'​BREST'​
 +  organizationName ​     :​PRINTABLE:'​maison du libre'
 +  commonName ​           :​PRINTABLE:'​openvpn'​
 +  emailAddress ​         :​IA5STRING:'​contact@mdl29.net'​
 +
 +===== Création des certificats clients ​ openvpn =====
 +
 +Le script suivant permet de créer dans  ./​keys ​ le certificat jean.dugenoux.crt ​ et la clé « jean.dugenoux.key » pour le client VPN nommé par exemple ​ jean.dugenoux :
 +
 +  cd /​etc/​openvpn/​easy-rsa/​2.0
 +  . ./vars
 +  ./build-key jean.dugenoux
 +
 +et le renseigner comme cela 
 +  Country Name (2 letter code) [FR]:
 +  State or Province Name (full name) [BRETAGNE]:
 +  Locality Name (eg, city) [BREST]:
 +  Organization Name (eg, company) [maison du libre]:
 +  Organizational Unit Name (eg, section) []:
 +  Common Name (eg, your name or your server'​s hostname) [jean.dugenoux]:​
 +  Email Address [contact@mdl29.net]:'​jean.dugenoux@mdl29.net'​
 +
 +<​note>​Veillez bien à écrire l'​adresse mail entre simple cote '. Le caractère '​@'​ peut gêner la certification des clés.</​note>​
 +
 +===== Création du paramètre Diffie Hellman =====
 +
 +Le script suivant permet de créer dans «  keys  » le fichier « dh1024.pem » :
 +
 +  ./build-dh
 +
 +Résumé des certificats et clés créés précédemment dans « keys »
 +|Emplacement du fichier ​              ​|  ​ Type    |Nom       |Secret|
 +|Serveur de certification (CA) OpenSSL| Certificat |ca.crt ​           |Non   |
 +|Serveur de certification (CA) OpenSSL| Clé  ​  ​|ca.key ​           |Oui   |
 +|Serveur OpenVPN  ​             |Certificat ​ |openvpn.crt ​      ​|Non ​  |
 +|Serveur OpenVPN  ​             |Clé  ​  ​|openvpn.key ​      ​|Oui ​  |
 +|paramètre Diffie Hellman ​            ​|  ​  ​|dh1024.pem  ​     |Non   |
 +|jean.dugenoux  ​                     |Certificat ​ |jean.dugenoux.crt |Non   |
 +|jean.dugenoux ​                       | Clé  ​  ​|jean.dugenoux.key |Oui   |
 +
 +=====Mise en place des certificats et des clés=====
 +
 +concernant le serveur OpenVPN, le plus simple est de copier les 4 fichiers dans le dossier « /​etc/​openvpn » :
 +  cp ./​keys/​ca.crt /​etc/​openvpn/​
 +  cp ./​keys/​openvpn.crt /​etc/​openvpn/​
 +  cp ./​keys/​openvpn.key /​etc/​openvpn/​
 +  cp ./​keys/​dh1024.pem /​etc/​openvpn/​
 +
 +=====Création d’un utilisateur avec des droits limités pour OpenVPN=====
 +
 +Pour limiter les risques d’attaques sur OpenVPN, il est important que le processus d’OpenVPN fonctionne sur un utilisateur n’ayant aucun droit sur le système.
 +
 +Souvent, l’utilisateur «  nobody ​ » est utilisé par défaut, mais il est encore plus sécurisant de faire tourner chaque processus avec un utilisateur différent. Donc, pour le processus OpenVPN, nous allons créer l’utilisateur «  openvpn ​ » :
 +  groupadd openvpn
 +  useradd -d /dev/null -g openvpn -s /bin/false openvpn
 +
 +=====Configuration du Serveur OpenVPN =====
 +<note important>​
 +Nous pouvons configurer sur deux protocoles en tcp, et en udp.
 +Les performances réseaux sont très largement meilleurs en UDP.
 +Toutefois dans les entreprises,​ il y a souvent un firewall et un proxy pour se connecter sur internet. et donc les trames udp ne passent pas. C'est la ou la connexion tcp sur le port 443 est intéressante car elle  bluffe ces éléments de sécurités. ​
 +Ce n'est pas la panacée car dans les logs de ces équipements nous voyons très clairement que vous connectez en 443 sur l'ip du serveur vpn. mais ça permet de passer ​
 +</​note>​
 +
 +
 +==== Openvp En UDP ====
 +
 +Par défaut OpenVPN est fourni avec plusieurs fichiers d’exemples enregistrés dans le dossier :
 +  /​usr/​share/​doc/​openvpn/​examples/​sample-config-files/​
 +
 +Pour configurer le serveur, je suis parti du fichier d’exemple « server.conf.gz », qu’il faut donc décompresser et mettre en place dans «  /​etc/​openvpn » :
 +  cd /​usr/​share/​doc/​openvpn/​examples/​sample-config-files/​
 +  gunzip server.conf.gz
 +  cp server.conf /​etc/​openvpn/​serveur-udp.conf
 +
 +Il suffit ensuite d’adapter ce fichier en fonction de nos besoins. ​
 +  ;Port en écoute utilisé pour la connexion VPN
 +  port 1194
 +  ​
 +  ;Protocole utilisé (Le protocole udp est plus performant que le tcp)
 +  proto udp
 +  ​
 +  ;Type d'​interface réseau virtuelle créée
 +  dev tun
 +  ​
 +  ;Nom des fichiers servant à l'​authentification des clients via OpenSSL
 +  ca ca.crt
 +  cert openvpn.crt
 +  key openvpn.key  ​
 +  dh dh1024.pem
 +  ​
 +  ;Adresse du réseau virtuel (Le serveur aura l'​adresse 10.8.0.1)
 +  server 10.8.3.0 255.255.255.0
 +  ​
 +  ;Cette ligne ajoute sur le client la route du réseau du serveur
 +  push "route 192.168.0.0 255.255.255.0"​
 +  ​
 +  ;Ces lignes indiquent aux clients l'​adresse des serveur DNS et WINS
 +  push "​dhcp-option DNS 192.168.0.2"​
 +  push "​dhcp-option DOMAIN MonDomaine.com"​
 +  push "​dhcp-option WINS 192.168.0.3"​
 +  ​
 +  # Cette ligne permet aux clients de voire les autres clients
 +  ;​client-to-client
 +  ​
 +  keepalive 10 120
 +  ​
 +  ;Cette ligne active la compression
 +  comp-lzo
 +  ​
 +  ;Ces lignes indiquent un user et un group particulier pour le processus
 +  user openvpn
 +  group openvpn
 +  ​
 +  ;Ces lignes permettent de rendre persistante la connexion
 +  persist-key
 +  persist-tun
 +  ​
 +  status openvpn-status.log
 +  ​
 +  ​
 +  ​
 +  # Fix MTU problems ​
 +  mssfix 1300
 +  ​
 +  ;Cette ligne permet d'​indiquer le niveau de log souhaité (de 1 à 9)
 +  verb 1
 +  # ces lignes definiseent les fichiers le log
 +  status /​var/​log/​openvpn-udp-status.log ​
 +  log-append /​var/​log/​openvpn-udp.log ​
 +  ​
 +
 +<note important>​ATTENTION,​ si les journaux sont écrits dans un fichier dédié comme c’est le cas dans la configuration ci-dessus, il faut absolument mettre en place une rotation des ces journaux. Dans le cas contraire, OpenVPN tombe lorsque le fichier atteint 2Go.
 +</​note>​
 +
 +Pour cela, il suffit de créer le fichier /​etc/​logrotate.d/​openvpn ​
 +  vi /​etc/​logrotate.d/​openvpn ​
 +
 +et d’y ajouter les directives suivantes :
 +
 +  /​var/​log/​openvpn.log { 
 +    rotate 4 
 +    daily 
 +    copytruncate ​
 +    compress ​
 +    missingok ​
 +    notifempty ​
 +  }
 +==== Openvp En TCP IP ====
 +
 +Par défaut OpenVPN est fourni avec plusieurs fichiers d’exemples enregistrés dans le dossier :
 +  /​usr/​share/​doc/​openvpn/​examples/​sample-config-files/​
 +
 +Pour configurer le serveur, je suis parti du fichier d’exemple « server.conf.gz », qu’il faut donc décompresser et mettre en place dans «  /​etc/​openvpn » :
 +  cd /​usr/​share/​doc/​openvpn/​examples/​sample-config-files/​
 +  gunzip server.conf.gz
 +  cp server.conf /​etc/​openvpn/​serveur-tcp.conf
 +
 +Il suffit ensuite d’adapter ce fichier en fonction de nos besoins. ​
 +  ;Port en écoute utilisé pour la connexion VPN
 +  port 443
 +  ​
 +  ;Protocole utilisé (Le protocole udp est plus performant que le tcp)
 +  proto tcp
 +  ​
 +  ;Type d'​interface réseau virtuelle créée
 +  dev tun
 +  ​
 +  ;Nom des fichiers servant à l'​authentification des clients via OpenSSL
 +  ca ca.crt
 +  cert openvpn.crt
 +  key openvpn.key  ​
 +  dh dh1024.pem
 +  ​
 +  ;Adresse du réseau virtuel (Le serveur aura l'​adresse 10.8.0.1)
 +  server 10.8.4.0 255.255.255.0
 +  ​
 +  ;Cette ligne ajoute sur le client la route du réseau du serveur
 +  push "route 192.168.0.0 255.255.255.0"​
 +  ​
 +  ;Ces lignes indiquent aux clients l'​adresse des serveur DNS et WINS
 +  push "​dhcp-option DNS 192.168.0.2"​
 +  push "​dhcp-option DOMAIN MonDomaine.com"​
 +  push "​dhcp-option WINS 192.168.0.3"​
 +  ​
 +  # Cette ligne permet aux clients de voire les autres clients
 +  ;​client-to-client
 +  ​
 +  keepalive 10 120
 +  ​
 +  ;Cette ligne active la compression
 +  comp-lzo
 +  ​
 +  ;Ces lignes indiquent un user et un group particulier pour le processus
 +  user openvpn
 +  group openvpn
 +  ​
 +  ;Ces lignes permettent de rendre persistante la connexion
 +  persist-key
 +  persist-tun
 +  ​
 +  status openvpn-status.log
 +  ​
 +  ​
 +  ​
 +  # Fix MTU problems ​
 +  mssfix 1300
 +  ​
 +  ;Cette ligne permet d'​indiquer le niveau de log souhaité (de 1 à 9)
 +  verb 1
 +  # ces lignes definiseent les fichiers le log
 +  status /​var/​log/​openvpn-tcp-status.log ​
 +  log-append /​var/​log/​openvpn-tcp.log ​
 +  ​
 +
 +<note important>​ATTENTION,​ si les journaux sont écrits dans un fichier dédié comme c’est le cas dans la configuration ci-dessus, il faut absolument mettre en place une rotation des ces journaux. Dans le cas contraire, OpenVPN tombe lorsque le fichier atteint 2Go.
 +</​note>​
 +
 +Pour cela, il suffit de créer le fichier /​etc/​logrotate.d/​openvpn ​
 +  vi /​etc/​logrotate.d/​openvpn ​
 +
 +et d’y ajouter les directives suivantes :
 +
 +  /​var/​log/​openvpn.log { 
 +    rotate 4 
 +    daily 
 +    copytruncate ​
 +    compress ​
 +    missingok ​
 +    notifempty ​
 +  }
 +
 +
 +=====Démarrage du serveur OpenVPN====
 +La commande suivante permet de démarrer ou redémarrer le serveur :
 +  /​etc/​init.d/​openvpn restart
 +
 +Ne pas hésiter à regarder dans les logs que tout c’est bien passé :
 +
 +  tail -100 /​var/​log/​syslog
 +
 +Bien vérifier également que le processus tourne sous l’utilisateur « openvpn »
 +
 +  ps aux | grep openvpn
 +
 +Pour finir, si tout c’est bien passé l’interface « tun0 » doit apparaître dans la configuration du réseau :
 +  ifconfig
 +
 +...
 +  tun0      Lien encap:​UNSPEC ​ HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
 +         inet adr:​10.8.3.1 ​ P-t-P:​10.8.3.2 ​ Masque:​255.255.255.255
 +         UP POINTOPOINT RUNNING NOARP MULTICAST ​ MTU:​1500 ​ Metric:1
 +         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 +         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 +         ​collisions:​0 lg file transmission:​100
 +         RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
 +
 +Et il doit être possible de la pinguer :
 +
 +  ping 10.8.3.1
 +===== Partage de connexion =====
 +Par défaut, les connexion vpn n'ont pas accès au réseau local du serveur .
 +Pour simplifier la conf, nous allons natter tout ce qui vient du vpn.
 +
 +creation du script du demarrage ​
 +vi /​etc/​init.d/​networkVPN
 +
 +et nous lui mettons ... \\
 +  #! /bin/sh
 +  ### BEGIN INIT INFO
 +  # Provides: ​         rc.local
 +  # Required-Start: ​   $remote_fs
 +  # Required-Stop:​
 +  # Default-Start: ​    2 3 4 5
 +  # Default-Stop:​
 +  # Short-Description:​ lance le partage de connexion reseau
 +  ### END INIT INFO
 +   
 +  ​
 +  PATH=/​sbin:/​usr/​sbin:/​bin:/​usr/​bin ​
 +  ​
 +  . /​lib/​init/​vars.sh
 +  . /​lib/​lsb/​init-functions
 +  case "​$1"​ in 
 +    start)
 +        echo 1 > /​proc/​sys/​net/​ipv4/​ip_forward
 +        iptables -F
 +        iptables -t nat -F
 +        iptables -t mangle -F
 +        iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 +        ;;
 +  ​
 +    restart|reload|force-reload)
 +        echo "​Error:​ argument '​$1'​ not supported"​ >&2
 +        exit 3
 +        ;;
 +  ​
 +    stop)
 +        echo 0 > /​proc/​sys/​net/​ipv4/​ip_forward
 +        iptables -F
 +        iptables -t nat -F
 +        iptables -t mangle -F
 +        ;;
 +    *)
 +        echo "​Usage:​ $0 start|stop"​ >&2
 +        exit 3
 +        ;;
 +  esac
 +
 +=====Configuration du client=====
 +====en udp ====
 +sur le client
 +  aptitude install openvpn
 +
 +puis 
 +  vi /​etc/​openvpn/​client.conf
 +
 +et on lui met
 +  client
 +  dev tun
 +  proto udp 
 +  ​
 +  remote ip_qui_va_bien 1194 
 +  ​
 +  resolv-retry infinite
 +  nobind ​
 +  ​
 +  persist-key
 +  persist-tun
 +  ​
 +  ca ca.crt
 +  cert jean.dugenoux.crt
 +  key jean.dugenoux.key
 +  ​
 +  comp-lzo
 +  ​
 +  verb 1
 + 
 +il ne reste plus qu'a copier les cle ca.crt et le jean.dugenoux* dans le repertoire /​etc/​openvpn
 +
 +====en tcp sans proxy ====
 +<note warning> Au cas où le firewall de votre réseau ne laisse pas passer l'​udp. ​  </​note>​
 +
 +sur le client
 +  aptitude install openvpn
 +
 +puis 
 +  vi /​etc/​openvpn/​client.conf
 +
 +et on lui met
 +  client
 +  dev tun
 +  proto tcp 
 +  ​
 +  remote 91.217.154.233 443
 +  ​
 +  resolv-retry infinite
 +  nobind ​
 +  ​
 +  persist-key
 +  persist-tun
 +  ​
 +  ca ca.crt
 +  cert jean.dugenoux.crt
 +  key jean.dugenoux.key
 +  ​
 +  comp-lzo
 +  ​
 +  verb 1
 + 
 +il ne reste plus qu'a copier les cle ca.crt et le jean.dugenoux* dans le repertoire /​etc/​openvpn
 +
 +====En tcp avec proxy sans authentification ====
 +<note warning> Au cas où il existe un proxy sur votre réseau . et que le firewall ne laisse pas passer l'​udp. ​  </​note>​
 +
 +meme chose que pour tcp sans proxy, il suffit de rajouter à la fin du fichier client.conf ​
 +
 +  http-proxy-retry
 +  http-proxy 172.29.11.211 8080 
 +  http-proxy-option AGENT Mozilla/​5.0+(Windows+NT+5.0;​+fr-FR;​+rv:​1.7.6)+gecko ​ /​20050226+Firefox/​1.0.1
 +
 +====En tcp avec proxy avec authentification ====
 +
 +  http-proxy-retry
 +  http-proxy 172.29.11.211 8080 mypass basic 
 +  http-proxy-option AGENT Mozilla/​5.0+(Windows+NT+5.0;​+fr-FR;​+rv:​1.7.6)+gecko ​ /​20050226+Firefox/​1.0.1
 +
 +et il faut creer le fichier mypass dans /​etc/​openvpn/​
 +  vi /​etc/​openvpn/​mypass
 +
 +et lui mettre dedans ​
 +  login
 +  password
  
braveo/docinstallsrvopenvpn.txt · Dernière modification: 2016/07/19 15:36 (modification externe)