xtables-addons: a csomagok szűrése ország szerint

xtables-addons: a csomagok szűrése ország szerint
Az egyes országokból érkező forgalom blokkolása egyszerűnek tűnik, de az első benyomás megtévesztő lehet. Ma elmondjuk, hogyan lehet ezt megvalósítani.

őstörténet

A google keresés eredménye ebben a témában kiábrándító: a megoldások nagy része már régóta „rohadt”, és néha úgy tűnik, hogy ez a téma végleg el lett felejtve. Sok régi lemezt átfésültünk, és készen állunk megosztani az utasítások modern változatát.

Javasoljuk, hogy a parancsok végrehajtása előtt olvassa el a teljes cikket.

Operációs rendszer előkészítése

A szűrés a segédprogrammal konfigurálható iptables, amelyhez kiterjesztés szükséges a GeoIP adatokkal való együttműködéshez. Ez a bővítmény itt található xtables-addons. Az xtables-addons az iptables bővítményeit független kernelmodulként telepíti, így nincs szükség az operációs rendszer kernelt újrafordítására.

A cikk írásakor az xtables-addons jelenlegi verziója 3.9. A szabványos Ubuntu 20.04 LTS tárolókban azonban csak a 3.8 található, az Ubuntu 18.04 tárolókban pedig a 3.0. A bővítményt a csomagkezelőből a következő paranccsal telepítheti:

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

Vegye figyelembe, hogy vannak apró, de fontos különbségek a 3.9-es verzió és a projekt jelenlegi állapota között, amelyeket később tárgyalunk. A forráskódból való építéshez telepítse az összes szükséges csomagot:

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

Az adattár klónozása:

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

cd xtables-addons-xtables-addons

Az xtables-addons számos kiterjesztést tartalmaz, de minket csak ezek érdekelnek xt_geoip. Ha nem akarja a szükségtelen bővítményeket a rendszerbe húzni, kizárhatja őket az összeállításból. Ehhez szerkeszteni kell a fájlt mconfig. Az összes kívánt modulhoz telepítse y, és jelölje meg az összes feleslegeset n. Gyűjtjük:

./autogen.sh

./configure

make

És telepítse szuperfelhasználói jogokkal:

make install

A kernelmodulok telepítése során a következőhöz hasonló hiba léphet fel:

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

Ez a helyzet a kernelmodulok aláírásának lehetetlensége miatt adódik, mert nincs mit aláírni. Ezt a problémát néhány paranccsal megoldhatja:

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

A lefordított kernel modul telepítve van, de a rendszer nem érzékeli. Kérjük meg a rendszert, hogy hozzon létre egy függőségi térképet az új modul figyelembevételével, majd töltse be:

depmod -a

modprobe xt_geoip

Győződjön meg arról, hogy az xt_geoip be van töltve a rendszerbe:

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

Ezenkívül győződjön meg arról, hogy a kiterjesztés betöltődik az iptables-ba:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Mindennel elégedettek vagyunk, és már csak a modul nevét kell hozzáadni / etc / moduleshogy a modul az operációs rendszer újraindítása után működjön. Mostantól az iptables megérti a geoip parancsokat, de nem rendelkezik elegendő adattal a munkához. Kezdjük a geoip adatbázis betöltését.

A GeoIP adatbázis beszerzése

Létrehozunk egy könyvtárat, amelyben az iptables kiterjesztés számára érthető információk kerülnek tárolásra:

mkdir /usr/share/xt_geoip

A cikk elején említettük, hogy különbségek vannak a forráskódból származó és a csomagkezelőből származó verzió között. A legszembetűnőbb különbség az adatbázis-szállító és a szkript változása xt_geoip_dl, amely letölti a legfrissebb adatokat.

Csomagkezelő verzió

A szkript az /usr/lib/xtables-addons útvonalon található, de amikor megpróbálja futtatni, egy nem túl informatív hibaüzenetet fog látni:

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

Korábban a licenc alapján terjesztett GeoLite terméket, ma GeoLite Legacy néven használták adatbázisként. Creative Commons ASA 4.0 társaság MaxMind. Ezzel a termékkel egyszerre két olyan esemény történt, amelyek „megszakították” az iptables kiterjesztéssel való kompatibilitást.

Először is, 2018 januárjában bejelentett a termék támogatásának megszűnéséről, és 2019. január 2-án az adatbázis régi verziójának letöltésére mutató összes hivatkozást eltávolították a hivatalos webhelyről. Az új felhasználók számára ajánlott a GeoLite2 termék vagy annak fizetett GeoIPXNUMX verziója.

Másodszor, 2019 decembere óta a MaxMind kijelentette az adatbázisaikhoz való hozzáférés jelentős változásáról. A kaliforniai fogyasztói adatvédelmi törvénynek való megfelelés érdekében a MaxMind úgy döntött, hogy regisztrációval „lefedi” a GeoLite2 terjesztését.

Mivel az ő terméküket szeretnénk használni, ezért ezen az oldalon regisztrálunk.

