Cette technique permet la création d'une liaison chiffrée entre votre machine et un serveur hébergé sur Internet (par exemple chez un fournisseur d’accès se trouvant en France ou à l'étranger).
Tous vos accès à Internet seront alors vus à partir de l'adresse IP de ce serveur VPN et non plus par celle de votre machine.
OpenVPN n'est pas un VPN IPSec. C'est un VPN SSL se basant sur la création d'un tunnel IP (UDP ou TCP au choix) authentifié et chiffré avec la bibliothèque OpenSSL.
Quelques avantages des tunnels VPN SSL :
apt-get update && apt-get install openvpn easy-rsa
cd /etc/openvpn
make-cadir nom_du_serveur
cd /etc/openvpn/nom_du_serveur
ln -s openssl-1.0.0.cnf openssl.cnf
nano /etc/openvpn/nom_du_serveur/vars
Ce qui donne par exemple :
export KEY_SIZE=4096 # Une clef de 4096 est le minimum actuellement pour un chiffrement correct export KEY_COUNTRY="EU" export KEY_PROVINCE="FR" export KEY_CITY="Paris" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@debian-facile.org" export KEY_OU="MyOrganizationalUnit" export KEY_NAME="nom_du_serveur_vpn" # Choisissez un nom dont vous vous souviendrez !
cd /etc/openvpn/nom_du_serveur
source ./vars
# on applique toutes les variables edité précedement.
./clean-all
# Faite gaffe en utilisant cette commande, elle efface toutes les cléfs si vous en avez déjà créée.
./build-ca
# Création du certificat d'authorité du serveur
./build-key-server nom_du_serveur
Ce qui donne par exemple à la fin :
A challenge password []:votre_mot_de_passe Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y
openvpn --genkey --secret /etc/openvpn/nom_du_serveur/keys/ta.key
cd /etc/openvpn/nom_du_serveur
openssl dhparam 4096 > keys/dh-4096.pem
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/nom_du_serveur.conf
nano /etc/openvpn/nom_du_serveur.conf
#Attention, les ';' sont là pour désactiver les options
En plus des informations déjà présente, et celle si comprise, vous devez modifier/ajouter les lignes suivantes, à adapter selon votre cas :
port 7777 proto tcp ;proto udp ca /etc/openvpn/nom_du_serveur/keys/ca.crt cert /etc/openvpn/nom_du_serveur/keys/nom_du_serveur.crt key /etc/openvpn/nom_du_serveur/keys/nom_du_serveur.key # This file should be kept secret dh /etc/openvpn/nom_du_serveur/keys/dh-4096.pem tls-auth /etc/openvpn/nom_du_serveur/keys/ta.key 0 # This file is secret cipher AES-256-CBC auth SHA512 TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA comp-lzo user openvpn group nogroup ;explicit-exit-notify 1
adduser --system --shell /usr/sbin/nologin --no-create-home openvpn === Test et Démarrage du serveur : === <code root>openvpn /etc/openvpn/nom_du_serveur.conf
Si vous obtenez “Initialization Sequence Completed” en dernière ligne alors passez à la commande suivante, sinon ouvrez un post dans la rubrique réseau du forum.
systemctl start openvpn
systemctl start openvpn@nom_du_serveur
systemctl enable openvpn
systemctl enable openvpn@nom_du_serveur
cd /etc/openvpn/nom_du_serveur
source ./vars
./build-key nom_du_client
A la fin des options à saisir :
A challenge password []:votre_mot_de_passe_précédement_créée Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/NAT.conf
Activez le nouveau jeux de règle :
sysctl -p /etc/sysctl.d/NAT.conf
Quelques explications concernant la configuration du NAT sur le forum ici merci à raleur pour ces explications :)
se référer ici : tuto Reseau iptable
iptables -t filter -P FORWARD ACCEPT iptables -t filter -A INPUT -p tcp --dport 7777 -j ACCEPT iptables -t nat -A POSTROUTING -o ethx(nom de votre interface) -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ethx(nom de votre interface) -j MASQUERADE
Pour rendre ces règles persistantes après un reboot de votre serveur, il faut commencer par créer un script de chargement de règles de Firewall (ou utiliser un script existant) :
iptables-save > /etc/iptables.rules
sudo apt-get update
sudo apt-get install openvpn
mkdir -p /etc/openvpn/nom_du_serveur/clients
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/nom_du_serveur/clients/nom_du_client.ovpn
nano /etc/openvpn/nom_du_serveur/clients/nom_du_client.ovpn
Doit y être ajouté et ou modifié les lignes suivantes :
proto tcp ;proto udp remote ip_du_serveur 7777 user nobody group nogroup ca ca.crt cert nom_du_client.crt key nom_du_client.key tls-auth ta.key 1 cipher AES-256-CBC auth SHA512 TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA comp-lzo
Rappatriez ca.crt nom_du_client.crt nom_du_client.key et ta.key de /etc/openvpn/nom_du_serveur/keys sur votre client dans /etc/openvpn/nom_du_serveur/nom_du_client/ scp : transfert de fichiers sécurisé entre machines
cd /etc/openvpn/nom_du_server/nom_du_client
openvpn nom_du_client.ovpn
#Vous devriez obtenir 'Initialization Sequence Completed' dans le cas contraire ouvrez un post dans la rubrique reseau
Il vous reste plus qu'a enable et start openvpn et openvpn@nom_du_client de la même façon que sur le serveur.