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
À 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.
Prima, in ghjennaghju 2018
Siconda, da dicembre 2019 MaxMind
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.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:
- edità 20_cunvertisce_geolite2;
- edità xt_geoip_build.
In u primu casu avemu riduzzione
/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
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
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.
Solu l'utilizatori registrati ponu participà à l'indagine.
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