OpenVPN a de multiples éléments paramétrables.
Je vais mettre ici quelques éléments spécifiques que j'ai déjà eu à utiliser. J'utilise traditionnellement un Debian pour mettre en place mes serveurs OpenVPN.
On peut paramétrer son tunnel VPN du coté du serveur ou du coté du client. La principale différence est qu'il faudra utiliser le mot clé push lorsque l'on modifie le fichier de configuration du coté du serveur, également la configuration sera appliquée sur l'ensemble des clients.
Voyons la difference de synthaxe évoquée juste au dessus en mettant en place la même configuration des deux cotés. Ici avec le paramétrage du serveur DNS.
dhcp-option DNS 192.168.0.200
push "dhcp-option DNS 192.168.0.200"
dhcp-option DNS 192.168.0.200
dhcp-option DOMAIN domain.local
En terme de sécurité il peut être intéressant de restreindre les flux accessibles via le VPN, pour cela on pourra utiliser la commande iptables.
root@host:~# iptables -A FORWARD -o enp4s0 -p tcp --dport 3389 -j ACCEPT
root@host:~# iptables -A FORWARD -i enp4s0 -p tcp --sport 3389 -j ACCEPT
root@host:~# iptables -A FORWARD -o enp4s0 -p tcp --dport 53 -j ACCEPT
root@host:~# iptables -A FORWARD -o enp4s0 -p udp --dport 53 -j ACCEPT
root@host:~# iptables -A FORWARD -i enp4s0 -p udp --sport 53 -j ACCEPT
root@host:~# iptables -A FORWARD -i enp4s0 -p tcp --sport 53 -j ACCEPT
root@host:~# iptables -A FORWARD -o enp4s0 -j DROP
On peut activer le routage pour donner accès à l'intégralité d'un réseau.
net.ipv4.ip_forward = 1
root@host:~# sysctl -p /etc/sysctl.conf
root@host:~# iptables -t nat -A POSTROUTING -s 10.50.8.0/24 -o ens192 -j MASQUERADE
route 192.168.1.0 255.255.255.0
Ici un cas ou les adresses 192.168.0.251 et 192.168.0.250 seront accessibles via le VPN, le reste du réseau 192.168.0.0/24 sera quand à lui accessible via le LAN ou la passerelle par défaut interne. C'est particulièrement utile lorsque le Client et le Serveur utilisent le même plan d'adressage.
route 192.168.0.251 255.255.255.255
route 192.168.0.250 255.255.255.255
route 192.168.0.0 255.255.255.0 net_gateway
Pour se prémunir du scan de ports, attaque de type DOS sur le port UDP OpenVPN, des initiations de négociation SSL/TLS depuis des machines non authorisées et des vulnérabilités de type buffer overflow dans le protocole SSL/TLS (source) nous pouvons ajouter la protection clé HMAC.
root@host:~# openvpn --genkey --secret /etc/openvpn/pki/issued/ta.key
tls-crypt /etc/openvpn/pki/issued/ta.key 0
tls-crypt ta.key 1
OpenVPN donne la possibilité de se prémunir des attaques de type Man-in-the-Middle. Si cela n'est pas paramétré le message : WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info. devrait apparaitre dans les logs du client.
remote-cert-tls server
Dans le cas ou des certificats auraient été compromis (vol d'un portable utilisateur) ou si un utilisateur ne fait plus partie de l'entreprise, il peut être interessant de savoir comment révoquer/annuler un certificat.
root@host:~# . ./vars
root@host:~# ./revoke-full user
[…]
crl-verify /etc/openvpn/easy-rsa/keys/crl.pem
[…]
root@host:~# /etc/init.d/openvpn restart
#Configure la validité de la liste de révocation de certificats EasyRSA à 10 ans.
set_var EASYRSA_CRL_DAYS 3650
root@host:~# /usr/share/easy-rsa/easyrsa revoke user
Using SSL: openssl OpenSSL 1.1.1k 25 Mar 2021
Please confirm you wish to revoke the certificate with the following subject:
subject=
commonName = client_revoker
Type the word 'yes' to continue, or any other input to abort.
Continue with revocation: yes
Using configuration from /etc/openvpn/pki/easy-rsa-1425.nUpHJc/tmp.r2wWDy
Revoking Certificate 1EA551CC14F3856B8A30CD92BAE6F3BE.
Data Base Updated
IMPORTANT!!!
Revocation was successful. You must run gen-crl and upload a CRL to your
infrastructure in order to prevent the revoked cert from being accepted.
root@host:~# /usr/share/easy-rsa/easyrsa gen-crl
Using SSL: openssl OpenSSL 1.1.1k 25 Mar 2021
Using configuration from /etc/openvpn/pki/easy-rsa-1468.2IiBpN/tmp.0UJjU8
An updated CRL has been created.
CRL file: /etc/openvpn/pki/crl.pem
[…]
crl-verify /etc/openvpn/easy-rsa/keys/crl.pem
[…]
root@host:~# systemctl restart openvpn@server.service
En cas du message WARNING: Your certificate has expired!.
root@host:~# openssl x509 -in /etc/openvpn/pki/issued/server.crt -noout -text | grep -i "not after"
root@host:~# ./easyrsa renew server nopass
root@host:~# copy server.crt /etc/openvpn/pki/issued/server.crt
root@host:~# copy server.key /etc/openvpn/pki/private/server.key
root@host:~# systemctl restart openvpn@server.service
root@host:~# ./easyrsa renew user01 nopass
Enfin, remplacer les fichiers ./private/user01.key et ./issued/user01.crt nouvellement créés dans le dossier de configuration openvpn sur le PC du client.
status /var/log/openvpn-status.log
root@host:~# cat /var/log/openvpn-status.log
Contact :