Há poucos dias, precisei atualizar a base de dados GeoIP de nosso IPS Suricata e não encontrei uma atualização recente nos repositórios do Ubuntu. O pacote geoip-database estava defasado em mais de um ano. Como criei uma blacklist baseada em um gatilho com geoip, precisei encontrar uma forma de atualizar a base de dados ou incluir endereços manualmente.

Lembrei que, para ativar o suporte xt_geoip (netfilter), é preciso fazer download da base atualizada no formato CSV. Sendo assim, refiz o processo referente a aquisição do csv e pude constatar que muitos IPs, até então sem classificação em consultas com geoiplookup, estavam previstos nele.

Analisando a estrutura de arquivos dos pacotes (com dpkg -L) geoip-bin e geoip-database, verifiquei que a base de dados é definida pelo arquivo /usr/share/GeoIP/GeoIP.dat e existe uma ferramenta para atualização chamada /usr/lib/geoip/geoip-generator.

Com esta informação, foi possível atualizar o arquivo GeoIP.dat a partir de um csv.

# Atualização do csv
cd /usr/share/xt_geoip

sudo aptitude install libtext-csv-xs-perl
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
# Atualização da base de dados
/usr/lib/geoip/geoip-generator -v -o /usr/share/GeoIP/GeoIP.dat /usr/share/xt_geoip/GeoIPCountryWhois.csv

Mas, será que é possível automatizar o processo? Sim. Uma alternativa seria criar um script, contendo a sequência exibida (sem o aptitude install), e agendar no Cron uma chamada semanal.

Disponibilizei dois scripts para download: geoip.tar

Após descompactar o arquivo disponibilizado, basta copiar o script geo-update.sh para o diretório /opt e geoip-update para /etc/cron.weekly.