Mise en place d'un VPN avec OpenVPN
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/
Nous allons maintenant générer une clé TLS pour bloquer les attaques DoS ainsi que le floot UDP en créant un firewall HMAC :
openvpn --genkey --secret /etc/openvpn/ssl/ta.key
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 #configuration ssl 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 #stocker l'association entre un client et l'ip vpn. Ainsi, quand un client se reconnecte, il conservera la même ip vpn. 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" tls-auth /etc/openvpn/ssl/ta.key 0 comp-lzo max-clients 10 user nobody group nogroup log-append /var/log/openvpn.log
Définissez bien-sur l'ip de votre serveur à la ligne local
. Vous noterez aussi que pour l'instant, la redirection du trafic (les lignes push
) est désactivé.
Configuration de votre client
Récupérez la clé et votre certificat ssl sur votre ordinateur.