Aller à la recherche

OpenVPN configuration d'un vpn point à point

Le VPN (Virtual Private Network) est un réseau privé, qui permet de connecter plusieurs réseaux de manière chiffrée à travers une connexion non sécurisée. Ici nous allons utiliser OpenVPN créée par James Yonan en 2002. OpenVPN est l'une des solutions qui existe parmi beaucoup d'autres mais à l'immense avantage d’être sous licence GNU GPL et d'être disponible sur plusieurs OS.

OpenVPN création d'un réseaux virtuel

Pour la mise en œuvre de ce howto, nous avons besoin de deux machines. Un serveur j'utiliserai pour cela une machine virtuelle sous FreeBSD que nous avons créée précédemment. Pour faire office de client ma machine de tous les jours qui tourne sous Archlinux.

Topo de départ :

  • Serveur
    • FreeBSD 11.0
    • IP 192.168.100.80
  • Client
    • Archlinux
    • IP : 192.168.100.110

Serveur OpenVPN

Installation d'openvpn sous FreeBSD pkg install openvpn

Créer le répertoire de configuration et copier le fichier exemple openvpn.conf. mkdir /usr/local/etc/openvpn cp /usr/local/share/examples/openvpn/sample-config-files/openvpn.conf

On va aussi récupérer le dossier "easy-rsa" grâce auquel, on va générer facilement toutes les clés et certificats nécessaire. cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa cd /usr/local/etc/openvpn/easy-rsa

Nous allons éditer le fichier vars pour l'adapter à notre situation

set_var  EASYRSA_REQ_COUNTRY	"FR"
set_var EASYRSA_REQ_PROVINCE	"PARIS"
set_var EASYRSA_REQ_CITY	"PARIS"
set_var EASYRSA_REQ_ORG		"BINSP"
set_var EASYRSA_REQ_EMAIL	"contactAROBASEbinspPOINTnet"
set_var EASYRSA_REQ_OU		"BINSP"

Pour une sécurité plus pérenne modifier la taille de la clé

set_var EASYRSA_KEY_SIZE	4096

Vous pouvez aussi modifier la date de validité par défaut de 10 ans

#set_var EASYRSA_CA_EXPIRE       3650
#set_var EASYRSA_CERT_EXPIRE     3650

Nous allons maintenant initialiser l'infrastructure de clé publique ./easyrsa.real init-pki

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /usr/local/etc/openvpn/easy-rsa/pki

Nous allons maintenant créer notre autorité de certification qui nous demandera un mot de passe et le "COMMON NAME" de votre autorité ./easyrsa.real build-ca

Note: using Easy-RSA configuration from: ./vars
Generating a 4096 bit RSA private key
.................................................++
writing new private key to '/usr/local/etc/openvpn/easy-rsa/pki/private/ca.key.Yc6EXjoQg5'
Enter PEM pass phrase: ""******"" 
Verifying - Enter PEM pass phrase : ""******""  
-----
You are about to be asked to enter information that will be incorporated
..
-----
Common Name (eg: your user, host, or server name) \[Easy-RSA CA\]: BINSP
--
Your new CA certificate file for publishing is at:
/usr/local/etc/openvpn/easy-rsa/pki/ca.crt

Nous allons maintenant générer les certificats pour notre serveur Si vous ne voulez pas fournir de mot de passe au lancement du serveur. Il faut ajouter l'option nopass à votre ligne de commande ./easyrsa.real build-server-full openvpn-server nopass

Note: using Easy-RSA configuration from: ./vars
Generating a 4096 bit RSA private key
...........................................................++
............++
writing new private key to '/usr/local/etc/openvpn/pki/private/server.key.Z6kUgRYl7Y'
-----
Using configuration from /usr/local/etc/openvpn/openssl-1.0.cnf
Enter pass phrase for /usr/local/etc/openvpn/pki/private/ca.key:""******""
Check that the request matches the signature
Signature ok
commonName            :ASN.1 12:'server'
Certificate is to be certified until Dec 29 13:34:47 2026 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Nous allons maintenant créer un certificat pour notre client (attention chaque client devra avoir son propre certificat) ./easyrsa.real build-client-full client1

