xtables-addons: filtrovanie balíkov podľa krajiny

xtables-addons: filtrovanie balíkov podľa krajiny
Úloha blokovania premávky z určitých krajín sa zdá byť jednoduchá, ale prvý dojem môže klamať. Dnes vám povieme, ako sa to dá implementovať.

pravek

Výsledky vyhľadávania Google na túto tému sú sklamaním: väčšina riešení je už dávno „prehnitá“ a niekedy sa zdá, že táto téma bola navždy odložená a zabudnutá. Prešli sme veľa starých záznamov a sme pripravení zdieľať modernú verziu pokynov.

Pred vykonaním týchto príkazov vám odporúčame prečítať si celý článok.

Príprava operačného systému

Filtrovanie sa nakonfiguruje pomocou pomôcky iptables, ktorá vyžaduje rozšírenie na prácu s údajmi GeoIP. Toto rozšírenie nájdete v xtables-addons. xtables-addons inštaluje rozšírenia pre iptables ako nezávislé moduly jadra, takže nie je potrebné prekompilovať jadro OS.

V čase písania tohto článku je aktuálna verzia xtables-addons 3.9. Avšak iba 20.04 možno nájsť v štandardných úložiskách Ubuntu 3.8 LTS a 18.04 v úložiskách Ubuntu 3.0. Rozšírenie môžete nainštalovať zo správcu balíkov pomocou nasledujúceho príkazu:

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

Všimnite si, že medzi verziou 3.9 a aktuálnym stavom projektu sú malé, ale dôležité rozdiely, o ktorých budeme diskutovať neskôr. Ak chcete zostaviť zo zdrojového kódu, nainštalujte všetky potrebné balíky:

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

Klonujte úložisko:

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

cd xtables-addons-xtables-addons

xtables-addons obsahuje veľa rozšírení, ale nás zaujímajú iba xt_geoip. Ak nechcete do systému ťahať nepotrebné rozšírenia, môžete ich vylúčiť zo zostavy. Ak to chcete urobiť, musíte súbor upraviť mconfig. Pre všetky požadované moduly nainštalujte ya označte všetky nepotrebné n. Zbierame:

./autogen.sh

./configure

make

A nainštalujte s právami superužívateľa:

make install

Počas inštalácie modulov jadra sa môže vyskytnúť chyba podobná nasledujúcej:

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

Táto situácia vzniká z dôvodu nemožnosti podpísania modulov jadra, pretože niet čo podpisovať. Tento problém môžete vyriešiť pomocou niekoľkých príkazov:

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

Kompilovaný modul jadra je nainštalovaný, ale systém ho nezistí. Požiadame systém, aby vytvoril mapu závislostí zohľadňujúcu nový modul a potom ju načítal:

depmod -a

modprobe xt_geoip

Uistite sa, že xt_geoip je načítaný do systému:

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

Okrem toho sa uistite, že rozšírenie je načítané do iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Sme spokojní so všetkým a zostáva už len pridať názov modulu / etc / modulesaby modul fungoval po reštarte OS. Odteraz iptables rozumie príkazom geoip, ale nemá dostatok údajov na prácu. Začnime načítavať databázu geoip.

Získanie databázy GeoIP

Vytvoríme adresár, v ktorom budú uložené informácie zrozumiteľné pre rozšírenie iptables:

mkdir /usr/share/xt_geoip

Na začiatku článku sme spomínali, že medzi verziou zo zdrojového kódu a verziou zo správcu balíkov sú rozdiely. Najvýraznejším rozdielom je zmena dodávateľa databázy a skriptu xt_geoip_dl, ktorý sťahuje najnovšie údaje.

Verzia správcu balíkov

Skript sa nachádza v ceste /usr/lib/xtables-addons, ale keď sa ho pokúsite spustiť, uvidíte nie príliš informatívnu chybu:

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

Predtým sa ako databáza používal produkt GeoLite, teraz známy ako GeoLite Legacy, distribuovaný na základe licencie Creative Commons ASA 4.0 spoločnosť MaxMind. S týmto produktom sa naraz vyskytli dve udalosti, ktoré „narušili“ kompatibilitu s rozšírením iptables.

Najprv v januári 2018 oznámil o ukončení podpory produktu a 2019. januára 2 boli z oficiálnej stránky odstránené všetky odkazy na stiahnutie starej verzie databázy. Novým používateľom odporúčame používať produkt GeoLite2 alebo jeho platenú verziu GeoIPXNUMX.

Po druhé, od decembra 2019 MaxMind uviedol o výraznej zmene prístupu k ich databázam. V súlade s kalifornským zákonom o ochrane súkromia spotrebiteľov sa MaxMind rozhodol „pokryť“ distribúciu GeoLite2 registráciou.

Keďže chceme využívať ich produkt, zaregistrujeme sa na tejto stránke.

