En parcourant Internet à la recherche d'outils pouvant être utilisés pour surveiller les connexions OpenVPN actives, je suis tombé sur un outil basé sur python appelé openvpn-monitor qui utilise l'interface de gestion OpenVPN pour générer un rapport html qui affiche l'état d'un serveur OpenVPN, y compris tous les Connexions.
Comment surveiller les connexions OpenVPN à l'aide de l'outil openvpn-monitor
Prérequis
Avant de pouvoir continuer, il y a quelques éléments qui doivent être configurés.
Installer et configurer le serveur OpenVPN
Bien sûr, vous pouvez vouloir surveiller les connexions du serveur OpenVPN sans qu'un serveur OpenVPN ne soit en cours d'exécution. Suivez les liens ci-dessous pour installer et configurer le serveur OpenVPN sur les systèmes CentOS/Ubuntu ;
Installer et configurer le serveur OpenVPN sur CentOS 8
Installer et configurer le serveur OpenVPN sur Ubuntu 20.04
Activer l'interface de gestion
openvpn-monitor
tools nécessite que l'interface de gestion OpenVPN soit activée. L'interface de gestion OpenVPN permet à OpenVPN d'être contrôlé administrativement à partir d'un programme externe via un socket de domaine TCP ou Unix. Le serveur de gestion OpenVPN peut être activé sur un socket Unix ou sur un port TCP désigné. Bien que l'utilisation du socket Unix soit la méthode recommandée, l'outil openvpn-monitor utilise la connexion TCP de l'interface de gestion OpenVPN. Il est donc fortement recommandé de définir l'IP de l'interface de gestion OpenVPN sur 127.0.0.1 (localhost) pour limiter l'accessibilité du serveur de gestion aux clients locaux.
La connexion TCP de l'interface de gestion OpenVPN peut être activée en modifiant le fichier de configuration du serveur OpenVPN et en ajoutant la ligne management IP port
.
vim /etc/openvpn/server/server.conf
... comp-lzo persist-key persist-tun status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 3 explicit-exit-notify 1 auth SHA512 # Enable OpenVPN Management Interface on localhost using TCP port 17562 management 127.0.0.1 17562
La ligne ;
management 127.0.0.1 17562
Définit l'adresse IP de l'interface de gestion OpenVPN sur 127.0.0.1 (localhost) et le port TCP 17562. Le moniteur openvpn s'attend à ce que l'interface de gestion OpenVPN écoute sur le port TCP 5555. Nous modifierons cela plus tard.
Vérifiez que le port attribué n'est utilisé par aucun autre programme sur votre système ;
lsof -i :17562
Si aucune application n'utilise le port, redémarrez le service serveur OpenVPN ;
systemctl restart [email protected]
Vérifiez que le port est maintenant ouvert ;
lsof -i :17562
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
openvpn 44178 root 3u IPv4 189028 0t0 TCP localhost:17562 (LISTEN)
Assurez-vous que le service de serveur OpenVPN est en cours d'exécution ;
systemctl status [email protected]
● [email protected] - OpenVPN service for server Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-08-16 16:15:46 UTC; 1h 15min ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 44178 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 2282) Memory: 1.9M CGroup: /system.slice/system-openvpn\x2dserver.slice/[email protected] └─44178 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf Aug 16 16:15:46 ubuntu20.kifarunix-demo.com systemd[1]: Starting OpenVPN service for server... Aug 16 16:15:46 ubuntu20.kifarunix-demo.com systemd[1]: Started OpenVPN service for server.
Installer et configurer l'outil openvpn-monitor
Il existe différentes méthodes d'installation de l'outil openvpn-monitor, comme indiqué dans le référentiel Github du programme. Dans ce didacticiel, nous utiliserons Apache pour servir de serveur aux connexions OpenVPN openvpn-monitor.
Installer Apache pour openvpn-monitor
Installez Apache et les dépendances de paquet requises ;
apt install git apache2 libapache2-mod-wsgi python3-geoip2 python3-ipaddr python3-humanize python3-bottle python3-semantic-version geoip-database geoipupdate
Télécharger le programme openvpn-monitor
Ensuite, clonez le référentiel Github openvpn-monitor dans le répertoire racine de votre serveur Web par défaut. Dans cette configuration, nous utilisons /var/www/html/openvpn-monitor
répertoire.
git clone https://github.com/furlongm/openvpn-monitor.git /var/www/html/openvpn-monitor
ls /var/www/html/openvpn-monitor/
AUTHORS COPYING images MANIFEST.in openvpn-monitor.conf.example openvpn-monitor.py README.md requirements.txt setup.py tests VERSION.txt
Configurer openvpn-monitor
Renommez l'exemple de fichier de configuration, openvpn-monitor.conf.example
à openvpn-monitor.conf
.
cp /var/www/html/openvpn-monitor/openvpn-monitor.conf{.example,}
Remplacez l'interface de gestion OpenVPN si vous l'avez changée en un port autre que 5555 défini sur openvpn-monitor.py
Programme Python.
cd /var/www/html/openvpn-monitor
grep -irl 5555 . | xargs -I {} sed -i 's/5555/17562/' {}
Ensuite, vous pouvez maintenant ouvrir le fichier de configuration et définir le nom du site, ajouter un logo, définir l'emplacement de la carte par défaut (latitude et longitude, par défaut à New York, États-Unis).
Voici à quoi ressemble notre fichier de configuration modifié :
cat /var/www/html/openvpn-monitor/openvpn-monitor.conf
[openvpn-monitor]
site=Kifarunix-demo-VPN
#logo=logo.jpg
latitude=11.016844
longitude=76.955833
maps=True
geoip_data=/var/lib/GeoIP/GeoLite2-City.mmdb
datetime_format=%d/%m/%Y %H:%M:%S
[VPN1]
host=localhost
port=17562
name=Kifarunix-demo VPN
show_disconnect=False
Notez l'emplacement de la base de données de la ville GeoIP2. S'il n'est pas disponible sur votre système, enregistrez-vous et téléchargez une version gratuite de MaxMind.
Une dernière chose est que cette configuration est testée sur Ubuntu 20.04, Python 3 étant la valeur par défaut. Puisque openvpn-monitor utilise python, créez simplement un lien symbolique de python 3 à python ;
ln -s /usr/bin/python3 /usr/bin/python
Configurer Apache pour exécuter le script openvpn-monitor
Ensuite, exécutez la commande ci-dessous pour configurer Apache afin qu'il exécute le script Python openvpn-monitor.
vim /etc/apache2/sites-available/openvpn-monitor.conf
ScriptAlias / /var/www/html/openvpn-monitor/openvpn-monitor.py
<Directory /var/www/html/openvpn-monitor>
Options +ExecCGI
AddHandler cgi-script .py
DirectoryIndex openvpn-monitor.py
AllowOverride None
Require ip 192.168.0.0/16
</Directory>
Enregistrez et quittez le fichier de configuration.
Définissez la propriété du répertoire racine Web openvpn-monitor sur l'utilisateur Apache, www-data
.
chown -R www-data: /var/www/html/openvpn-monitor/
Vérifiez la syntaxe de configuration d'Apache ;
apachectl -t
Syntax OK
Activez la configuration du site Apache openvpn-monitor et désactivez le site par défaut.
a2ensite openvpn-monitor.conf
a2dissite 000-default.conf
Démarrez Apache et activez-le pour qu'il s'exécute au démarrage du système ;
systemctl enable --now apache2
Déboguer openvpn-monitor
Vous pouvez exécuter openvpn-monitor à partir de la ligne de commande pour vérifier s'il génère réellement le rapport html correctement :
cd /var/www/html/openvpn-monitor python openvpn-monitor.py
Vous pouvez également ajouter l'option -d
pour le débogage ;
python openvpn-monitor.py -d
Exemple de sortie ;
...
oms.addListener("click", function(marker) {
popup.setContent(marker.alt);
popup.setLatLng(marker.getLatLng());
map.openPopup(popup);
});
oms.addListener("spiderfy", function(markers) {
map.closePopup();
});
bounds.extend(centre);
map.fitBounds(bounds);
</script>
</div></div>
<div class="well well-sm">
Page automatically reloads every 5 minutes.
Last update: <b>16/08/2020 19:10:26</b></div>
</div></body></html>
DEBUG:
=== begin vpns
{'VPN1': {'host': 'localhost',
'name': 'Staff VPN',
'port': '17562',
'release': 'OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] '
'[LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Sep '
'5 2019',
'sessions': {},
'show_disconnect': False,
'socket_connected': True,
'state': {'connected': 'CONNECTED',
'local_ip': IPv4Address('10.8.0.1'),
'mode': 'Server',
'remote_ip': '',
'success': 'SUCCESS',
'up_since': datetime.datetime(2020, 8, 16, 16, 15, 46)},
'stats': {'bytesin': 0, 'bytesout': 0, 'nclients': 0},
'version': Version('2.4.7')}}
=== end vpns
Accéder à openvpn-monitor sur le navigateur
Si tout va bien, vous pouvez maintenant accéder à vos statistiques OpenVPN via l'adresse http://<OpenVPN-server-Address/openvpn-monitor
ou http://<OpenVPN-server-Address/
selon notre redirection.
Et voilà. Magnifique, n'est-ce pas ? Tout le mérite revient à furlongm. Comme vous pouvez le voir, nous avons le statut de connexion pour mes clients OpenVPN connectés localement.
Cela marque la fin de notre guide sur la façon de surveiller les connexions OpenVPN à l'aide de l'outil openvpn-monitor. Profitez-en.
Référence
openvpn-monitor
Tutoriels associés
Installer et configurer le serveur OpenVPN sur Ubuntu 20.04
Configurer l'authentification basée sur OpenVPN LDAP
Attribuer des adresses IP statiques aux clients OpenVPN
Configurer le client VPN strongSwan sur Ubuntu 18.04/CentOS 8