xtables-addons: filtreerime pakette riikide järgi

xtables-addons: filtreerime pakette riikide järgi
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. 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-perl

Tuleb 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-perl

Kloonime reposi:

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

cd xtables-addons-xtables-addons

xtables-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

./configure

tee

Ja installime superkasutaja õigustega:

make install

Moodulite 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 directory

Selline 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/certs

cat < 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

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

Kompileeritud 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 -a

modprobe xt_geoip

Veendume, et xt_geoip on süsteemi laaditud:

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

Lisaks veendume, et laiend on iptables laaditud:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Meile 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_geoip

Artikli 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 Creative Commons ASA 4.0 ettevõtte poolt MaxMind. Selle tootega on toimunud kaks sündmust, mis on "purustanud" ühilduvuse iptables'i laiendiga.

Esiteks, jaanuaris 2018 et neil on alles ainult kaks plokki /8. 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 teatanud 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.

xtables-addons: filtreerime pakette riikide järgi
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.

xtables-addons: filtreerime pakette riikide järgi
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.gz

tar xvf NetAddr-IP-4.079.tar.gz

cd NetAddr-IP-4.079

perl Makefile.PL

tee

make install

Seejärel kloonime skriptide repoodi ja salvestame varem saadud litsentsivõtme faili:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Kä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.csv

MaxMind 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:

  1. tõlkida 20_convert_geolite2;
  2. tõlkida xt_geoip_build.

Esimesel juhul lühendame printf õ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 ZW

Tuleb märkida, et autor GeoLite2xtables ei pea oma skripte tootmisvalmis ja soovitab jälgib 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 IP to Country Lite. 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_build

Nende 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 DROP

Failid, 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.

xtables-addons: filtreerime pakette riikide järgi

Ainult registreeritud kasutajad saavad küsitluses osaleda. Logige sisse, 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

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster