Ú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
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
Nejprve v lednu 2018
Za druhé, od prosince 2019 MaxMind
Jelikož chceme používat jejich produkt, zaregistrujeme se na této stránce.
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íč.
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ů:
- vládnout 20_convert_geolite2;
- vládnout xt_geoip_build.
V prvním případě snížíme
/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
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
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.
Průzkumu se mohou zúčastnit pouze registrovaní uživatelé.
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