Pivpn

De Dinfadom - Wiki
Aller à : navigation, rechercher
Pivpn logo.png

Difficultés : Etoile.pngEtoile.png


PiVPN

Si vous voulez vous installer un petit serveur OpenVPN à la maison et utiliser votre connexion perso pour y faire transiter vos paquets en toute sécurité, c'est possible grâce à un Raspberry Pi, une petite carte SD d'au moins 8GB et le script PiVPN.

sources : ici

Prérequis

  • Un Raspberry PI 2 ou 3
  • OS : Raspbian
  • SD : 8GB ou plus
Pour ce petit tutoriel je me suis basé sur une Raspbian Jessie Lite (sans interface graphique)
Pour restaurer l'image sur votre SD > Tutoriel : ici ou ici

Informations utiles :

Pour exemple :

  • Société : Dinfadom

  • nom d’hôte : pivpn.dinfadom.com
 (connu des DNS publiques)
  • IP Publique (fixe : connu des DNS publiques)
  • IP Privé : 192.168.1.4
  • Masque : 255.255.255.0
  • passerelle : 192.168.1.1
  • DNS : 192.168.1.1
  • /home/pi/ovpns : contiendra les fichier .ovpn (configurations)
  • /var/www/ : sera notre dossier racine pour les sites du serveur Apache
  • /etc/htpasswd/ : contiendra nos utilisateurs Apache
Si vous possédez une connexion Fibre ou ADSL grand publique avec une IP publique dynamique, vous avez possibilité d'utiliser des services comme : 
http://www.noip.com/
https://freedns.afraid.org/

Aide à la configuration : https://doc.ubuntu-fr.org/dns_dynamique

Personnalisation de motd :

sudo vim /etc/motd

Ajoutez :


██████╗ ██╗██╗   ██╗██████╗ ███╗   ██╗
██╔══██╗██║██║   ██║██╔══██╗████╗  ██║
██████╔╝██║██║   ██║██████╔╝██╔██╗ ██║
██╔═══╝ ██║╚██╗ ██╔╝██╔═══╝ ██║╚██╗██║ 
██║     ██║ ╚████╔╝ ██║     ██║ ╚████║
╚═╝     ╚═╝  ╚═══╝  ╚═╝     ╚═╝  ╚═══╝
                                     

  Hostname : pivpn
  IP : 192.168.1.4/24
  Description:	Raspbian 8.0 (jessie)
  Release:	8.0
  Codename:	jessie

Configuration de la carte réseau :

Je vous invite à fortement à fixer votre l'IP de votre Raspberry

sudo vim /etc/network/interfaces
 # eth0 
 auto eth0
 iface eth0 inet static
 address 192.168.1.4
 netmask 255.255.255.0
 gateway 192.168.1.1
 
 dns-nameservers 192.168.1.1

puis redémarrer votre Raspberry

sudo reboot

Installation de PIVPN :

sources : http://www.pivpn.io/

curl -L https://install.pivpn.io | bash

Un assistant va vous guider et transformer votre Raspberry en serveur openvpn

