xtables-addons: filtrujte balíčky podle země

xtables-addons: filtrujte balíčky podle země
Úkol blokovat provoz z určitých zemí se zdá jednoduchý, ale první dojem může klamat. Dnes vám řekneme, jak to lze implementovat.

pravěk

Výsledky vyhledávání Google na toto téma jsou zklamáním: většina řešení je již dávno „shnilá“ a někdy se zdá, že toto téma bylo odloženo a zapomenuto navždy. Pročesali jsme spoustu starých záznamů a jsme připraveni sdílet moderní verzi pokynů.

Před provedením těchto příkazů doporučujeme přečíst si celý článek.

Příprava operačního systému

Filtrování bude nakonfigurováno pomocí nástroje iptables, která vyžaduje rozšíření pro práci s daty GeoIP. Toto rozšíření najdete v xtables-addons. xtables-addons instaluje rozšíření pro iptables jako nezávislé moduly jádra, takže není potřeba překompilovat jádro OS.

V době psaní tohoto článku je aktuální verze xtables-addons 3.9. Nicméně pouze 20.04 lze nalézt ve standardních úložištích Ubuntu 3.8 LTS a 18.04 v úložištích Ubuntu 3.0. Rozšíření můžete nainstalovat ze správce balíčků pomocí následujícího příkazu:

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

Všimněte si, že mezi verzí 3.9 a aktuálním stavem projektu jsou malé, ale důležité rozdíly, o kterých budeme hovořit později. Chcete-li sestavit ze zdrojového kódu, nainstalujte všechny potřebné 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žiště:

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

cd xtables-addons-xtables-addons

xtables-addons obsahuje mnoho rozšíření, ale nás zajímá pouze xt_geoip. Pokud nechcete do systému přetahovat nepotřebná rozšíření, můžete je ze sestavení vyloučit. Chcete-li to provést, musíte soubor upravit mconfig. Pro všechny požadované moduly nainstalujte ya označte všechny nepotřebné n. Sbíráme:

./autogen.sh

./configure

make

A nainstalovat s právy superuživatele:

make install

Během instalace modulů jádra může dojít k chybě podobné následující:

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

Tato situace vzniká z důvodu nemožnosti podepisování modulů jádra, protože není co podepisovat. Tento problém můžete vyřešit pomocí několika příkazů:

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

Zkompilovaný modul jádra je nainstalován, ale systém jej nedetekuje. Požádejme systém, aby vytvořil mapu závislostí s ohledem na nový modul a poté ji načetl:

depmod -a

modprobe xt_geoip

Ujistíme se, že xt_geoip je načten do systému:

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

Dále se ujistěte, že je rozšíření načteno do iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Se vším jsme spokojeni a zbývá jen přidat název modulu / etc / modulesaby modul fungoval po restartu OS. Od této chvíle iptables rozumí příkazům geoip, ale nemá dostatek dat pro práci. Začneme načítat databázi geoip.

Získání databáze GeoIP

Vytvoříme adresář, ve kterém budou uloženy informace srozumitelné pro rozšíření iptables:

mkdir /usr/share/xt_geoip

Na začátku článku jsme zmínili, že existují rozdíly mezi verzí ze zdrojového kódu a verzí ze správce balíčků. Nejvýraznějším rozdílem je změna dodavatele databáze a skriptu xt_geoip_dl, který stahuje nejnovější data.

Verze správce balíčků

Skript se nachází v cestě /usr/lib/xtables-addons, ale při pokusu o jeho spuštění se zobrazí nepříliš informativní chyba:

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

Dříve byl jako databáze používán produkt GeoLite, nyní známý jako GeoLite Legacy, distribuovaný na základě licence Creative Commons ASA 4.0 společnost MaxMind. U tohoto produktu došlo ke dvěma událostem najednou, které „narušily“ kompatibilitu s rozšířením iptables.

Nejprve v lednu 2018 oznámil o ukončení podpory produktu a 2019. ledna 2 byly z oficiálních stránek odstraněny všechny odkazy na stažení staré verze databáze. Novým uživatelům doporučujeme používat produkt GeoLite2 nebo jeho placenou verzi GeoIPXNUMX.

Za druhé, od prosince 2019 MaxMind uvedl o výrazné změně v přístupu k jejich databázím. V souladu s kalifornským zákonem o ochraně soukromí spotřebitelů se MaxMind rozhodl „pokrýt“ distribuci GeoLite2 registrací.

Jelikož chceme používat jejich produkt, zaregistrujeme se na této stránce.

