Tasca #5811
tancatGenerar una llicència per actualitzar la base de dades geoIP
Descripció
Des de fa anys, la base de dades que hem estat utilitzant al DDD és la que venia empaquetada per part de Debian, que en garantia les actualizacions automàticament:
https://packages.debian.org/geoip-database-contrib
Degut a un canvi de lleis de privacitat a Califòrnia, aquesta base de dades ja no es pot distribuir lliurement, sinó que s'ha de fer individualment. La versió que utilitzem (país, regió i ciutat, alias City Database) continua essent gratuïta, però cal fer uns passos burocràtics per tenir-a actualtizada:
https://blog.maxmind.com/2019/12/18/significant-changes-to-accessing-and-using-geolite2-databases/
Vaig començar a fer les gestions el mes de gener, però em vaig encallar, i ara es tracta d'acabar de fer tots els passos.
FJ Actualitzat per Ferran Jorba fa quasi 6 anys
Després de les proves des del meu portàtil baixant-me la versió 4.3.0 de Github (https://github.com/maxmind/geoipupdate/releases), he vist que a Debian ja hi és, encara que sigui una versió més antiga (3.1.1-1):
A partir d'ara continuaré les proves amb la versió de Debian, però amb la versió 4.0.6, que he comprovat que s'instal·la perfectament a Buster.
Un cop instal·lat, he vist que, com que la versió de la base de dades és la 2, el paquet Python per obrir-lo també ha de ser un altre:
FJ Actualitzat per Ferran Jorba fa quasi 6 anys
La interfície canvia força respecte a l'antiga. Per exemple, per saber el país, provem-ho primer amb la base de dades de països:
Python 2.7.16 (default, Oct 10 2019, 22:02:15)
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import geoip2.database
>>> geoip = geoip2.database.Reader('/var/lib/GeoIP/GeoLite2-Country.mmdb')
>>> geoip.country('181.197.182.192')
geoip2.models.Country({'traits': {'ip_address': '181.197.182.192'}, u'country': {u'geoname_id': 3703430L, u'iso_code': u'PA', u'names': {u'ru': u'\u041f\u0430\u043d\u0430\u043c\u0430', u'fr': u'Panama', u'en': u'Panama', u'de': u'Panama', u'zh-CN': u'\u5df4\u62ff\u9a6c', u'pt-BR': u'Panam\xe1', u'ja': u'\u30d1\u30ca\u30de', u'es': u'Panam\xe1'}}, u'continent': {u'geoname_id': 6255149L, u'code': u'NA', u'names': {u'ru': u'\u0421\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0410\u043c\u0435\u0440\u0438\u043a\u0430', u'fr': u'Am\xe9rique du Nord', u'en': u'North America', u'de': u'Nordamerika', u'zh-CN': u'\u5317\u7f8e\u6d32', u'pt-BR': u'Am\xe9rica do Norte', u'ja': u'\u5317\u30a2\u30e1\u30ea\u30ab', u'es': u'Norteam\xe9rica'}}, u'registered_country': {u'geoname_id': 3703430L, u'iso_code': u'PA', u'names': {u'ru': u'\u041f\u0430\u043d\u0430\u043c\u0430', u'fr': u'Panama', u'en': u'Panama', u'de': u'Panama', u'zh-CN': u'\u5df4\u62ff\u9a6c', u'pt-BR': u'Panam\xe1', u'ja': u'\u30d1\u30ca\u30de', u'es': u'Panam\xe1'}}}, ['en'])
>> geoip.country('181.197.182.192').country
geoip2.records.Country(geoname_id=3703430L, confidence=None, _locales=['en'], names={u'ru': u'\u041f\u0430\u043d\u0430\u043c\u0430', u'fr': u'Panama', u'en': u'Panama', u'de': u'Panama', u'zh-CN': u'\u5df4\u62ff\u9a6c', u'pt-BR': u'Panam\xe1', u'ja': u'\u30d1\u30ca\u30de', u'es': u'Panam\xe1'}, iso_code=u'PA', is_in_european_union=False)
>>> geoip.country('181.197.182.192').country.iso_code
u'PA'
>>> geoip.country('155.138.192.58').country.iso_code
u'US'
O bé amb a de ciutats:
Python 2.7.16 (default, Oct 10 2019, 22:02:15)
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import geoip2.database
>>> geoip = geoip2.database.Reader('/var/lib/GeoIP/GeoLite2-City.mmdb')
>>> geoip.city('155.138.192.58').country
geoip2.records.Country(geoname_id=6252001L, confidence=None, _locales=['en'], names={u'ru': u'\u0421\u0428\u0410', u'fr': u'\xc9tats-Unis', u'en': u'United States', u'de': u'USA', u'zh-CN': u'\u7f8e\u56fd', u'pt-BR': u'Estados Unidos', u'ja': u'\u30a2\u30e1\u30ea\u30ab\u5408\u8846\u56fd', u'es': u'Estados Unidos'}, iso_code=u'US', is_in_european_union=False)
>>> geoip.city('155.138.192.58').country.iso_code
u'US'
Suposo que utilitzar el de països deu ser més eficient si només volem fer això, i potser seria el que convindria utilitzar per a bloquejar consultes de la Xina, mentre que el de ciutats serà per a les estadístiques que es fan cada nit. Això sí, en el moment que faci l'actualització tot el software ha d'estar sincronitzat amb les noves bases de dades.
$ ls -lh /var/lib/GeoIP/ -rw-r--r-- 1 root root 61M de juny 19 07:02 GeoLite2-City.mmdb -rw-r--r-- 1 root root 3,7M de juny 19 07:01 GeoLite2-Country.mmdb
FJ Actualitzat per Ferran Jorba fa quasi 6 anys
- Estat ha canviat de Creada a En curs
Ja he actualizat els programes que recullen estadístiques d'ús (https://ddd.uab.cat/usage.py?c=ddd&report=usage). Ara he de recalcular les dades, al menys, de tot aquest any, perquè he vist que moltes adreces de les que abans no teníem dades, ara ja estan informades.
Quedaran també usos més tangencials però útils, com el veto a les consultes des de la Xina, que abordaré després.
FJ Actualitzat per Ferran Jorba fa quasi 6 anys
He confirmat que cada dia 1 de mes recalcula i acumula tots els logs, incloent-hi les actualitzacions de geoip. Per tant, prefereixo deixar-ho i que ho faci automàticament la setmana que ve.
FJ Actualitzat per Ferran Jorba fa més de 5 anys
- Estat ha canviat de En curs a Tancada
Ja ho he completat. El DDD ara ja també utilitza geoip2 per a vetar l'accés per països, en aquest cas la Xina (sí, de moment continuem aplicat-ho).