
Tegevuse blokeerimine teatud riikidest tundub lihtne, kuid esialgne mulje on petlik. Täna räägime, kuidas seda ellu viia.
Eellugu
Google'i otsingutulemused selle teema kohta on pettumustvalmistavad: enamik lahendusi on juba ammu vananenud ja vahel tundub, et seda teemat on unustatud. Me oleme uurinud palju vanu postitusi ja oleme valmis jagama tänapäevast juhendit.
Soovitame lugeda artikkel täielikult läbi, enne kui täidate antud käsud.
Operatsioonisüsteemi ettevalmistamine
Filtreerimine seadistatakse utiliidi abil iptables, mille jaoks on vajalik laiendus GeoIP-andmete töötlemiseks. Sellist laiendust saab leida . xtables-addons installib iptables jaoks laiendused iseseisvate tuumamoodulitena, mistõttu ei ole vajalik OS-i tuuma uuesti kompileerimine.
Artikli kirjutamise hetkel on kehtiv versioon xtables-addons — 3.9. Siiski, Ubuntu 20.04 LTS standardsetes hoidlatest leidub ainult versioon 3.8 ning Ubuntu 18.04 hoidlatest 3.0. Laienduse installimiseks paketihalduri kaudu saab kasutada järgmist käsku:
apt install xtables-addons-common libtext-csv-xs-perlTuleb märkida, et versiooni 3.9 ja projekti praeguse seisundi vahel on väiksed, kuid olulised erinevused, millest räägime hiljem. Allika koodist koostamiseks paigaldame kõik vajalikud paketid:
apt install git build-essential autoconf make libtool iptables-dev libxtables-dev pkg-config libnet-cidr-lite-perl libtext-csv-xs-perlKloonime reposi:
git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons
cd xtables-addons-xtables-addonsxtables-addons sisaldab palju laiendusi, kuid meid huvitab ainult xt_geoip. Kui ei soovita süsteemi ebavajalikke laiendusi tuua, saab need koostamisest välja jätta. Selleks tuleb redigeerida faili mconfig. Kõik soovitud moodulid tuleb märkida y, ja kõik ebavajalikud jätta märkimata n. Koostame:
./autogen.sh./configureteeJa installime superkasutaja õigustega:
make installMoodulite tuuma installimise ajal võib tekkida viga, mille sisu on umbes järgmine:
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 directorySelline olukord tekib seetõttu, et tuuma mooduleid ei saa allkirjastada, kuna allkirjastamiseks pole midagi. Selle probleemi lahendamiseks saab kasutada kaht käsku:
cd /lib/modules/(uname -r)/build/certscat < x509.genkey[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
[ req_distinguished_name ]
CN = Moodulid
[ 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.pemKompileeritud tuumamoodul on paigaldatud, kuid süsteem ei tuvastanud seda. Kutsume süsteemi looma sõltuvuste kaarti uue mooduli arvesse võttes ning seejärel laadime selle:
depmod -amodprobe xt_geoipVeendume, et xt_geoip on süsteemi laaditud:
# lsmod | grep xt_geoip
xt_geoip 16384 0
x_tables 40960 2 xt_geoip,ip_tablesLisaks veendume, et laiend on iptables laaditud:
# cat /proc/net/ip_tables_matches
geoip
icmpMeile meeldib kõik ning tuleb ainult lisada mooduli nimi /etc/modules, et moodul töötaks pärast operatsioonisüsteemi taaskäivitamist. Sellest hetkest iptables mõistab geoip käske, kuid tal puuduvad töötamiseks vajalikud andmed. Alustame geoip andmebaasi laadimist.
GeoIP andmebaasi allalaadimine
Loome kausta, kuhu salvestame iptables'i jaoks arusaadavad andmed:
mkdir /usr/share/xt_geoipArtikli alguses mainisime, et versioonide vahel, mis pärinevad lähtekoodist ja paketihaldurist, on erinevusi. Kõige märgatavam erinevus seisneb andmebaasi pakkuja ja skripti xt_geoip_dl, mis laadib alla värskendatud andmed.
Paketihalduri versioon
Skript asub teel /usr/lib/xtables-addons, kuid käivitamisel võib näha mitte kõige informatiivsemat viga:
# ./xt_geoip_dl
unzip: cannot find or open GeoLite2-Country-CSV.zip, GeoLite2-Country-CSV.zip.zip or GeoLite2-Country-CSV.zip.ZIP.Varem kasutati andmebaasi tootena GeoLite, mis on nüüd tuntud kui GeoLite Legacy, jagatakse litsentsi alusel ettevõtte poolt . Selle tootega on toimunud kaks sündmust, mis on "purustanud" ühilduvuse iptables'i laiendiga.
Esiteks, jaanuaris 2018 töötaja otsustas, et toote tugi lõpetatakse ning 2. jaanuariks 2019 eemaldati ettevõtte ametlikult kõik lingid vana versiooni andmebaasi allalaadimiseks. Uutele kasutajatele soovitatakse kasutada toodet GeoLite2 või selle tasulist versiooni GeoIP2.
Teiseks, alates 2019. aasta detsembrist on MaxMind kavandanud oluliseid muudatusi oma andmebaaside juurdepääsu osas. Et järgida California tarbijakaitse seadust, otsustas MaxMind "katkestada" GeoLite2 levitamise registreerimise kaudu.
Kuna soovime kasutada nende toodet, registreerime end sellel lehel.

Pärast registreerimist saadame e-kirja, et seadistada parool. Nüüd, kui meil on konto loodud, peame looma litsentsivõtme. Isiklikus kabinetis leiame punkti Minu litsentsivõtmed, seejärel vajutame nuppu Loo uus litsentsivõti.
Litsentsivõtme loomisel küsitakse meilt ainult ühte küsimust: kas kavatseme kasutada seda võtit GeoIP Update programmis? Vastame eitavalt ja vajutame nuppu Kinnita. Pop-up-aknas kuvatakse võti. Salvesta see võti turvalisse kohta, kuna pärast pop-up-akna sulgemist ei saa sa enam võtit täielikult vaadata.

Meil on võimalus käsitsi alla laadida GeoLite2 andmebaase, kuid nende formaat ei ühti xt_geoip_build skripti oodatud formaadiga. Siin tulevad appi GeoLite2xtables skriptid. Skriptide töötamiseks peame installima perl mooduli NetAddr::IP:
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.PLteemake installSeejärel kloonime skriptide repoodi ja salvestame varem saadud litsentsivõtme faili:
git clone https://github.com/mschmitt/GeoLite2xtables.gitcd GeoLite2xtablesecho YOUR_LICENSE_KEY=’123ertyui123' > geolite2.licenseKäivitage skriptid:
# Скачиваем данные 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 seab päevas 2000 allalaadimise piiri ja suure arvu serverite korral soovitab vahemälu uuendusi vahe serveris.
Pange tähele, et väljundfail peab kindlasti kandma nime dbip-country-lite.csv. Kahjuks 20_convert_geolite2 ei tooda ideaalset faili. Skript xt_geoip_build ootab kolme veergu:
- aadressivahemiku algus;
- aadressivahemiku lõpp;
- riigi kood iso-3166-alpha2 formaadis.
Väljundfail sisaldab aga kuut veergu:
- aadressivahemiku algus (stringi esituses);
- aadressivahemiku lõpp (stringi esituses);
- aadressivahemiku algus (numbrilises esituses);
- aadressivahemiku lõpp (numbrilises esituses);
- riigi kood;
- riigi nimi.
See ebakõla on kriitiline ja seda saab parandada kahel viisil:
- tõlkida 20_convert_geolite2;
- tõlkida xt_geoip_build.
Esimesel juhul lühendame õige formaadini, teisel juhul muudame muutuja määramise $cc . Tundub, et $row->[4]. Pärast seda saab alustada koostamist:
/usr/lib/xtables-addons/xt_geoip_build -S /usr/share/xt_geoip/ -D /usr/share/xt_geoip. . .
2239 IPv4 vahemikku ZA
348 IPv6 vahemikku ZA
56 IPv4 vahemikku ZM
12 IPv6 vahemikku ZM
56 IPv4 vahemikku ZW
15 IPv6 vahemikku ZWTuleb märkida, et autor ei pea oma skripte tootmisvalmis ja soovitab originaalsete xt_geoip_* skriptide väljatöötamine. Seetõttu liigume lähtekoodide kokku kogumise juurde, milles need skriptid on juba uuendatud.
Lähtekoodist saadud versioon
Lähtekoodidest installimiseks skriptid xt_geoip_* asuvad kataloogis /usr/local/libexec/xtables-addons. Selles skripti versioonis on kasutusel andmebaas . Litsents – Creative Commonsi autoriõiguse litsents, ning seal on kolm vajalikku veergu olemas. Laadime alla ja kogume andmebaasi:
cd /usr/share/xt_geoip//usr/local/libexec/xtables-addons/xt_geoip_dl/usr/local/libexec/xtables-addons/xt_geoip_buildNende toimingute järel on iptables töövalmis.
Kasutame geoip iptables-s
Moodul xt_geoip lisab kokku kaks võtmet:
geoip match options:
[!] --src-cc, --source-country country[,country...]
Kasta paketid, mis tulevad (ühe) määratud riigi/tsooni piiri kaudu
[!] --dst-cc, --destination-country country[,country...]
Kasta paketid, mis lähevad (ühe) määratud riigi/tsooni piiri kaudu
MÄRKUS: Riiki sisestatakse selle ISO3166 kood.Iptables reeglite loomise viisid jäävad üldiselt muutumatuks. Lisamooduli võtmete kasutamiseks tuleb selgelt märkida mooduli nimi koos võtmega -m. Näiteks reegel, mis blokeerib sissetulevaid TCP ühendusi pordil 443, mis ei ole USA-st, kõikidel liidesetel:
iptables -I INPUT ! -i lo -p tcp --dport 443 -m geoip ! --src-cc US -j DROPFailid, mille on loonud xt_geoip_build, kasutatakse ainult reeglite loomisel, kuid neid ei arvestata filtreerimisel. Seetõttu, et geoip andmebaasi õigesti uuendada, tuleb esmalt uuendada iv*-failid ning seejärel uuesti luua kõik reeglid, mis kasutavad geoip iptables-s.
Kokkuvõte
Pakettide filtreerimine riikliku kuuluvuse alusel on veidi unustatud strateegia. Sellest hoolimata arenevad sellise filtreerimise tarkvaravahendid ning võib-olla peagi ilmu uue versiooni xt_geoip uus andmeallika geoip alusel, mis lihtsustab süsteemiadministraatorite elu.
Ainult registreeritud kasutajad saavad küsitluses osaleda. , palun.
Olete kunagi kasutanud riikide filtreerimist?
59,1%Jah13
40,9%Ei9
Küsimuse korral hääletas 22 kasutajat. Hoidus 3 kasutajat.
Allikas: habr.com
