xtables-addons: filtri pacchetti per paese

xtables-addons: filtri pacchetti per paese
U compitu di bluccà u trafficu da certi paesi pare simplice, ma i primi impressioni ponu esse ingannati. Oghje vi diceremu cumu questu pò esse implementatu.

Pristoria

I risultati di una ricerca di Google nantu à questu tema sò disappointing: a maiò parte di e soluzioni sò longu "rotten" è qualchì volta pare chì questu tema hè stata abbandunata è scurdata per sempre. Avemu passatu assai dischi antichi è sò pronti à sparte una versione muderna di l'istruzzioni.

Avemu cunsigliatu per leghje l'articulu sanu prima di eseguisce questi cumandamenti.

Preparazione di u sistema operatore

A filtrazione serà cunfigurata cù l'utilità iptables, chì richiede una estensione per travaglià cù dati GeoIP. Questa estensione pò esse truvata in xtables-addons. xtables-addons installà estensioni per iptables cum'è moduli indipendenti di u kernel, per quessa, ùn ci hè bisognu di ricumpià u kernel OS.

À u mumentu di a scrittura, a versione attuale di xtables-addons hè 3.9. Tuttavia, solu 20.04 pò esse truvatu in i repositori standard Ubuntu 3.8 LTS, è 18.04 in i repositori Ubuntu 3.0. Pudete installà l'estensione da u gestore di pacchetti cù u cumandimu seguitu:

apt install xtables-addons-common libtext-csv-xs-perl

Innota chì ci sò differenzi chjuchi ma impurtanti trà a versione 3.9 è u statu attuale di u prugettu, chì avemu da discutiri dopu. Per custruisce da u codice fonte, installate tutti i pacchetti necessarii:

apt install git build-essential autoconf make libtool iptables-dev libxtables-dev pkg-config libnet-cidr-lite-perl libtext-csv-xs-perl

Clona u repository:

git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons

cd xtables-addons-xtables-addons

xtables-addons cuntene assai estensioni, ma simu interessate solu xt_geoip. Se ùn vulete micca trascinà estensioni innecessarii in u sistema, pudete escludiri da a custruzzione. Per fà questu, avete bisognu di edità u schedariu mconfig. Per tutti i moduli desiderati, installate y, è marcate tutti quelli inutili n. Raccogliemu:

./autogen.sh

./configure

make

È installate cù diritti di superuser:

make install

Durante l'installazione di i moduli di u kernel, un errore simile à i seguenti pò accade:

INSTALL /root/xtables-addons-xtables-addons/extensions/xt_geoip.ko
At main.c:160:
- SSL error:02001002:system library:fopen:No such file or directory: ../crypto/bio/bss_file.c:72
- SSL error:2006D080:BIO routines:BIO_new_file:no such file: ../crypto/bio/bss_file.c:79
sign-file: certs/signing_key.pem: No such file or directory

Sta situazione nasce per l'impossibilità di firmà moduli di kernel, perchè nunda à firmà. Pudete risolve stu prublema cù un coppiu di cumandamenti:

cd /lib/modules/(uname -r)/build/certs

cat <<EOF > x509.genkey

