xtables-addons: filtruokite paketus pagal šalį

xtables-addons: filtruokite paketus pagal šalį
Užduotis blokuoti srautą iš tam tikrų šalių atrodo paprasta, tačiau pirmasis įspūdis gali būti apgaulingas. Šiandien mes jums pasakysime, kaip tai galima įgyvendinti.

priešistorė

„Google“ paieškos šia tema rezultatai nuvilia: dauguma sprendimų jau seniai „supuvę“ ir kartais atrodo, kad ši tema amžiams buvo nuleista ir pamiršta. Peržiūrėjome daug senų įrašų ir esame pasirengę pasidalinti modernia instrukcijų versija.

Prieš vykdant šias komandas rekomenduojame perskaityti visą straipsnį.

Operacinės sistemos paruošimas

Filtravimas bus sukonfigūruotas naudojant paslaugų programą iptables, kuriai reikalingas plėtinys, kad jis veiktų su GeoIP duomenimis. Šį plėtinį galima rasti xtables-addons. xtables-addons įdiegia iptables plėtinius kaip nepriklausomus branduolio modulius, todėl nereikia perkompiliuoti OS branduolio.

Rašymo metu dabartinė xtables-addons versija yra 3.9. Tačiau tik 20.04 galima rasti standartinėse Ubuntu 3.8 LTS saugyklose, o 18.04 – Ubuntu 3.0 saugyklose. Plėtinį galite įdiegti iš paketų tvarkyklės naudodami šią komandą:

apt install xtables-addons-common libtext-csv-xs-perl

Atkreipkite dėmesį, kad tarp 3.9 versijos ir dabartinės projekto būsenos yra nedideli, bet svarbūs skirtumai, kuriuos aptarsime vėliau. Norėdami sukurti iš šaltinio kodo, įdiekite visus reikiamus paketus:

apt install git build-essential autoconf make libtool iptables-dev libxtables-dev pkg-config libnet-cidr-lite-perl libtext-csv-xs-perl

Klonuoti saugyklą:

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

cd xtables-addons-xtables-addons

xtables-addons yra daug plėtinių, bet mus domina tik xt_geoip. Jei nenorite vilkti nereikalingų plėtinių į sistemą, galite juos neįtraukti iš kūrimo. Norėdami tai padaryti, turite redaguoti failą mconfig. Įdiekite visus norimus modulius y, ir pažymėkite visus nereikalingus n. Mes renkame:

./autogen.sh

./configure

make

Ir įdiegti su supervartotojo teisėmis:

make install

Diegiant branduolio modulius gali įvykti klaida, panaši į šią:

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

Tokia situacija susidaro dėl to, kad neįmanoma pasirašyti branduolio modulių, nes nėra ką pasirašyti. Šią problemą galite išspręsti naudodamiesi keliomis komandomis:

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

Sukompiliuotas branduolio modulis yra įdiegtas, tačiau sistema jo neaptinka. Paprašykime sistemos sukurti priklausomybės žemėlapį, atsižvelgdami į naująjį modulį, ir įkelkime jį:

depmod -a

modprobe xt_geoip

Įsitikinkite, kad xt_geoip įkeltas į sistemą:

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

Be to, įsitikinkite, kad plėtinys įkeltas į iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Džiaugiamės viskuo ir belieka pridėti modulio pavadinimą / etc / moduliaikad modulis veiktų iš naujo paleidus OS. Nuo šiol iptables supranta geoip komandas, bet neturi pakankamai duomenų darbui. Pradėkime įkelti geoip duomenų bazę.

GeoIP duomenų bazės gavimas

Sukuriame katalogą, kuriame bus saugoma iptables plėtiniui suprantama informacija:

mkdir /usr/share/xt_geoip

Straipsnio pradžioje minėjome, kad yra skirtumų tarp versijos iš šaltinio kodo ir versijos iš paketų tvarkyklės. Labiausiai pastebimas skirtumas yra duomenų bazės teikėjo ir scenarijaus pasikeitimas xt_geoip_dl, kuri atsisiunčia naujausius duomenis.

Paketų tvarkyklės versija

Scenarijus yra kelyje /usr/lib/xtables-addons, bet kai bandysite jį paleisti, pamatysite ne itin informatyvią klaidą:

# ./xt_geoip_dl 
unzip:  cannot find or open GeoLite2-Country-CSV.zip, GeoLite2-Country-CSV.zip.zip or GeoLite2-Country-CSV.zip.ZIP.

Anksčiau „GeoLite“ produktas, dabar žinomas kaip „GeoLite Legacy“, platinamas pagal licenciją, buvo naudojamas kaip duomenų bazė. Creative Commons ASA 4.0 įmonė MaxMind. Su šiuo produktu vienu metu įvyko du įvykiai, kurie „nutraukė“ suderinamumą su iptables plėtiniu.

Pirma, 2018 m. sausio mėn paskelbė apie produkto palaikymo nutraukimą, o 2019 m. sausio 2 d. iš oficialios svetainės buvo pašalintos visos nuorodos į senosios duomenų bazės versijos atsisiuntimą. Naujiems vartotojams rekomenduojama naudoti GeoLite2 produktą arba jo mokamą versiją GeoIPXNUMX.

Antra, nuo 2019 m. gruodžio mėn. MaxMind jis teigė, apie reikšmingą prieigos prie jų duomenų bazių pasikeitimą. Kad atitiktų Kalifornijos vartotojų privatumo įstatymą, „MaxMind“ nusprendė „GeoLite2“ platinimą „uždengti“ registracija.

