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ó
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.
Először is, 2018 januárjában
Másodszor, 2019 decembere óta a MaxMind
Mivel az ő terméküket szeretnénk használni, ezért ezen az oldalon regisztrálunk.
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.
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ó:
- uralkodni 20_convert_geolite2;
- uralkodni xt_geoip_build.
Az első esetben csökkentjük
/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ő
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
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.
A felmérésben csak regisztrált felhasználók vehetnek részt.
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