Geoip (Su Devuan Chimaera o Debian 11; NON FUNZIONA SU DEBIAN 10 O DEVUAN BEOWULF)

Per quanto non sia perfetta come soluzione, certe volte può essere comodo tentare di proteggere qualcosa di pubblicato su internet dall'attacco del mondo intero, limitando il rischio all'attacco da parte di uno specifico paese. Tipicamente un software che deve essere usato solo dall' Italia può essere limitato al solo accesso dall' Italia. Le prove che ho fatto fino ad ora sono solo su ipv4. So benissimo che sarebbe meglio una VPN, ma non sempre è possibile fare la sicurezza come si deve.


Pacchetti base

Questi due pacchetti consentono di usare il comando "geoiplookup" su un database che e` contenuto nel pacchetto relativo e viene aggiornato secondo le tempistiche di Debian. A quanto ho capito questo database non puo` essere usato per il modulo di iptables, il formato non è quello giusto. Non è obbligatorio avere questi pacchetti per usare il modulo in iptables, si può farne a meno.


Modulo per iptables

Il modulo per iptables permette di aggiungere a iptables un match per paese di provenienza del traffico. Per esempio è possibile accettare il traffico dall' Italia e rifiutare tutto il resto del mondo.

Installazione del modulo

Il modulo va compilato dal sorgente usando dkms, quindi la procedura non è proprio lineare.

Prima di tutto dobbiamo installare questi pacchetti: xtables-addons-common libtext-csv-xs-perl (si portano dietro un sacco di roba)

Se il kernel che abbiamo sulla macchina al momento è quello standard, fra le dipendenze della roba sopra ci sono anche gli header del nostro kernel, e alla fine dell'installazione dei pacchetto DKMS verrà eseguito automaticamente, e ci troveremo i moduli compilati. Il comando dkms status ci dirà se è vero, riportando una cosa tipo "xtables-addons, 3.13, 5.10.0-11-cloud-amd64, x86_64: installed". Se invece usiamo un kernel del quale per qualche motivo non abbiamo gli header, il comando dkms autoinstall ci riporterà un errore che dice che mancano gli headers per il kernel. Scarichiamo il pacchetto degli headers e in teoria dkms dovrebbe autocompilare tutto alla fine del download del pacchetto degli headers "giusti". A questo dkms status deve rispondere correttamente e dkms autoinstall non fa nulla e non riporta nessun errore.

Script di aggiornamento del database per il modulo di iptables

A questo punto vediamo di capire come funziona, poi vedremo come scriptare gli aggiornamenti.

Il pacchetto xtables-addons-common installa, fra le altre cose, due script che si trovano sotto /usr/lib/xtables-addons/, che sono xt_geoip_dl e xt_geoip_build. Questi script scaricano e compilano la lista degli ip geolocalizzati per nazione dal sito ip-db.com. Esistono anche due script simili xt_geoip_dl_maxmind e xt_geoip_build_maxmind che, previa iscrizione al sito di maxmind, usano il db di maxmind.

Eseguire il primo download del db da ip-db.com

Lo script xt_geoip_dl serve a scaricare (le scarica nel percorso in cui siete quando lo lanciate) le liste degli indirizzi ip (gratuite) dal sito ip-db.com. Lo script xt_geoip_build serve a compilare queste liste per tradurle in un formato compatto che verrà usato dal modulo del kernel. Le liste compilate devono essere salvate in /usr/share/xt_geoip. Questi due script possono essere lanciati a mano o messi in cron per gli aggiornamenti dei database. È tuttavia comodo creare uno script ulteriore che esegua tutte le funzioni necessarie in un colpo solo.

Questa è una procedura ridotta all'osso per scaricare e compilare a mano le liste: mi sposto in /tmp, scarico i files csv, compilo il file csv (salvato nella directory corrente) salvando il risultato nel percorso /usr/share/xt_geoip (la directory va creata se non esiste)

Procedura automatica di download e aggiornamento del db da db-ip.com

Volendo automatizzare l'operazione di compilazione, ecco uno script adatto allo scopo, che possiamo salvare in /usr/local/sbin/geoip-update-iptables.sh e poi lanciare a mano o mettere in cron.

Un esempio di riga in cron potrebbe essere:

Uso del modulo

Ecco un esempio di uso del modulo: Accetto (e loggo) tutte le connessioni che siano in state new (quindi solo un "hit" per connessione, ignoro tutti i pacchetti seguenti) dall' Italia e dalla Francia, e rifiuto (e loggo) tutto il resto.

Nota: è possibile usare più codici nazionali separandoli con una virgola, e negare con un punto esclamativo:

LinuxDebian/GeoIP (last edited 2022-03-09 14:25:01 by Kurgan)