xtables-addons: a csomagok szűrése ország szerint
Ezután kap egy e-mailt, amelyben jelszó megadására kérik. Most, hogy létrehoztunk egy fiókot, létre kell hoznunk egy licenckulcsot. Személyes fiókjában megtaláljuk a tételt Saját engedélykulcsok, majd kattintson a gombra Új licenckulcs létrehozása.

Kulcs létrehozásakor csak egy kérdést fogunk feltenni: használni fogjuk-e ezt a kulcsot a GeoIP Update programban? Nemleges választ adunk és megnyomjuk a gombot megerősít. A kulcs egy felugró ablakban jelenik meg. Mentse el ezt a kulcsot egy biztonságos helyen, mert ha bezárja a felugró ablakot, többé nem tudja megtekinteni a teljes kulcsot.

xtables-addons: a csomagok szűrése ország szerint
Lehetőségünk van a GeoLite2 adatbázisok manuális letöltésére, de formátumuk nem kompatibilis az xt_geoip_build szkript által elvárt formátummal. Ez az, ahol a GeoLite2xtables szkriptek segítenek. A parancsfájlok futtatásához telepítse a NetAddr::IP perl modult:

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

Ezután szkriptekkel klónozzuk a tárolót, és a korábban megszerzett licenckulcsot egy fájlba írjuk:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Futtassuk a szkripteket:

# Скачиваем данные 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

A MaxMind napi 2000 letöltést szab meg, és nagyszámú szerver esetén felajánlja a frissítés gyorsítótárazását egy proxyszerveren.

Kérjük, vegye figyelembe, hogy a kimeneti fájlt meg kell hívni dbip-country-lite.csv... Sajnálatos módon, 20_convert_geolite2 nem hoz létre tökéletes fájlt. Forgatókönyv xt_geoip_build három oszlopot vár:

  • címtartomány kezdete;
  • címtartomány vége;
  • országkód iso-3166-alpha2.

És a kimeneti fájl hat oszlopot tartalmaz:

  • címtartomány kezdete (sztring reprezentáció);
  • címtartomány vége (sztring reprezentáció);
  • címtartomány kezdete (numerikus ábrázolás);
  • címtartomány vége (numerikus ábrázolás);
  • országkód;
  • az ország neve.

Ez az eltérés kritikus, és kétféleképpen korrigálható:

  1. uralkodni 20_convert_geolite2;
  2. uralkodni xt_geoip_build.

Az első esetben csökkentjük printf a szükséges formátumra, a másodikban pedig megváltoztatjuk a hozzárendelést a változóhoz $cc on $sor->[4]. Ezek után építheted:

/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

Vegye figyelembe, hogy a szerző GeoLite2xtables szkriptjeit nem tekinti késznek a gyártásra és az ajánlatokra vágány eredeti xt_geoip_* szkriptek fejlesztéséhez. Ezért térjünk át az összeállításra a forráskódoktól, amelyekben ezek a szkriptek már frissültek.

Forrás verzió

Forráskód-szkriptekből történő telepítéskor xt_geoip_* a katalógusban találhatók /usr/local/libexec/xtables-addons. A szkriptnek ez a verziója adatbázist használ IP a Country Lite-ra. A licenc Creative Commons Attribution License, és a rendelkezésre álló adatokból ott van a nagyon szükséges három oszlop. Töltse le és állítsa össze az adatbázist:

cd /usr/share/xt_geoip/

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

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

Ezen lépések után az iptables készen áll a munkára.

A geoip használata iptables-ban

Modul xt_geoip csak két kulcsot ad hozzá:

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.

Az iptables szabályok létrehozásának módszerei általában változatlanok maradnak. További modulokból származó kulcsok használatához kifejezetten meg kell adnia a modul nevét a -m kapcsolóval. Például egy szabály, amely minden interfészen blokkolja a bejövő TCP-kapcsolatokat a 443-as porton, nem az USA-ból:

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

Az xt_geoip_build által létrehozott fájlok csak szabályok létrehozásakor kerülnek felhasználásra, de a szűrésnél nem veszik figyelembe. Ezért a geoip adatbázis megfelelő frissítéséhez először frissítenie kell az iv* fájlokat, majd újra létre kell hoznia az összes, a geoip-et használó szabályt az iptables-ban.

Következtetés

A csomagok országok szerinti szűrése az idő által kissé elfelejtett stratégia. Ennek ellenére az ilyen szűréshez szoftveres eszközöket fejlesztenek, és talán hamarosan megjelenik az xt_geoip új verziója egy új geoip adatszolgáltatóval a csomagkezelőkben, ami nagyban leegyszerűsíti a rendszergazdák életét.

xtables-addons: a csomagok szűrése ország szerint

A felmérésben csak regisztrált felhasználók vehetnek részt. Bejelentkezés, kérem.

Használt már ország szerinti szűrést?

  • 59,1%Igen 13

  • 40,9%No9

22 felhasználó szavazott. 3 felhasználó tartózkodott.

Forrás: will.com

Hozzászólás