Mise en place d'un VPN avec OpenVPN

De Linux Server Wiki
Aller à la navigation Aller à la recherche


Prérequis

Pour commencer, il faut avoir installé openssl. Si ce n'est pas déjà fait :

aptitude install openssl

Ce tutoriel suppose que vous avez déjà mis en place une autorité de certification. Pour être précis, j'ai utilisé une autorité root, un autorité intermédiaire onyxCA, et enfin, une autorité vpnCA qui sera chargée de délivrer les certificats serveur et clients openvpn :

rootCA
 |-onyxCA
   |-vpnCA
     |-serveurVPN
     |-clientsVPN

Installation

Installez openvpn avec aptitude :

aptitude install openvpn

Génération des certificats

Modifiez votre fichier /etc/ssl/openssl.cnf :

[VPN_SERVER]
nsComment                       = "VPN Server Certificate"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                   = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation, keyEncipherment
nsCertType                      = server
extendedKeyUsage                = serverAuth

[VPN_PFOO]
nsComment                       = "VPN Pfoo Certificate"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                   = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation
nsCertType                      = client
extendedKeyUsage                = clientAuth

Nous allons maintenant générer le certificat du serveur openvpn puis le signer avec notre autorité vpn_ca :

openssl req -nodes -newkey rsa:2048 -keyout vpn.csnu.org.key -out vpn.csnu.org.req
openssl ca -name vpn_ca -extensions VPN_SERVER -in vpn.csnu.org.req -out vpn.csnu.org.pem

Puis générez votre clé Diffie-Hellman de 2048 bits:

openssl dhparam -out dh2048.pem 2048

Déplacez ces fichiers dans /etc/openvpn/ssl/ :

mkdir /etc/openvpn/ssl
mv vpn.csnu.org.* /etc/openvpn/ssl/
mv dh2048.pem /etc/openvpn/ssl/

Enfin, générez le certificat pour un premier client vpn, et signez le avec votre autorité :

openssl req -nodes -newkey rsa:2048 -keyout vpn.pfoo.key -out vpn.pfoo.req
openssl ca -name vpn_ca -extensions VPN_PFOO -in vpn.pfoo.req -out vpn.pfoo.pem

Configuration

Des exemples de configurations pour le serveur et le client openvpn se trouvent dans /usr/share/doc/openvpn/examples. Sur votre serveur, copiez l'exemple de configuration dans /etc/openvpn/ :

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
gunzip /etc/openvpn/server.conf.gz

Voici par exemple mon fichier de configuration :

local 178.33.250.38
port 1194
proto udp
dev tun
ca /etc/openvpn/ssl/ca_chain.pem
cert /etc/openvpn/ssl/vpn.csnu.org.pem
key /etc/openvpn/ssl/vpn.csnu.org.key
dh /etc/openvpn/ssl/dh2048.pem
#on va attribuer les ips vpn en 10.8.0.X
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
#la route doit être l'ip externe du serveur (si on veut utiliser la connexion de ce serveur)
;push "route 178.33.250.38 255.255.255.0"
#De même, force le client a rediriger son trafic vers le vpn (il faudra aussi faire un nat du range vpn (10.8.) vers internet (178.33.250.38)
;push "redirect-gateway def1 bypass-dhcp"
comp-lzo
max-clients 10
user nobody
group nogroup
log-append  /var/log/openvpn.log