È possibile determinare la posizione geografica di un sistema Linux remoto sfruttando API pubbliche e uno script bash semplice. La geolocalizzazione di un server può facilitare la sua identificazione nel mondo fisico, garantendo che i server siano posizionati in aree strategiche.
Ogni server connesso a Internet possiede un indirizzo IP pubblico, assegnato direttamente al server o a un router che indirizza il traffico verso quel server. Gli indirizzi IP forniscono indicazioni sulla posizione approssimativa del server a livello globale. I dati di geolocalizzazione possono essere ottenuti tramite due API aperte, fornite da ipinfo.co e IP Vigilante, permettendo di identificare la città, la regione e la nazione associate a un server o altro sistema remoto. È importante sottolineare che questa tecnica non fornisce una posizione GPS precisa, ma piuttosto una stima dell’area generale in cui si trova l’indirizzo IP.
Connessione a un sistema remoto
I seguenti comandi dovranno essere eseguiti sul server Linux o su altri sistemi remoti che si intende geolocalizzare. Pertanto, è necessario prima stabilire una connessione al server e accedere alla shell. Ad esempio, si può utilizzare SSH per la connessione. In alternativa, i comandi potrebbero essere eseguiti sul proprio sistema locale per determinarne la posizione, ma in genere la posizione del proprio sistema è già nota.
Installazione di curl e jq
Per interagire con le API di geolocalizzazione, sono necessari due strumenti: curl, che permette di effettuare richieste HTTP, e jq, che consente di elaborare i dati JSON restituiti. Aprire un terminale e utilizzare apt-get per installare questi strumenti su sistemi basati su Ubuntu o Debian. Per altre distribuzioni Linux, utilizzare il gestore di pacchetti specifico della propria distribuzione.
sudo apt-get install curl jq
Individuazione dell’indirizzo IP pubblico del server
Prima di poter acquisire i dati di geolocalizzazione, è necessario conoscere l’indirizzo IP pubblico del server. Utilizzare curl per effettuare una chiamata API a ipinfo.io all’interno della finestra del terminale.
curl https://ipinfo.io/ip
Acquisizione dei dati di posizione tramite API
Una volta ottenuto l’indirizzo IP pubblico del server, è possibile effettuare una richiesta all’API di ipvigilante.com per recuperare i dati di geolocalizzazione. Sostituire
curl https://ipvigilante.com/
Analizziamo più nel dettaglio quali dati vengono restituiti da questa chiamata:
L’API fornisce informazioni sulla città, il paese e il continente in cui si trova il server. Inoltre, vengono fornite le coordinate approssimative di latitudine e longitudine, utili per visualizzare il server su una mappa interattiva. Nello script, verranno utilizzati i campi “latitude”, “longitude”, “city_name” e “country_name”. Il comando jq è in grado di elaborare i dati API ed estrarre questi quattro campi specifici.
Creazione di uno script per l’automazione della chiamata API
È possibile creare uno script che recuperi i dati di geolocalizzazione e li scriva in un file in formato CSV. I dati saranno salvati in un file denominato server_location.txt nella directory /tmp/. Aprire il proprio editor preferito e creare uno script chiamato geolocate.sh. Inserire il contenuto dello script riportato di seguito, avendo cura di sostituire l’indirizzo IP con quello appropriato:
#!/bin/sh OUTPUT_FILE=/tmp/server_location.txt # Recupera l'indirizzo IP pubblico del server PUBLIC_IP=`curl -s https://ipinfo.io/ip` # Chiama l'API di geolocalizzazione e cattura l'output 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
Salvare lo script e tornare al terminale. Rendere lo script eseguibile, concedendo i permessi di esecuzione sul file:
chmod u+x geolocate.sh
Ora è possibile provare lo script. Eseguire geolocate.sh e verificare il contenuto del file di output:
./geolocate.sh cat /tmp/server_location.txt
Aggiornamento giornaliero dei dati di geolocalizzazione tramite Cron Job
Configurare un cron job per aggiornare quotidianamente la geolocalizzazione del server e salvare i dati in un file. Il cron job giornaliero aggiornerà un file denominato server_location.txt nella cartella /tmp/ del server. Creare un cron job che venga eseguito ogni 24 ore è semplice come copiare lo script nella directory /etc/cron.daily. È necessario utilizzare il comando sudo per copiare il file come utente root ed evitare problemi di permessi. Eseguire il comando seguente per copiare geolocate.sh nella directory /etc/cron.daily:
sudo cp geolocate.sh /etc/cron.daily
Queste modifiche hanno effetto immediato, e lo script verrà eseguito ogni 24 ore per aggiornare il contenuto del file /tmp/server_location.txt. Questi dati possono essere utilizzati per scopi diversi, ad esempio, tracciare la posizione dei server su una mappa o combinare la geolocalizzazione con i log del traffico per identificare i punti caldi dei server a livello globale.