Note: using Easy-RSA configuration from: ./vars
Generating a 4096 bit RSA private key
..................................................................++
writing new private key to '/usr/local/etc/openvpn/pki/private/client1.key.f1RXvpmPYP'
Enter PEM pass phrase:""******""
Verifying - Enter PEM pass phrase:""******""
-----
Using configuration from /usr/local/etc/openvpn/openssl-1.0.cnf
Enter pass phrase for /usr/local/etc/openvpn/pki/private/ca.key:""******""
Check that the request matches the signature
Signature ok
..
commonName            :ASN.1 12:'client1'
Certificate is to be certified until Dec 29 13:37:14 2026 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Création des paramètres Diffie-Hellman (cela prend un certain temps) ./easyrsa.real gen-dh

Note: using Easy-RSA configuration from: ./vars
Generating DH parameters, 4096 bit long safe prime, generator 2
This is going to take a long time
............+.........+.................................................
.................................................+.+................+..
.......................+.............................+.................
...............................................................++*++*

DH parameters of size 4096 created at /usr/local/etc/openvpn/pki/dh.pem

Pour une sécurité accrue et pour bloquer les attaques de type DoS et bloquer les flood sur les ports UDP générez une clé statique cd /usr/local/etc/openvpn mkdir keys openvpn --genkey --secret keys/static.key

Voila, nous disposons de tous les fichiers pour sécuriser notre liaison.

ca.crt		# Certificat  Root CA : Serveur et client
dh.pem		# Paramétre de Diffie Hellman : Serveur 
issued/client1.crt	# Certificat client : Client
issued/server.crt	# Certificat serveur : Serveur
private/client1.key	# Clé client : Client 1 et seulement lui
private/server.key	# Clé serveur : Serveur

Nous allons maintenant placer les fichiers nécessaire au serveur cd /usr/local/etc/openvpn mkdir keys cd esay-rsa/pki cp dh.pem ca.crt issued/server.crt private/server.key /usr/local/etc/openvpn/keys

Configuration serveur openvpn

Modifions maintenant la configuration (/usr/local/etc/openvpn.conf) en fonction des fichiers que nous avons généré

...
ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/server.crt
key /usr/local/etc/openvpn/keys/server.key
...
dh /usr/local/etc/openvpn/keys/dh.pem
...
tls-auth  /usr/local/etc/openvpn/keys/static.key 0
..
cipher AES-256-CBC

Lancement du service openvpn

Ajoutons le script pour un lancement au démarrage du serveur puis démarrons-le. echo "openvpn_enable='YES'" >> /etc/rc.conf service openvpn start

S'il n'y a pas d'erreur, nous pouvons voir la création de tun0 avec la commande ifconfig

tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
 	options=80000<LINKSTATE>
 	inet6 fe80::50df:5371:e1c2:f2a1%tun0 prefixlen 64 tentative scopeid 0x3
 	inet 10.8.0.1 --> 10.8.0.2  netmask 0xffffffff 
 	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
 	groups: tun 
  	Opened by PID 4158

Client OpenVPN

Passons maintenant à notre client vpn

Installation sous ArchLinux pacman -S openvpn

Nous récupérons de manière sécurisée les clés précédemment générées cd /etc/openvpn mkdir keys cd keys scp root@192.168.100.80:/usr/local/etc/openvpn/static.key . scp root@192.168.100.80:/usr/local/etc/openvpn/pki/ca.crt . scp root@192.168.100.80:/usr/local/etc/openvpn/pki/issued/client1.crt . scp root@192.168.100.80:/usr/local/etc/openvpn/pki/private/client1.key .

Configuration du client

Copier le fichier de configuration "example" cp /usr/share/openvpn/examples/client.conf /etc/openvpn/client/ Modifions le fichier openvpn.conf

remote 192.168.100.80 1194
...
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/client.crt
key /etc/openvpn/keys/client1.key
..
tls-auth /etc/openvpn/keys/static.key 1
..
cipher AES-256-CBC

Connection au serveur

Nous pouvons maintenant, nous connecter à notre serveur vpn. cd /etc/openvpn openvpn client/client.conf

Nous voilà connecté à la machine distante et avons une nouvelle ip.

ip a
8: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.6 peer 10.8.0.5/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::18a:d158:e6e5:59a9/64 scope link flags 800 
       valid_lft forever preferred_lft forever

La discussion continue ailleurs

URL de rétrolien : https://www.binsp.net/?trackback/14

Fil des commentaires de ce billet

Page top