[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts

[ req_distinguished_name ]
CN = Modules

[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOF

openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pem

U modulu di u kernel compilatu hè stallatu, ma u sistema ùn u detecta micca. Dumandemu à u sistema di creà una mappa di dipendenza tenendu in contu u novu modulu, è poi caricate:

depmod -a

modprobe xt_geoip

Assicuratevi chì xt_geoip hè caricatu in u sistema:

# lsmod | grep xt_geoip
xt_geoip               16384  0
x_tables               40960  2 xt_geoip,ip_tables

Inoltre, assicuratevi chì l'estensione hè caricata in iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Semu cuntenti di tuttu è tuttu ciò chì resta hè di aghjunghje u nome di u modulu / etc / modulescusì chì u modulu travaglia dopu à rebooting u OS. Da avà, iptables capisce i cumandamenti geoip, ma ùn hà micca abbastanza dati per travaglià. Cuminciamu à carricà a basa di dati geoip.

Ottene a basa di dati GeoIP

Creemu un repertoriu in quale l'infurmazioni comprensibili à l'estensione iptables seranu guardati:

mkdir /usr/share/xt_geoip

À u principiu di l'articulu, avemu mintuatu chì ci sò diffirenzii trà a versione da u codice fonte è a versione da u gestore di pacchetti. A diferenza più notevuli hè u cambiamentu in u venditore di basa di dati è u script xt_geoip_dl, chì scarica l'ultimi dati.

Versione di gestore di pacchetti

U script hè situatu in u percorsu /usr/lib/xtables-addons, ma quandu pruvate di eseguisce, vi vede un errore pocu informativu:

# ./xt_geoip_dl 
unzip:  cannot find or open GeoLite2-Country-CSV.zip, GeoLite2-Country-CSV.zip.zip or GeoLite2-Country-CSV.zip.ZIP.

Nanzu, u pruduttu GeoLite, avà cunnisciutu cum'è GeoLite Legacy, distribuitu sottu licenza, hè stata utilizata com'è basa di dati. Creative Commons ASA 4.0 sucietà MaxMind. Dui avvenimenti sò accaduti cù stu pruduttu à una volta chì "rumpiu" a cumpatibilità cù l'estensione iptables.

Prima, in ghjennaghju 2018 annunziatu circa a terminazione di u supportu per u pruduttu, è u 2019 di ghjennaghju di u 2, tutti i ligami per scaricà a versione antica di a basa di dati sò stati eliminati da u situ ufficiale. I novi utilizatori sò cunsigliati per utilizà u pruduttu GeoLite2 o a so versione pagata GeoIPXNUMX.

Siconda, da dicembre 2019 MaxMind dichjaratu circa un cambiamentu significativu in l'accessu à e so basa di dati. Per rispettà a California Consumer Privacy Act, MaxMind hà decisu di "copertu" a distribuzione di GeoLite2 cù a registrazione.

Siccomu vulemu aduprà u so pruduttu, avemu da esse registratu nantu à sta pagina.

xtables-addons: filtri pacchetti per paese
Dopu riceverete un email chì vi dumanda di stabilisce una password. Avà chì avemu creatu un contu, avemu bisognu di creà una chjave di licenza. In u vostru contu persunale truvamu l'articulu I mo chjave di licenza, è dopu cliccate nant'à u buttone Generate una nova Chjave di Licenza.

Quandu crea una chjave, ci sarà dumandatu solu una quistione: useremu sta chjave in u prugramma di l'aghjurnamentu GeoIP? Rispondemu negativamente è appughjà u buttone cunfermanu. A chjave serà visualizata in una finestra pop-up. Salvà sta chjave in un locu sicuru, cum'è una volta chì chjude a finestra pop-up, ùn puderà più vede tutta a chjave.

xtables-addons: filtri pacchetti per paese
Avemu a capacità di scaricà a basa di dati GeoLite2 manualmente, ma u so formatu ùn hè micca cumpatibile cù u formatu previstu da l'script xt_geoip_build. Questu hè induve i script GeoLite2xtables venenu in salvezza. Per eseguisce scripts, installate u modulu NetAddr::IP perl:

wget https://cpan.metacpan.org/authors/id/M/MI/MIKER/NetAddr-IP-4.079.tar.gz

tar xvf NetAddr-IP-4.079.tar.gz

cd NetAddr-IP-4.079

perl Makefile.PL

make

make install

Dopu, clonemu u repository cù scripts è scrivemu a chjave di licenza ottenuta prima in un schedariu:

git clone https://github.com/mschmitt/GeoLite2xtables.git

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Eseguimu i scripts:

# Скачиваем данные GeoLite2
./00_download_geolite2
# Скачиваем информацию о странах (для соответствия коду)
./10_download_countryinfo
# Конвертируем GeoLite2 базу в формат GeoLite Legacy 
cat /tmp/GeoLite2-Country-Blocks-IPv{4,6}.csv |
./20_convert_geolite2 /tmp/CountryInfo.txt > /usr/share/xt_geoip/dbip-country-lite.csv

MaxMind impone un limitu di 2000 downloads per ghjornu è, cù un gran numaru di servitori, offre à cache l'aghjurnamentu in un servitore proxy.

Per piacè nutate chì u schedariu di output deve esse chjamatu dbip-country-lite.csv... Sfurtunatamente, 20_cunvertisce_geolite2 ùn pruduce micca un schedariu perfettu. Scrittura xt_geoip_build aspetta trè colonne:

  • iniziu di l'indirizzu;
  • fine di l'indirizzu;
  • codice di paese in iso-3166-alpha2.

È u schedariu di output cuntene sei colonne:

  • iniziu di l'indirizzu (rappresentazione di stringa);
  • fine di l'indirizzu (rappresentazione di stringa);
  • iniziu di l'indirizzu (rappresentazione numerica);
  • fine di l'indirizzu (rappresentazione numerica);
  • codice di u paese;
  • u nome di u paese.

Questa discrepanza hè critica è pò esse corretta in una di duie manere:

  1. edità 20_cunvertisce_geolite2;
  2. edità xt_geoip_build.

In u primu casu avemu riduzzione stampa f à u formatu necessariu, è in u sicondu - cambiamu l'assignazione à a variàbile $cc nantu $row->[4]. Dopu questu pudete custruisce:

/usr/lib/xtables-addons/xt_geoip_build -S /usr/share/xt_geoip/ -D /usr/share/xt_geoip

. . .
 2239 IPv4 ranges for ZA
  348 IPv6 ranges for ZA
   56 IPv4 ranges for ZM
   12 IPv6 ranges for ZM
   56 IPv4 ranges for ZW
   15 IPv6 ranges for ZW

Nota chì l'autore GeoLite2xtables ùn cunsidereghja micca i so scripts pronti per a produzzione è offerte pista per u sviluppu di script xt_geoip_* originali. Dunque, andemu à l'assemblea da i codici fonte, in quale sti script sò digià aghjurnati.

Versione fonte

Quandu si stallanu da script di codice fonte xt_geoip_* si trovanu in u catalogu /usr/local/libexec/xtables-addons. Questa versione di u script usa una basa di dati IP à Country Lite. A licenza hè Creative Commons Attribution License, è da i dati dispunibuli sò i trè culonni assai necessarii. Scaricate è assemble a basa di dati:

cd /usr/share/xt_geoip/

/usr/local/libexec/xtables-addons/xt_geoip_dl

/usr/local/libexec/xtables-addons/xt_geoip_build

Dopu à sti passi, iptables hè prontu à travaglià.

Utilizà geoip in iptables

Modulu xt_geoip aghjunghje solu duie chjave:

geoip match options:
[!] --src-cc, --source-country country[,country...]
	Match packet coming from (one of) the specified country(ies)
[!] --dst-cc, --destination-country country[,country...]
	Match packet going to (one of) the specified country(ies)

NOTE: The country is inputed by its ISO3166 code.

I metudi per creà regule per iptables, in generale, restanu senza cambià. Per utilizà chjavi da moduli supplementari, deve esse esplicitamente specificà u nome di u modulu cù u -m switch. Per esempiu, una regula per bluccà e cunnessione TCP entranti in u portu 443 micca da l'USA in tutte l'interfacce:

iptables -I INPUT ! -i lo -p tcp --dport 443 -m geoip ! --src-cc US -j DROP

I schedarii creati da xt_geoip_build sò usati solu quandu creanu e regule, ma ùn sò micca cunsiderate quandu u filtru. Cusì, per aghjurnà currettamente a basa di dati geoip, deve prima aghjurnà i schedari iv *, è poi ricreate tutte e regule chì utilizanu geoip in iptables.

cunchiusioni

U filtru di pacchetti basati nantu à i paesi hè una strategia un pocu scurdata da u tempu. Malgradu questu, l'uttine di software per tali filtru sò sviluppati è, forsi, prestu una nova versione di xt_geoip cù un novu fornitore di dati geoip appariscerà in i gestori di pacchetti, chì simplificà assai a vita di l'amministratori di u sistema.

xtables-addons: filtri pacchetti per paese

Solu l'utilizatori registrati ponu participà à l'indagine. Firmà lu, per piacè.

Avete mai usatu u filtru per paese?

  • 59,1%Iè 13

  • 40,9%No 9

22 utilizatori anu vutatu. 3 utilizatori si sò astenuti.

Source: www.habr.com

Add a comment