Il est tout à fait possible de déterminer la position géographique d’un système Linux distant en exploitant des API publiques et un simple script bash. Cette géolocalisation peut s’avérer utile pour suivre vos serveurs à travers le monde et vous assurer qu’ils sont déployés dans des zones stratégiques.
Chaque serveur connecté à Internet possède une adresse IP publique, directement attribuée au serveur ou à un routeur qui achemine le trafic vers celui-ci. Les adresses IP fournissent des indications sur la situation géographique d’un serveur. Des informations de géolocalisation peuvent être obtenues grâce à deux API ouvertes, fournies par ipinfo.co et IP Vigilante, permettant de connaître la ville, la région et le pays associés à un serveur ou tout autre système distant. Bien qu’elles ne donnent pas une position GPS précise, ces données permettent de déterminer la zone générale où se trouve l’adresse IP.
Connexion à un système distant
Les commandes suivantes doivent être exécutées sur le serveur Linux ou tout autre système distant que vous souhaitez géolocaliser. Vous devez donc vous connecter au serveur et accéder à un shell au préalable, par exemple via SSH. Vous pouvez exécuter ces commandes sur votre système local pour en trouver la localisation, mais il est fort probable que vous connaissiez déjà votre position !
Installation de curl et jq
Deux outils sont nécessaires pour interagir avec l’API de géolocalisation : curl, qui permet d’effectuer des requêtes HTTP, et jq, qui permet de manipuler les données JSON obtenues en réponse. Ouvrez un terminal et utilisez la commande `apt-get` pour installer ces outils sur les systèmes Ubuntu ou Debian. Sur d’autres distributions Linux, utilisez l’outil de gestion de paquets propre à votre distribution.
sudo apt-get install curl jq
Récupération de l’adresse IP publique du serveur
L’adresse IP publique du serveur est indispensable pour obtenir les informations de géolocalisation. Utilisez la commande curl pour effectuer un appel API à ipinfo.io dans votre terminal :
curl https://ipinfo.io/ip
Obtention des données de localisation via l’API
Une fois l’adresse IP publique du serveur connue, un appel à l’API d’ipvigilante.com permet d’obtenir les données de géolocalisation. Remplacez <your ip address> par l’adresse IP obtenue lors de l’étape précédente :
curl https://ipvigilante.com/<your ip address>
Analysons les données retournées par cette requête :
L’API renvoie la ville, le pays et le continent où se trouve le serveur. Elle fournit également des coordonnées de latitude et de longitude approximatives, utiles pour positionner le serveur sur une carte interactive. Le script utilisera les champs « latitude », « longitude », « city_name » et « country_name ». La commande jq saura comment analyser les données JSON renvoyées par l’API et extraire ces quatre champs spécifiques.
Création d’un script pour automatiser les appels API
Un script peut être créé pour récupérer les données de géolocalisation et les enregistrer dans un fichier au format CSV. Les données seront enregistrées dans un fichier nommé `emplacement_serveur.txt` dans le répertoire `/tmp/`. Ouvrez votre éditeur de texte préféré et créez un script nommé `geolocate.sh`. Copiez le code ci-dessous en veillant à remplacer l’adresse IP par la vôtre :
#!/bin/sh OUTPUT_FILE=/tmp/server_location.txt # Récupérer l'adresse IP publique du serveur PUBLIC_IP=`curl -s https://ipinfo.io/ip` # Effectuer un appel à l'API de géolocalisation et capturer la réponse curl -s https://ipvigilante.com/${PUBLIC_IP} | jq '.data.latitude, .data.longitude, .data.city_name, .data.country_name' | while read -r LATITUDE; do read -r LONGITUDE read -r CITY read -r COUNTRY echo "${LATITUDE},${LONGITUDE},${CITY},${COUNTRY}" | tr --delete " > ${OUTPUT_FILE} done
Enregistrez le script et revenez au terminal. Rendez le script exécutable en lui attribuant les droits d’exécution :
chmod u+x geolocate.sh
Le script est maintenant prêt à être testé. Exécutez `geolocate.sh` et vérifiez le contenu du fichier de sortie :
./geolocate.sh cat /tmp/server_location.txt
Mise à jour quotidienne des données de géolocalisation via une tâche Cron
Il est possible de configurer une tâche cron pour que le serveur mette à jour quotidiennement ses données de géolocalisation et les enregistre dans un fichier. Cette tâche planifiée mettra à jour un fichier nommé `emplacement_serveur.txt` dans le répertoire `/tmp/` du serveur. La création d’une tâche cron exécutée toutes les 24 heures est aussi simple que de placer le script dans le répertoire `/etc/cron.daily`. La commande `sudo` est nécessaire pour copier le fichier en tant qu’utilisateur root, afin d’éviter tout problème d’autorisation. Exécutez la commande suivante pour copier le script `geolocate.sh` dans le répertoire `/etc/cron.daily` :
sudo cp geolocate.sh /etc/cron.daily
Ces modifications sont immédiates. Le script s’exécutera toutes les 24 heures pour mettre à jour le contenu du fichier `/tmp/server_location.txt`. Ces données peuvent être utilisées pour réaliser différentes actions, comme par exemple, afficher nos serveurs sur une carte ou combiner les données de géolocalisation avec les journaux de trafic afin d’identifier nos points chauds de serveurs à travers le monde.