
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 . 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-perlMegjegyzendő, 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-perlKló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-addonsAz 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./configuremakeMajd telepítse rendszergazda jogokkal:
make installA 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 directoryEz 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/certscat < 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
EOFopenssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pemA 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 -amodprobe xt_geoipLet'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_tablesAdditionally, let's ensure that the extension has loaded into iptables:
# cat /proc/net/ip_tables_matches
geoip
icmpWe'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_geoipAt 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 by the company . There were two events with this product that 'broke' compatibility with the iptables extension.
Firstly, in January 2018 , 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 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.

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.

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.gztar xvf NetAddr-IP-4.079.tar.gzcd NetAddr-IP-4.079perl Makefile.PLmakemake installEzutá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.gitcd GeoLite2xtablesecho YOUR_LICENSE_KEY=’123ertyui123' > geolite2.licenseIndí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.csvMaxMind 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ó:
- javítani 20_convert_geolite2;
- javítani xt_geoip_build.
Az első esetben csökkentsük 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-reJelentsük meg, hogy a szerző nem tartja a scriptjeit éles használatra késznek, és ajánlja 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 . 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_buildEzek 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 DROPAz 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.
Csak a regisztrált felhasználók vehetnek részt a szavazáson. , 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