Kadangi norime naudoti jų gaminį, užsiregistruosime šiame puslapyje.

xtables-addons: filtruokite paketus pagal šalį
Tada gausite el. laišką, kuriame bus prašoma nustatyti slaptažodį. Dabar, kai sukūrėme paskyrą, turime sukurti licencijos raktą. Jūsų asmeninėje paskyroje randame prekę Mano licencijos raktai, tada spustelėkite mygtuką Sukurkite naują licencijos raktą.

Kuriant raktą mums bus užduotas tik vienas klausimas: ar naudosime šį raktą GeoIP Update programoje? Atsakome neigiamai ir paspaudžiame mygtuką Patvirtinti. Raktas bus rodomas iššokančiajame lange. Išsaugokite šį raktą saugioje vietoje, nes uždarę iššokantįjį langą nebegalėsite peržiūrėti viso rakto.

xtables-addons: filtruokite paketus pagal šalį
Mes turime galimybę rankiniu būdu atsisiųsti GeoLite2 duomenų bazes, tačiau jų formatas nesuderinamas su formatu, kurio tikimasi pagal scenarijų xt_geoip_build. Čia į pagalbą ateina „GeoLite2xtables“ scenarijai. Norėdami paleisti scenarijus, įdiekite NetAddr::IP perl modulį:

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

Tada mes klonuojame saugyklą su scenarijais ir įrašome anksčiau gautą licencijos raktą į failą:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Paleiskite scenarijus:

# Скачиваем данные 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 nustato 2000 atsisiuntimų per dieną limitą ir, esant dideliam serverių skaičiui, siūlo talpyklą saugoti naujinimą tarpiniame serveryje.

Atkreipkite dėmesį, kad išvesties failas turi būti iškviestas dbip-country-lite.csv... Deja, 20_convert_geolite2 nesukuria tobulo failo. Scenarijus xt_geoip_build laukia trys stulpeliai:

  • adresų diapazono pradžia;
  • adresų diapazono pabaiga;
  • šalies kodas iso-3166-alpha2.

Ir išvesties faile yra šeši stulpeliai:

  • adresų diapazono pradžia (eilutės atvaizdavimas);
  • adresų diapazono pabaiga (eilutės atvaizdavimas);
  • adresų diapazono pradžia (skaitinis vaizdavimas);
  • adresų diapazono pabaiga (skaitinis vaizdavimas);
  • šalies kodas;
  • šalies pavadinimas.

Šis neatitikimas yra labai svarbus ir gali būti ištaisytas vienu iš dviejų būdų:

  1. Redaguoti 20_convert_geolite2;
  2. Redaguoti xt_geoip_build.

Pirmuoju atveju sumažiname printf į reikiamą formatą, o antrajame - keičiame priskyrimą kintamajam $cc apie $eilutė->[4]. Po to galite statyti:

/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

Atkreipkite dėmesį, kad autorius GeoLite2xtables nelaiko savo scenarijų paruoštais gamybai ir pasiūlymams takelis originalių xt_geoip_* scenarijų kūrimui. Todėl pereikime prie surinkimo nuo šaltinio kodų, kuriuose šie scenarijai jau buvo atnaujinti.

Šaltinio versija

Diegiant iš šaltinio kodo scenarijus xt_geoip_* yra kataloge /usr/local/libexec/xtables-addons. Ši scenarijaus versija naudoja duomenų bazę IP į Country Lite. Licencija yra Creative Commons Attribution License, o iš turimų duomenų yra trys labai reikalingi stulpeliai. Atsisiųskite ir surinkite duomenų bazę:

cd /usr/share/xt_geoip/

/usr/local/libexec/xtables-addons/xt_geoip_dl

/usr/local/libexec/xtables-addons/xt_geoip_build

Atlikus šiuos veiksmus, iptables yra paruoštas darbui.

Geoip naudojimas iptables

Modulis xt_geoip prideda tik du raktus:

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.

Paprastai iptables taisyklių kūrimo metodai nesikeičia. Norėdami naudoti raktus iš papildomų modulių, turite aiškiai nurodyti modulio pavadinimą mygtuku -m. Pavyzdžiui, taisyklė blokuoti įeinančius TCP ryšius per 443 prievadą, o ne iš JAV visose sąsajose:

iptables -I INPUT ! -i lo -p tcp --dport 443 -m geoip ! --src-cc US -j DROP

Failai, sukurti naudojant xt_geoip_build, naudojami tik kuriant taisykles, tačiau į juos neatsižvelgiama filtruojant. Taigi, norėdami teisingai atnaujinti geoip duomenų bazę, pirmiausia turite atnaujinti iv* failus, o tada iš naujo sukurti visas taisykles, kurios naudoja geoip iptables.

išvada

Paketų filtravimas pagal šalis yra laiko šiek tiek pamiršta strategija. Nepaisant to, programinės įrangos įrankiai tokiam filtravimui yra kuriami ir, ko gero, netrukus paketų tvarkytuvėse pasirodys nauja xt_geoip versija su nauju geoip duomenų teikėju, o tai labai supaprastins sistemos administratorių gyvenimą.

xtables-addons: filtruokite paketus pagal šalį

Apklausoje gali dalyvauti tik registruoti vartotojai. Prisijungti, Prašau.

Ar kada nors naudojote filtravimą pagal šalį?

  • 59,1%Taip 13

  • 40,9%Nr.9

Balsavo 22 vartotojai. 3 vartotojai susilaikė.

Šaltinis: www.habr.com

Добавить комментарий