Geolocalização de Servidores Linux: Tutorial Completo com Bash e APIs

Determinar a posição geográfica de um sistema Linux remoto pode ser feito através de APIs abertas e um script simples em bash. A localização geográfica de um servidor permite rastreá-lo no espaço físico, garantindo que eles estejam situados em regiões estratégicas.

Todo servidor conectado à internet possui um endereço IP público. Este endereço é alocado diretamente ao servidor ou a um roteador que encaminha o tráfego para ele. Os endereços IP fornecem pistas sobre a localização do servidor no mundo. Podemos obter informações de geolocalização através de APIs abertas, como as fornecidas por ipinfo.co e IP Vigilante, e assim descobrir a cidade, estado e país associados a um servidor ou outro sistema remoto. É importante ressaltar que esta informação não oferece uma localização GPS precisa, mas sim uma ideia da área geral do endereço IP.

Conectando-se a um Sistema Remoto

Os comandos a seguir serão executados no servidor Linux ou outros sistemas remotos que se deseja geolocalizar. Portanto, é necessário primeiro conectar-se ao servidor e acessar seu shell. Uma opção comum é conectar-se via SSH. Embora seja possível executar os comandos no sistema local para descobrir sua própria localização, presume-se que você já a conheça.

Instalando curl e jq

Para acessar as APIs de geolocalização, necessitamos de duas ferramentas: curl, para realizar requisições HTTP, e jq, para processar os dados em formato JSON que receberemos. Em sistemas baseados em Ubuntu ou Debian, utilize o apt-get para instalar essas ferramentas através do terminal. Em outras distribuições Linux, utilize a ferramenta de instalação de pacotes específica da sua distribuição.

sudo apt-get install curl jq

Descobrindo o Endereço IP Público do Servidor

Antes de obter os dados de geolocalização, é preciso saber o endereço IP público do servidor. Use o curl para fazer uma requisição à API ipinfo.io a partir do terminal.

curl https://ipinfo.io/ip

Obtendo Dados de Localização via API

Com o IP público do servidor em mãos, podemos fazer uma requisição à API ipvigilante.com para obter os dados de geolocalização. Substitua <seu endereço ip> pelo endereço obtido no comando anterior.

curl https://ipvigilante.com/<seu endereço ip>

Observe com mais detalhes os dados recebidos:

A API retorna a cidade, o país e o continente onde o servidor está localizado. Também são retornadas as coordenadas de latitude e longitude aproximadas, caso seja necessário exibir o servidor em um mapa interativo. Utilizaremos os campos “latitude,” “longitude,” “city_name,” e “country_name” em nosso script. O comando jq consegue processar os dados da API e extrair esses campos.

Automatizando a Requisição à API com um Script

Podemos criar um script que colete os dados de geolocalização e os salve em um arquivo no formato CSV. Os dados serão armazenados em um arquivo chamado server_location.txt no diretório /tmp/. Abra seu editor de texto preferido e crie um script chamado geolocate.sh. Adicione o conteúdo abaixo e não se esqueça de substituir o endereço IP pelo seu:

#!/bin/sh

OUTPUT_FILE=/tmp/server_location.txt

# Obtém o endereço IP público do servidor
PUBLIC_IP=`curl -s https://ipinfo.io/ip`

# Faz a requisição à API de geolocalização e captura a saída
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

Salve o script e retorne ao terminal. Dê permissão de execução ao script para que ele possa ser executado a partir do terminal.

chmod u+x geolocate.sh

Agora o script está pronto para ser testado. Execute geolocate.sh e verifique o conteúdo do arquivo de saída:

./geolocate.sh
cat /tmp/server_location.txt

Atualizando os Dados de Geolocalização Diariamente com um Cron Job

Vamos configurar um cron job para que o servidor atualize sua geolocalização e salve os dados em um arquivo diariamente. O cron job diário atualizará o arquivo server_location.txt na pasta /tmp/ do servidor. Configurar um cron job de 24 horas é tão simples quanto colocar o script no diretório /etc/cron.daily. Utilize o comando sudo para copiar o arquivo como o usuário root, evitando problemas de permissão. Execute o seguinte comando para copiar geolocate.sh para o diretório /etc/cron.daily:

sudo cp geolocate.sh /etc/cron.daily

As mudanças têm efeito imediato, e o script será executado a cada 24 horas, atualizando o arquivo /tmp/server_location.txt. Os dados obtidos podem ser usados para diversas finalidades, como exibir os servidores em um mapa ou combinar informações de geolocalização com registros de tráfego para identificar as regiões com maior atividade nos servidores.