
Liiklus blokeerimise ülesanne teatud riikidest tundub lihtne, kuid esimene mulje petab. Täna räägime, kuidas seda ellu viia.
Eelalugu
Google'i otsingutulemused selle teema kohta on pettumust valmistavad: enamik lahendusi on ammu "välja surnud" ja mõnikord tundub, et seda teemat on ära unustatud. Meie aga oleme "läbistanud" palju vanu postitusi ja oleme valmis jagama kaasaegset juhendit.
Soovitame lugeda artiklit täielikult, enne kui täidate antud käske.
Operatsioonisüsteemi ettevalmistamine
Filtreerimine seadistatakse utiliidi abil iptables, mis vajab GeoIP-andmete töötlemiseks laiendust. Sellise laienduse leiate . xtables-addons paigaldab iptables'i laiendused iseseisvate tuumamoodulitena, mistõttu ei ole vajalik OSi tuuma uuesti kompileerida.
Artikli kirjutamise hetkel on xtables-addons'i uusim versioon 3.9. Siiski, Ubuntu 20.04 LTS standardsetes hoidlates leidub vaid 3.8 versioon ja Ubuntu 18.04 hoidlates 3.0 versioon. Laienduse paigaldamiseks paketihaldurist saab kasutada järgmise käsku:
apt install xtables-addons-common libtext-csv-xs-perlTuleb märkida, et versiooni 3.9 ja praeguse projekti oleku vahel on mõned väikesed, kuid olulised erinevused, millest räägime hiljem. Allika koodist koostamiseks installime 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 repositooriumi:
git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons
cd xtables-addons-xtables-addonsxtables-addons sisaldab paljusid laiendusi, kuid meid huvitab ainult xt_geoip. Kui te ei soovi süsteemi mittesoovitavaid laiendusi tuua, saate need koostamisest välja jätta. Selleks tuleb muuta faili mconfig. Kõigi soovitud moodulite puhul tuleb panna y, ja kõik mittesoovitud tuleb märkida n. Koostame:
./autogen.sh./configuremakeJa installime superkasutaja õigustes:
make installMoodulite installimise ajal võib esineda viga, mis näeb välja 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 directorySee olukord tekib, kuna tuumamooduleid ei ole võimalik allkirjastada, kuna allkirjastamiseks pole midagi. Selle probleemi lahendamiseks saab kasutada paari 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
EOF[ 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. Palume süsteemil luua sõltuvuste kaart uue mooduli arvestamisega ning seejärel laadime selle sisse:
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 laiendus on iptables'i laaditud:
# cat /proc/net/ip_tables_matches
geoip
icmpMeile kõik sobib ja jääb vaid lisada mooduli nimi /etc/modules, et moodul töötaks pärast operatsioonisüsteemi taaskäivitamist. Sellest hetkest alates mõistab iptables geoip käske, kuid tal puuduvad andmed tööks. Alustame geoip andmebaasi laadimist.
GeoIP andmebaasi allalaadimine
Loome katalooge, kus hoitakse iptables'e laiendusele arusaadavat teavet:
mkdir /usr/share/xt_geoipArtikli alguses mainisime, et allikakoodi versiooni ja paketihalduri versiooni vahel on erinevusi. Kõige märgatavam erinevus seisneb andmebaasiteenuse ja skripti muutuses. xt_geoip_dl, mis allalaadib ajakohased andmed.
Paketihalduri versioon
Skript asub teel /usr/lib/xtables-addons, kuid käivitamisproovil võib näha mitte kõige informatiivsemat tõrget:
# ./xt_geoip_dl
unzip: cannot find or open GeoLite2-Country-CSV.zip, GeoLite2-Country-CSV.zip.zip or GeoLite2-Country-CSV.zip.ZIP.Varasemalt kasutati andmebaasina GeoLite'i toodet, mis on nüüd tuntud kui GeoLite Legacy, levitatuna litsentsi alusel ettevõtte . Selle tootega juhtus kaks asja, mis "katkestasid" ühilduvuse iptablesi laiendusega.
Esiteks, jaanuaris 2018 teatas toote toe lõpetamisest, ja 2019. aasta teisel jaanuaril eemaldati ametlikult kõik allalaadimise lingid vana andmebaasi jaoks. Uutele kasutajatele soovitatakse kasutada GeoLite2 toodet või selle tasulist versiooni GeoIP2.
Teiseks, alates detsembrist 2019 on MaxMind olulise muutuse kohta nende andmebaaside juurdepääsul. Vastusena California tarbijakaitseseadusele otsustas ettevõte MaxMind peatada GeoLite2 levitamise registreerimisega.
Kuna soovime nende tootest kasu saada, registreerime end sellel lehel.

Pärast seda saadetakse e-postile sõnum parooli seadmiseks. Nüüd, kui oleme konto loonud, tuleb meil luua litsentsikood. Otsime isiklikust kabinetist punkti My License Keys, seejärel vajutame nuppu Generate new License Key.
Litsentsikoodi loomisel küsitakse meilt ainult ühte küsimust: kas me kasutame seda koodi GeoIP Update programmis? Vastame ei ja vajutame nuppu Confirm. Hüpikaknas kuvatakse kood. Salvestage see kood turvalisse kohta, sest pärast hüpikakna sulgemist ei saa te koodi enam täielikult vaadata.

Meil on võimalus GeoLite2 andmebaase käsitsi allalaadida, kuid nende formaat ei ühildu xt_geoip_build skripti ootusega. Siin tulevad appi GeoLite2xtables skriptid. Skriptide tööks installime 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.PLmakemake installSeejärel kloonime skriptide reservi ja salvestame varasemalt saadud litsentsi võtme faili:
git clone https://github.com/mschmitt/GeoLite2xtables.gitcd GeoLite2xtablesecho YOUR_LICENSE_KEY=’123ertyui123' > geolite2.licenseKäivitame 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 piirdub 2000 allalaadimisega päevas ja suurte serverite arvu korral soovitab ta värskenduse vahemälu salvestada vahe-serverisse.
Pange tähele, et väljundfail peab kindlasti olema nimetatud dbip-country-lite.csv. Kahjuks, 20_convert_geolite2 loob mitte ideaalset faili. Skript xt_geoip_build ootab kolme veeru:
- aadresside vahemiku algus;
- aadresside vahemiku lõpp;
- riigi kood iso-3166-alpha2.
Ja väljundfail sisaldab kuut veergu:
- aadresside vahemiku algus (stringi esitus);
- aadresside vahemiku lõpp (stringi esitus);
- aadresside vahemiku algus (numbriline esitus);
- aadresside vahemiku lõpp (numbriline esitus);
- riigi kood;
- riigi nimi.
See vastuolu on kriitiline ja seda saab parandada ühel kahest viisis:
- muutmine 20_convert_geolite2;
- muutmine xt_geoip_build.
Esimesel juhul lühendame kuni vajaliku formaadini, teisel juhul muudame muutujale määramise $cc järgnevaga $row->[4]. Pärast seda on võimalik koguda:
/usr/lib/xtables-addons/xt_geoip_build -S /usr/share/xt_geoip/ -D /usr/share/xt_geoip. . .
2239 IPv4 vahemikku ZA jaoks
348 IPv6 vahemikku ZA jaoks
56 IPv4 vahemikku ZM jaoks
12 IPv6 vahemikku ZM jaoks
56 IPv4 vahemikku ZW jaoks
15 IPv6 vahemikku ZW jaoksTähtis on märkida, et autor ei pea oma skripte tootmiseks valmis ja soovitab originaalsete xt_geoip_* skriptide arendust. Seega liigume edasi lähtekoodide kogumiseni, kus need skriptid on juba ajakohastatud.
Lähtekoodide versioon
Lähtekoodide installimisel paiknevad skriptid xt_geoip_* asuvad kataloogis /usr/local/libexec/xtables-addons. Selles skripti versioonis kasutatakse andmebaasi . Litsents on Creative Commonsi autorile viitamise litsents, ja saadaolevatest andmetest on just need kolm vajalikku veergu. Laeme alla ja kogume andmebaasi:
cd /usr/share/xt_geoip//usr/local/libexec/xtables-addons/xt_geoip_dl/usr/local/libexec/xtables-addons/xt_geoip_buildPärast neid tegevusi on iptables tööks valmis.
Kasutame geoip-d iptables-is
Modul xt_geoip lisab vaid kaks lippu:
geoip match options:
[!] --src-cc, --source-country country[,country...]
Match pakett, mis tuleb (ühe) nimetatud riigi(riikide) seest
[!] --dst-cc, --destination-country country[,country...]
Match pakett, mis läheb (ühe) nimetatud riigi(riikide) suunas
MÄRKUS: Riik sisestatakse ISO3166 koodi järgi.iptables reeglite koostamine jääb peamiselt muutumatuks. Lisamoodulite võtmete kasutamiseks tuleb selgelt märkida mooduli nimi koos võtmega -m. Näiteks reegel, mis blokeerib sissetulevaid TCP-ühendusi porti 443, välja arvatud USA-st, kõigil liidestel:
iptables -I INPUT ! -i lo -p tcp --dport 443 -m geoip ! --src-cc US -j DROPFailid, mille xt_geoip_build on loonud, kasutatakse ainult reeglite koostamisel, kuid neid ei arvestata filtreerimisel. Seetõttu tuleb geoip andmebaasi õigeks uuendamiseks kõigepealt uuendada iv*-faile ja seejärel luua uuesti kõik reeglid, mis kasutavad geoip iptablesis.
Kokkuvõte
Paketifiltramine riikide kuuluvuse alusel on veidi unustatud strateegia. Hoolimata sellest areneb selline filtreerimine ja võib-olla ilmub peagi uut versiooni xt_geoip-ga uue geoip andmete pakkujaga pakihaldurisse, mis muudab süsteemiadministraatorite elu oluliselt lihtsamaks.
Ainult registreeritud kasutajad saavad küsitluses osaleda. , palun.
Kas olete kunagi riigipõhist filtreerimist kasutanud?
59,1%Jah13
40,9%Ei9
22 kasutajat hääletasid. 3 kasutajat jäid erapooletuks.
Allikas: habr.com
