====== OpenVPN ======
===== Installation d'un VPN =====
==== Préparation serveur ====
- Installer OpenVPN : apt-get install openvpn
- Copier EasyRSA (paquet facilitant la génération de certificats) dans le répertoire d'OpenVPN : cp -r /usr/share/easy-rsa/ /etc/openvpn
- Renommer /etc/openvpn/easy-rsa/vars.example en /etc/openvpn/easy-rsa/vars et éditer le fichier :
export KEY_COUNTRY="FR"
export KEY_PROVINCE="FR"
export KEY_CITY="FR"
export KEY_ORG="exemple.com"
export KEY_EMAIL="exemple@exemple.com"
==== Création clés et certificats côté serveur ====
- Initialiser PKI : ./easyrsa init-pki
- Créer le CA : ./easyrsa build-ca nopass
- Générer la clé pour le serveur : ./easyrsa gen-req myserver nopass
- Signer le certificat du serveur avec le CA : ./easyrsa sign-req server myserver
- Générer les paramètres d'échanges de clés Diffie-Helman : ./easyrsa gen-dh
- Générer une clé statique : openvpn --genkey --secret ta.key
- Déplacer les certificats et clés dans le répertoire de openvpn :
cd /etc/openvpn/easy-rsa/pki
mv ca.crt dh.pem private/myserver.key issued/myserver.crt /etc/openvpn/server/
- Création d'un répertoire jail dans lequel le demon openvpn sera chrooté : mkdir /etc/openvpn/jail
- Création du fichier de conf server.conf
Exemple de configuration pour un VPN en tun utilisant le port 443 :
# Serveur TCP/443
mode server
proto tcp
port 443
dev tun
# Clés et certificats
ca ca.crt
cert myserver.crt
key myserver.key
dh dh.pem
tls-auth ta.key 0
cipher AES-256-CBC
# Réseau
server 10.0.0.0 255.255.255.0
keepalive 10 120
duplicate-cn
client-to-client
# Sécurité
user nobody
group nogroup
chroot /etc/openvpn/jail
persist-key
persist-tun
comp-lzo
# Log
verb 5
mute 20
status openvpn-status.log
log-append /var/log/openvpn.log
==== Création clés et certificats pour le client ====
- Générer la clé pour le client : ./easyrsa gen-req client1
- Signer le certificat du serveur avec le CA : ./easyrsa sign-req client client1
- Copier la clé et les certificats dans le répertoire client :
cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client1.crt /etc/openvpn/client/
cp pki/private/client1.key /etc/openvpn/client/
- Création du fichier de conf client.ovpn avec les clés et certificats
Exemple d'un fichier de configuration client :
# Client
client
dev tun
proto tcp-client
remote 93.184.216.34 443
resolv-retry infinite
cipher AES-256-CBC
auth SHA512
auth-user-pass
persist-tun
persist-key
remote-cert-tls server
tls-client
comp-lzo
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE----
XXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
-----BEGIN ENCRYPTED PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXX
-----END ENCRYPTED PRIVATE KEY-----
key-direction 1
-----BEGIN OpenVPN Static key V1-----
XXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXX
-----END OpenVPN Static key V1-----
Redémarrer le serveur si l'interface tun0 n'est toujours pas présente
==== Configuration parfeu ====
On effectuera ici une configuration sous Nftables pour permettre la connexion à un VPN utilisant l'interface tun et le port 443
table inet filter {
chain input {
type filter hook input priority 0; policy accept;
../..
Reste configuration
../..
tcp dport https accept comment "Allow HTTPS"
log prefix "Nftables_drop " drop
}
}
table ip nat {
chain prerouting {
type nat hook prerouting priority -100; policy accept;
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
ip saddr 10.0.0.0/24 oif "eth0" masquerade
}
}
===== Trucs divers =====
* Dans /etc/openvpn/easy-rsa/vars, ne pas hésiter à modifier le champs EASYRSA_KEY_SIZE pour augmenter la taille des clés RSA générées
===== Sources/Docs =====
* Référence de configuration : [[https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/]]
* [[https://debian-facile.org/doc:reseau:openvpn]]
* Guide doc officielle : [[https://openvpn.net/community-resources/how-to/#setting-up-your-own-certificate-authority-ca-and-generating-certificates-and-keys-for-an-openvpn-server-and-multiple-clients]]
* Création fichier de conf client en intégrant directement les clés et certificats : [[https://openvpn.net/faq/i-am-having-trouble-importing-my-ovpn-file/]]
* Tuto : [[https://www.howtoforge.com/tutorial/how-to-install-openvpn-server-and-client-with-easy-rsa-3-on-centos-7/#step-configure-easyrsa-]]