Voici les options que je vous invite à activer/vérifier :

  • Mettez à jour votre OS > OUI
  • Vérifiez votre configuration réseau
  • Choisir "pi" comme utilisateur local (normalement c'est le seul disponible)
  • Activer "Unattended Upgrade" (MAJ de sécurité) > OUI
  • Protocole > TCP
  • Port > 4430 (vous pouvez tout à fait en choisir un autre)
    • Si vous utilisez une connexion fibre ou ADSL grand publique n'oubliez pas de créer la règle NAT/PAT dans votre BOX (ex:Livebox)
  • Niveau de chiffrement utilisé par OpenVPN > 2048 (suffit largement)
  • Activer Diffie-Hellman > NON
  • IP Publique ou DNS > DNS Entry > pivpn.dinfadom.com
  • Serveur DNS > OpenDNS (pas d'importance dans notre cas choisissez celui de votre choix)
  • Reboot > OUI

Configuration de PIVPN et installation d'Apache2 :

Maintenant que notre serveur OpenVPN est opérationnel, nous allons installer un serveur web apache afin de rendre disponible et de manière sécurisé les fichiers de configuration au format .ovpn destinés au clients OpenVPN

Ces fichiers contiennent :

  • Configurations du client OpenVPN
  • Protocoles utilisés (Transports et chiffrements)
  • URL du serveur
  • Certificat CA
  • Certificat de l'utilisateur
  • Clé privé de l'utilisateur
  • Clé publique du serveur OpenVPN


Création d'un profil

Pour créer un nouveau profil de connexion

Exemple :

pivpn add exempleuser
 Enter a Name for the Client:  exempleuser
 Enter the password for the client:  
 Enter the password again to verify:  
 spawn ./easyrsa build-client-full exempleuser
 
 Note: using Easy-RSA configuration from: ./vars
 Generating a 2048 bit RSA private key
 ..........+++
 ..................+++
 writing new private key to '/etc/openvpn/easy-rsa/pki/private/exempleuser.key.jB6edriEnx'
 Enter PEM pass phrase:
 Verifying - Enter PEM pass phrase:exempleuser
 
 -----
 Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.cnf
 Check that the request matches the signature
 Signature ok
 The Subject's Distinguished Name is as follows
 commonName            :ASN.1 12:'exempleuser'
 Certificate is to be certified until Mar  7 10:02:27 2027 GMT (3650 days)
 
 Write out database with 1 new entries
 Data Base Updated
 Client's cert found: exempleuser.crt
 Client's Private Key found: exempleuser.key
 CA public Key found: ca.crt
 tls-auth Private Key found: ta.key
 
 
 ========================================================
 Done! exempleuser.ovpn successfully created! 
 exempleuser.ovpn was copied to:
   /home/pi/ovpns
 for easy transfer.
 ========================================================

Suppression d'un profil

 pivpn revoke exempleuser
 ::  Certificate List  :: 
 
  exempleuser
 
 ::: Please enter the Name of the client to be revoked from the list above:
 exempleuser
 
 This seems to be the first time you have revoked a cert.
 First we need to initialize the Certificate Revocation List.
 Then add the CRL to your server config and restart openvpn.
 
 Note: using Easy-RSA configuration from: ./vars
 Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.cnf
 
 An updated CRL has been created.
 CRL file: /etc/openvpn/easy-rsa/pki/crl.pem
 
 Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.cnf
 Revoking Certificate 49E25A12526010C8F993FF91EDD90883.
 Data Base Updated
 
 Note: using Easy-RSA configuration from: ./vars
 Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.cnf
 
 
 An updated CRL has been created.
 CRL file: /etc/openvpn/easy-rsa/pki/crl.pem
 
 
 ::: Certificate revoked, and CRL file updated.
 ::: Removing certs and client configuration for this profile.
 ::: Completed!

Afficher les profils

 pivpn list
 : NOTE : The first entry should always be your valid server!
 
 ::: Certificate Status List :::
 ::  Status  ||   Name   :: 
     Valid   ::   server
     Valid   ::   fpicard
     Revoked ::   exempleuser

Installation d'Apache2 et sécurisation :

sudo apt-get update && sudo apt-get install apache2 -y

Création d'un lien symbolique :

Afin de rendre disponible nos fichiers .ovpn via Apache afin d’être accessible depuis notre navigateur web, nous allons déplacer le dossier /home/pi/ovpn vers /var/www/ et créer un lien symbolique

mv /home/pi/ovpns /var/www/
ln -s /var/www/ovpns/ /home/pi/ovpns
(afin que le script pivpn continu de fonctionner)

Sécurisation du dossier /var/www/ovpns/

Afin de restreinte l’accès au dossier /var/www/ovpns/ nous allons créer un utilisateur "pivpn" avec un mot de passe, il sera le seul à accéder au dossier /ovpns/ depuis notre navigateur.


mkdir -p /etc/htpasswd/
htpasswd -c /etc/htpasswd/.htpasswd pivpn

Vérifiions :

cat /etc/htpasswd/.htpasswd
pivpn:$apr1$5mFg9J4I$Ol.9VmtioO//8v/mafNfm.

Création d'un virtual host :

L'hébergement virtuel (virtual hosting) est le fait de servir plusieurs sites web sur une même instance de serveur. Ainsi, une machine serveur possède un et un seul serveur Apache et elle pourra servir (virtuellement) une infinité de sites qui n'ont aucunement besoin de "se connaître" l'un l'autre. La flexibilité d'Apache fait que chaque site pourra être configuré de manière très différente de son voisin. Aussi, les clients (en grande partie des navigateurs web) n'auront aucune idée du fait qu'il existe plusieurs sites sur le serveur qu'ils ont contacté. Sauf erreurs de configuration, ils n'auront aucun moyen de le savoir.

vim /etc/apache2/sites-available/pivpn.conf
 <VirtualHost *:80>
        ServerAdmin picard.flo@gmail.com
        DocumentRoot /var/www/ovpns/
 
        <Directory "/var/www/ovpns">
                AuthType Basic
                AuthName "Authentication Required"
                AuthUserFile "/etc/htpasswd/.htpasswd"
                Require valid-user
  		
                Order allow,deny
                Allow from all
        </Directory>
 
        #Logs
        ErrorLog ${APACHE_LOG_DIR}/ovpns-error.log
        CustomLog ${APACHE_LOG_DIR}/ovpns-access.log combined
 </VirtualHost>

Désactivation du vhost 000-default

a2dissite 000-default

Activation du vhost pivpn.conf

a2ensite pivpn.conf

Rechargement des configurations Apache2

service apache2 reload

Maintenant nos fichiers de configuration sont accessible via http://pivpn.dinfadom.com/ ou http://192.168.1.4/ et lorsque vous tentez d'accéder au dossier /ovpns, une authentification doit être demandée.

Screenshot :

Capture du 2017-03-09 12-08-08.png

Capture du 2017-03-09 12-08-21.png

OpenVPN Clients

Il existe de nombreux clients OpenVPN officiels et alternatifs.

Voici une liste de clients disponibles selon les plateformes