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

xtables-addons: csomagok szűrése országok szerint
A forgalom blokkolásának feladata bizonyos országokból úgy tűnik, hogy egyszerű, de az első benyomás csalóka. Ma bemutatjuk, hogyan lehet ezt megvalósítani.

Háttér

A Google keresési eredményei ezzel a témával kapcsolatban elszomorítóak: a legtöbb megoldás már régóta elavult, és úgy tűnik, mintha ezt a témát a fiók mélyére tették volna, örökre megfeledkezve róla. Mi azonban "átkutattuk" sok régi bejegyzést, és készen állunk, hogy megosszuk a modern utasítások verzióját.

Javasoljuk, hogy olvassa el a cikket teljes egészében, mielőtt végrehajtja a megadott parancsokat.

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

A szűrést egy segédprogram segítségével fogjuk beállítani iptables, amelyhez GeoIP-adatokkal való munkához kiegészítő szükséges. Ilyen kiegészítőt találunk a következő helyen xtables-addons. Az xtables-addons önálló kernel modulok formájában kiegészítőket telepít az iptables-hez, így nem kell újrakonfigurálni az operációs rendszer kerneljét.

A cikk írásának időpontjában az aktuális verzió az xtables-addons számára 3.9. Azonban az Ubuntu 20.04 LTS alapértelmezett tárolóiban csak a 3.8 érhető el, míg az Ubuntu 18.04 tárolóiban a 3.0. A kiegészítő telepítése a csomagkezelőből a következő parancs használatával történhet:

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

Megjegyzendő, hogy a 3.9-es verzió és a projekt jelenlegi állapota között kis, de fontos eltérések vannak, amelyeket később meg fogunk beszélni. A forráskód alapján történő fordításhoz telepítjük 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

Klónozzuk a tárolót:

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 kiegészítőt tartalmaz, de minket csak a xt_geoipérdekel. Ha nem szeretné fölösleges kiegészítőket bevinni a rendszerbe, azokat kizárhatja a fordításból. Ehhez szerkessze a mconfigfájlt. Minden kívánt modulnál állítson be y, a felesleges moduloknál pedig jelölje meg n. Fordítsa le:

./autogen.sh

./configure

make

Majd telepítse rendszergazda jogokkal:

make install

A kernel modulok telepítése során körülbelül a következő tartalmú 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 azért fordul elő, mert a kernel modulokat nem lehet aláírni, mivel nincs mivel aláírni. Ezt a problémát néhány parancs segítségével megoldhatja:

cd /lib/modules/(uname -r)/build/certs

cat < 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 kernel module has been compiled and installed, but the system does not recognize it. Let's ask the system to create a dependency map considering the new module, and then we'll load it:

depmod -a

modprobe xt_geoip

Let's make sure that xt_geoip is loaded into the system:

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

Additionally, let's ensure that the extension has loaded into iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

We're satisfied and just need to add the module's name to /etc/modules, so that the module will work after the OS reboot. From this moment on, iptables understands geoip commands, but it lacks data to operate. Let's proceed to load the geoip database.

Fetching the GeoIP database

Let's create a directory where the information understandable to the iptables extension will be stored:

mkdir /usr/share/xt_geoip

At the beginning of the article, we mentioned that there are differences between the version from source code and the version from the package manager. The most noticeable difference is the change of database provider and the script xt_geoip_dl, which downloads the current data.

The version from the package manager

The script is located at /usr/lib/xtables-addons, but when attempting to run it, you may encounter a not very informative error:

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

Previously, the GeoLite product was used as the database, now referred to as GeoLite Legacy, distributed under the license Creative Commons ASA 4.0 by the company MaxMind. There were two events with this product that 'broke' compatibility with the iptables extension.

Firstly, in January 2018 bejelentették , the product was discontinued, and on January 2, 2019, all download links for the old version of the database were removed from the official site. New users are advised to use the GeoLite2 product or its paid version GeoIP2.

Secondly, since December 2019, MaxMind kijelentette announced a significant change in access to their databases. To comply with California's consumer protection law, MaxMind decided to 'restrict' the distribution of GeoLite2 by requiring registration.

Since we want to take advantage of their product, we will register on this page.

xtables-addons: csomagok szűrése országok szerint
Ezután egy e-mail érkezik, amelyben arra kérnek, hogy állítsuk be a jelszót. Most, hogy létrehoztuk a fiókot, szükség van egy licenckulcs létrehozására. A felhasználói felületen keressük meg az alábbi részt My License Keys, majd kattintsunk a gombra Generate new License Key.

A kulcs létrehozásakor csak egy kérdést tesznek fel: ezt a kulcsot a GeoIP Update programban fogjuk-e használni? Válaszoljunk nemmel, majd kattintsunk a gombra Confirm. A felugró ablakban megjelenik a kulcs. Mentse el ezt a kulcsot egy biztonságos helyre, mert a felugró ablak bezárása után már nem tudja teljes egészében megtekinteni a kulcsot.