xtables-addons: filtrovanie balíkov podľa krajiny
Potom dostanete e-mail so žiadosťou o nastavenie hesla. Teraz, keď sme vytvorili účet, musíme vytvoriť licenčný kľúč. Vo vašom osobnom účte nájdeme položku Moje licenčné kľúčea potom kliknite na tlačidlo Vygenerujte nový licenčný kľúč.

Pri vytváraní kľúča sa nás opýta len jedna otázka: použijeme tento kľúč v programe GeoIP Update? Odpovieme negatívne a stlačíme tlačidlo potvrdiť. Kľúč sa zobrazí vo vyskakovacom okne. Uložte si tento kľúč na bezpečné miesto, pretože po zatvorení vyskakovacieho okna už nebudete môcť zobraziť celý kľúč.

xtables-addons: filtrovanie balíkov podľa krajiny
Máme možnosť sťahovať databázy GeoLite2 manuálne, ale ich formát nie je kompatibilný s formátom očakávaným skriptom xt_geoip_build. Tu prichádzajú na pomoc skripty GeoLite2xtables. Ak chcete spustiť skripty, nainštalujte modul 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

Ďalej naklonujeme úložisko pomocou skriptov a zapíšeme predtým získaný licenčný kľúč do súboru:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Spustíme skripty:

# Скачиваем данные 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 stanovuje limit 2000 stiahnutí za deň a pri veľkom počte serverov ponúka uloženie aktualizácie do vyrovnávacej pamäte na proxy serveri.

Upozorňujeme, že výstupný súbor sa musí volať dbip-country-lite.csv... Bohužiaľ 20_convert_geolite2 nevytvára dokonalý súbor. Skript xt_geoip_build očakáva tri stĺpce:

  • začiatok rozsahu adries;
  • koniec rozsahu adries;
  • kód krajiny v iso-3166-alpha2.

A výstupný súbor obsahuje šesť stĺpcov:

  • začiatok rozsahu adries (reťazcová reprezentácia);
  • koniec rozsahu adries (reťazcová reprezentácia);
  • začiatok rozsahu adries (číselné znázornenie);
  • koniec rozsahu adries (číselné znázornenie);
  • kód krajiny;
  • názov krajiny.

Tento nesúlad je kritický a možno ho opraviť jedným z dvoch spôsobov:

  1. pravidlo 20_convert_geolite2;
  2. pravidlo xt_geoip_build.

V prvom prípade znížime printf na požadovaný formát a v druhom - zmeníme priradenie na premennú $cc na $row->[4]. Potom môžete postaviť:

/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

Všimnite si, že autor GeoLite2xtables nepovažuje svoje scenáre za pripravené na výrobu a ponuky trať pre vývoj originálnych xt_geoip_* skriptov. Prejdime preto k zostave zo zdrojových kódov, v ktorej sú už tieto skripty aktualizované.

Zdrojová verzia

Pri inštalácii zo zdrojových kódov skriptov xt_geoip_* sa nachádzajú v katalógu /usr/local/libexec/xtables-addons. Táto verzia skriptu používa databázu IP na Country Lite. Licencia je Creative Commons Attribution License a z dostupných údajov sú veľmi potrebné tri stĺpce. Stiahnite si a zostavte databázu:

cd /usr/share/xt_geoip/

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

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

Po týchto krokoch je iptables pripravený na prácu.

Použitie geoip v iptables

Modul xt_geoip pridáva iba dva kľúče:

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.

Metódy vytvárania pravidiel pre iptables vo všeobecnosti zostávajú nezmenené. Ak chcete použiť kľúče z ďalších modulov, musíte explicitne zadať názov modulu pomocou prepínača -m. Napríklad pravidlo na blokovanie prichádzajúcich pripojení TCP na porte 443 nie z USA na všetkých rozhraniach:

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

Súbory vytvorené pomocou xt_geoip_build sa používajú iba pri vytváraní pravidiel, ale pri filtrovaní sa neberú do úvahy. Ak chcete správne aktualizovať databázu geoip, musíte najprv aktualizovať súbory iv* a potom znova vytvoriť všetky pravidlá, ktoré používajú geoip v iptables.

Záver

Filtrovanie paketov na základe krajín je stratégiou, na ktorú sa časom trochu zabudlo. Napriek tomu sa vyvíjajú softvérové ​​nástroje na takéto filtrovanie a možno sa už čoskoro v správcov balíkov objaví nová verzia xt_geoip s novým poskytovateľom údajov geoip, čo výrazne zjednoduší život systémovým administrátorom.

xtables-addons: filtrovanie balíkov podľa krajiny

Do prieskumu sa môžu zapojiť iba registrovaní užívatelia. Prihlásiť saProsím.

Použili ste niekedy filtrovanie podľa krajiny?

  • 59,1%Áno13

  • 40,9%č.9

Hlasovali 22 používatelia. 3 používatelia sa zdržali hlasovania.

Zdroj: hab.com

Pridať komentár