
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 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, in i repositori standard Ubuntu 20.04 LTS pò truvà solu 3.8, è in i repositori Ubuntu 18.04 — 3.0. Pudete installà l'estensione da u gestore di pacchetti cù u cumandamentu seguente:
apt install xtables-addons-common libtext-csv-xs-perlInnota 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-perlClona u repository:
git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons
cd xtables-addons-xtables-addonsxtables-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./configuremakeÈ installate cù diritti di superuser:
make installDurante 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 directorySta 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/certscat <<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
EOFopenssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pemU 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 -amodprobe xt_geoipAssicuratevi chì xt_geoip hè caricatu in u sistema:
# lsmod | grep xt_geoip
xt_geoip 16384 0
x_tables 40960 2 xt_geoip,ip_tablesInoltre, assicuratevi chì l'estensione hè caricata in iptables:
# cat /proc/net/ip_tables_matches
geoip
icmpSemu 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. sucietà . Dui avvenimenti sò accaduti cù stu pruduttu à una volta chì "rumpiu" a cumpatibilità cù l'estensione iptables.
Prima, in ghjennaghju 2018 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 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.

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.

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.gztar xvf NetAddr-IP-4.079.tar.gzcd NetAddr-IP-4.079perl Makefile.PLmakemake installDopu, clonemu u repository cù scripts è scrivemu a chjave di licenza ottenuta prima in un schedariu:
git clone https://github.com/mschmitt/GeoLite2xtables.gitcd GeoLite2xtablesecho YOUR_LICENSE_KEY=’123ertyui123' > geolite2.licenseEseguimu 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.csvMaxMind 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:
- edità 20_cunvertisce_geolite2;
- edità xt_geoip_build.
In u primu casu avemu riduzzione à 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 ZWNota chì l'autore ùn cunsidereghja micca i so scripts pronti per a produzzione è offerte 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 . 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_buildDopu à 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 DROPI 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.
Solu l'utilizatori registrati ponu participà à l'indagine. , 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