xtables-addons: csomagok szűrése országok szerint
Lehetőségeink vannak GeoLite2 adatbázisokat manuálisan letölteni, de annak a formátuma nem kompatibilis az xt_geoip_build skript által várt formátummal. Itt jönnek a képbe a GeoLite2xtables script-ek. A script-ek futtatásához telepítsük 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 klónozzuk a script-ek tárházát, és mentsük el az előbb kapott licenckulcsot a fájlba:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Indítsuk el a script-eket:

# Скачиваем данные 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 napi 2000 letöltésre korlátozza a lehetőséget, és sok szerver esetén azt javasolja, hogy a frissítést cache-eljük egy proxy-szerveren.

Figyeljünk oda, hogy a kimeneti fájl neve kötelezően dbip-country-lite.csv. Sajnos, 20_convert_geolite2 nem tökéletes fájlt ad vissza. A script xt_geoip_build három oszlopot vár el:

  • címke kezdete;
  • címke vége;
  • ország kód iso-3166-alpha2-ben.

A kimeneti fájl hat oszlopot tartalmaz:

  • címke kezdete (szöveges ábrázolás);
  • címke vége (szöveges ábrázolás);
  • címke kezdete (numerikus ábrázolás);
  • címke vége (numerikus ábrázolás);
  • ország kód;
  • ország név.

Ez a eltérés kritikus, és két módon orvosolható:

  1. javítani 20_convert_geolite2;
  2. javítani xt_geoip_build.

Az első esetben csökkentsük printf a szükséges formátumra, a másodikban módosítsuk a változó hozzáférést $cc Gyorsan emlékezzünk vissza, hogyan működik a moduláris aritmetika. Az óra már egy ismert koncepció. Az órák használata $row->[4]. Ezt követően kezdhetjük a gyűjtést:

/usr/lib/xtables-addons/xt_geoip_build -S /usr/share/xt_geoip/ -D /usr/share/xt_geoip

. . .
 2239 IPv4 tartomány ZA-ra
  348 IPv6 tartomány ZA-ra
   56 IPv4 tartomány ZM-re
   12 IPv6 tartomány ZM-re
   56 IPv4 tartomány ZW-re
   15 IPv6 tartomány ZW-re

Jelentsük meg, hogy a szerző GeoLite2xtables nem tartja a scriptjeit éles használatra késznek, és ajánlja figyelemmel kísérni az eredeti xt_geoip_* szkriptek fejlesztésében. Most térjünk át a forráskódok összeszerelésére, ahol ezek a szkriptek már frissítve lettek.

Forráskódokból származó verzió

Forráskódokból való telepítéskor a szkriptek xt_geoip_* a könyvtárban találhatók /usr/local/libexec/xtables-addons. Ebben a verzióban az adatbázis használja IP to Country Lite. Licenc — Creative Commons Attribution Licenc, és a rendelkezésre álló adatok közül ezek a szükséges három oszlop. Töltsük le és állítsuk ö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

Ezek után az iptables készen áll a munkára.

Használjuk a geoip-t az iptables-ben

Modul xt_geoip mindössze két kulcsszót ad hozzá:

geoip match options:
[!] --src-cc, --source-country country[,country...]
	Paketek egyezése az (egyik) megadott ország(ok)ból
[!] --dst-cc, --destination-country country[,country...]
	Paketek egyezése az (egyik) megadott ország(ok)ba

MEGJEGYZÉS: Az ország az ISO3166 kódjával van megadva.

Az iptables szabályok kialakításának módjai alapvetően változatlanok maradnak. A kiegészítő modulok kulcsainak használatához egyértelműen meg kell adni a modul nevét a -m kulccsal. Például egy szabály belépő TCP kapcsolatok blokkolására az 443-as porton, nem az Egyesült Államokból, minden interfészen:

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 használhatók, de nem számítanak bele a szűrésbe. Így a geoip adatbázisának helyes frissítéséhez először frissíteni kell az iv*-fájlokat, majd újra kell alkotni minden szabályt, amely a geoip-t használja az iptables-ben.

Zárás

A csomagok országok szerinti szűrése — egy idővel elfeledett stratégia. Ennek ellenére a szűréshez szükséges szoftveres eszközök fejlődnek, és lehet, hogy hamarosan új verziójú xt_geoip jelenik meg, új geoip adatforrással a csomagkezelőkben, ami jelentősen megkönnyíti a rendszergazdák életét.

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

Csak a regisztrált felhasználók vehetnek részt a szavazáson. Kérem, jelentkezzen be., kérem.

Ön próbálta már az országok szerinti szűrést?

  • 59,1%Igen13

  • 40,9%Nem9

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

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster