Lorsque l’on souhaite mettre à disposition des employés un VPN, il est important de savoir qui l’utilise. Il existe évidement le log habituel, mais pas très pratique dans la majorité des cas.
Pour savoir qui est connecté en temps réel, on peut déjà utiliser cette option dans la configuration serveur l’OpenVPN :
status /var/log/openvpn-status.log
Mais c’est encore mieux d’être averti par mail en live que quelqu’un se connecte à notre VPN OpenVPN !
Il faut ajouter ces 3 lignes dans le fichier de configuration serveur OpenVPN :
script-security 2 client-connect /usr/local/bin/openvpn-notify.sh client-disconnect /usr/local/bin/openvpn-notify.sh
Cela permet à OpenVPN de faire appel à ces scripts lors d’une connexion ou déconnexion d’un client. Dans mon cas, c’est le même script, car des variables d’environnement permettent d’obtenir l’action (connect ou disconnect) et de gérer l’action désirée dans le script.
Les variables d’environnement servent à passer les paramètres d’OpenVPN dont on a besoin dans notre script. Il existe une liste liste impressionnante, voir le man d’openvpn à la section Environmental Variables.
Celles que j’ai utilisées :
- $script_type : permet de récupérer l’action client-connect ou client-disconnect
- $config : permet de récupérer le chemin absolut de la configuration vpn (pratique si on dispose de plusieurs VPN afin de les distinguer)
- $common_name : le nom du client openvpn afin de savoir qui s’y connecte
- $trusted_ip : l’IP publique par laquelle le client se connecte au VPN
- $ifconfig_remote : l’IP interne du VPN obtenue par le client
Je vous livre mon script « tout fait qui va bien » dans la suite de cet article, il est personnalisable et sous licence GPLv3.
Dans ce script les fonctions connect-action et disconnect-action sont personnalisables.
Dans mon cas je n’utilise que la notification mail appelée dans une autre fonction. openvpn-notify.sh.
#!/bin/bash # Auteur : Belgotux # Site : www.monlinux.net # Adresse : # Version : 1.0 # Date : 08-03-2015 # Licence : GPLv3 # Changelog : # Description : # use openvpn local environment variable, see openvpn man # In your server config file : # client-connect /usr/local/bin/openvpn-notify.sh # client-disconnect /usr/local/bin/openvpn-notify.sh MAILTO=root function connect-action () { mail-notify } function disconnect-action () { mail-notify } function mail-notify () { (echo " action = $script_type VPN = $config Common name = $common_name Public IP address = $trusted_ip VPN get address = $ifconfig_remote" ) | mail -s "$script_type $(basename $config .conf) $common_name" $MAILTO return $? } case $script_type in client-connect) connect-action ;; client-disconnect) disconnect-action ;; *) exit 0 ;; esac exit 0
On fait un reload d’openvpn pour les options serveur rajoutées et voilà.
18 janvier 2023 at 08:38
Merci pour ce script bien utile !
note : il faut ajouter (dorénavant?) l’option « script-security 2 » dans le fichier /etc/openvpn/server.conf avant les lignes d’appel
script-security 2
client-connect /usr/local/bin/openvpn-notify.sh
client-disconnect /usr/local/bin/openvpn-notify.sh
Pour la partie configuration du compte mail, j’ai un peu lutté mais j’ai réussi en créant un compte spécifique sur gmail puis en activant l’authentification en 2 étapes ce qui permet de disposer d’un mot de passe renforcé pour les applications.
Ne pas oublier de mettre les droits d’exécution sur le script et dernier tips, on obtient quelques logs avec « grep VPN /var/log/syslog »
21 janvier 2023 at 18:08
Merci pour ton retour je vais éditer l’article, c’est vrai qu’il date un peu 🙂