xtables-addons: filtrujte balíčky podle země
Poté obdržíte e-mail s výzvou k nastavení hesla. Nyní, když jsme vytvořili účet, musíme vytvořit licenční klíč. Ve vašem osobním účtu najdeme položku Moje licenční klíčea poté klikněte na tlačítko Vygenerujte nový licenční klíč.

Při vytváření klíče nám bude položena jediná otázka: použijeme tento klíč v programu GeoIP Update? Odpovíme záporně a stiskneme tlačítko Potvrdit. Klíč se zobrazí ve vyskakovacím okně. Uložte tento klíč na bezpečném místě, protože jakmile zavřete vyskakovací okno, nebudete již moci zobrazit celý klíč.

xtables-addons: filtrujte balíčky podle země
Máme možnost stahovat databáze GeoLite2 ručně, ale jejich formát není kompatibilní s formátem očekávaným skriptem xt_geoip_build. Zde přicházejí na pomoc skripty GeoLite2xtables. Chcete-li spouštět skripty, nainstalujte 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

Dále naklonujeme úložiště pomocí skriptů a zapíšeme dříve získaný licenční klíč do souboru:

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 zavádí limit 2000 stažení za den a u velkého počtu serverů nabízí uložení aktualizace do mezipaměti na proxy serveru.

Upozorňujeme, že výstupní soubor musí být volán dbip-country-lite.csv... Bohužel, 20_convert_geolite2 nevytváří dokonalý soubor. Skript xt_geoip_build očekává tři sloupce:

  • začátek rozsahu adres;
  • konec rozsahu adres;
  • kód země v iso-3166-alpha2.

A výstupní soubor obsahuje šest sloupců:

  • začátek rozsahu adres (reprezentace řetězce);
  • konec rozsahu adres (reprezentace řetězce);
  • začátek rozsahu adres (číselná reprezentace);
  • konec rozsahu adres (číselná reprezentace);
  • kód země;
  • název země.

Tato nesrovnalost je kritická a lze ji opravit jedním ze dvou způsobů:

  1. vládnout 20_convert_geolite2;
  2. vládnout xt_geoip_build.

V prvním případě snížíme printf na požadovaný formát a ve druhém - změníme přiřazení na proměnnou $cc na $row->[4]. Poté můžete stavět:

/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šimněte si, že autor GeoLite2xtables nepovažuje své scénáře za připravené k výrobě a nabídky následovat pro vývoj originálních xt_geoip_* skriptů. Přejděme proto k sestavení ze zdrojových kódů, ve kterých již byly tyto skripty aktualizovány.

Zdrojová verze

Při instalaci ze skriptů zdrojového kódu xt_geoip_* jsou umístěny v katalogu /usr/local/libexec/xtables-addons. Tato verze skriptu používá databázi IP do Country Lite. Licence je Creative Commons Attribution License a z dostupných údajů jsou velmi potřebné tři sloupce. Stáhněte a sestavte databázi:

cd /usr/share/xt_geoip/

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

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

Po těchto krocích je iptables připraven k práci.

Použití geoip v iptables

Modul xt_geoip přidává pouze dva klíč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.

Metody pro vytváření pravidel pro iptables obecně zůstávají nezměněny. Chcete-li použít klíče z dalších modulů, musíte explicitně zadat název modulu pomocí přepínače -m. Například pravidlo pro blokování příchozích TCP spojení na portu 443, které nepochází z USA na všech rozhraních:

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

Soubory vytvořené xt_geoip_build se používají pouze při vytváření pravidel, ale nejsou brány v úvahu při filtrování. Chcete-li tedy správně aktualizovat databázi geoip, musíte nejprve aktualizovat soubory iv* a poté znovu vytvořit všechna pravidla, která používají geoip v iptables.

Závěr

Filtrování paketů na základě zemí je strategie poněkud zapomenutá dobou. Navzdory tomu se vyvíjejí softwarové nástroje pro takové filtrování a snad se brzy ve správcích balíčků objeví nová verze xt_geoip s novým poskytovatelem dat geoip, což výrazně zjednoduší život systémovým administrátorům.

xtables-addons: filtrujte balíčky podle země

Průzkumu se mohou zúčastnit pouze registrovaní uživatelé. Přihlásit se, prosím.

Použili jste někdy filtrování podle země?

  • 59,1%Ano 13

  • 40,9%No9

22 uživatelé hlasovali. 3 uživatelé se zdrželi hlasování.

Zdroj: www.habr.com

Přidat komentář