xtables-addons: filtrojmë paketat sipas vendeve

xtables-addons: filtrojmë paketat sipas vendeve
Shqetësimi për bllokimin e trafikut nga vende të caktuara duket i thjeshtë, por përshtypja e parë është e pavërtetë. Sot do të flasim për mënyrën se si mund ta realizoni këtë.

Pas historia

Rezultatet e kërkimit në Google për këtë temë janë zhgënjyese: shumica e zgjidhjeve janë tashmë "prishur" dhe ndonjëherë duket se kjo temë është lënë mënjanë dhe është harruar përfundimisht. Ne kemi "kërkuar" shumë shënime të vjetra dhe jemi të gatshëm të ndarim versionin modern të udhëzimit.

Këshillojmë të lexoni artikullin plotësisht para se të kryeni komandat e treguara.

Përgatitja e sistemit operativ

Filtrimi do të konfigurohet me anë të utilitarit iptables, që kërkon një zgjerim për të punuar me të dhënat GeoIP. Një zgjerim të tillë mund ta gjeni në xtables-addons. xtables-addons instalon zgjerime për iptables si module të pavarura bërthamore, duke mos e bërë të nevojshme rikompilimin e bërthamës së sistemit operativ.

Në momentin e shk writing ekzistion, versioni aktual i xtables-addons është 3.9. Megjithatë, në depot standarde të Ubuntu 20.04 LTS mund të gjeni vetëm 3.8, ndërsa në depot e Ubuntu 18.04 - 3.0. Mund ta instaloni zgjerimin nga menaxheri i paketave me komandën e mëposhtme:

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

Vërejtim se midis versionit 3.9 dhe gjendjes aktuale të projektit ka disa dallime të vogla, por të rëndësishme, për të cilat do të flasim më vonë. Për ndërtimin nga kodet burimore, instalojmë të gjitha paketat e nevojshme:

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

Klonojmë depozitën:

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

cd xtables-addons-xtables-addons

xtables-addons përmban shumë zgjerime, por ne na intereson vetëm xt_geoip. Nëse nuk dëshironi të sillni në sistem zgjerime të panevojshme, mund t'i përjashtoni nga ndërtimi. Për këtë, duhet të redaktoni skedarin mconfig. Për të gjitha modulet e dëshiruara vendosni y, dhe të gjithë të panevojshmit shenjoni n. Ndërtojmë:

./autogen.sh

./configure

make

Dhe instalojmë me të drejta superuser:

make install

Gjatë instalimit të moduleve të kernelit, mund të ndodhë një gabim që ka përmbajtje afërsisht të tillë:

INSTALL /root/xtables-addons-xtables-addons/extensions/xt_geoip.ko
At main.c:160:
- Gabim SSL:02001002:biblioteka e sistemit:fopen:Nuk ekziston asnjë skedar ose directory: ../crypto/bio/bss_file.c:72
- Gabim SSL:2006D080:Procedurat BIO:BIO_new_file:nuk ekziston asnjë skedar: ../crypto/bio/bss_file.c:79
sign-file: certs/signing_key.pem: Nuk ekziston asnjë skedar ose directory

Kjo situatë ndodh për shkak të pamundësisë për të nënshkruar modulat e kernelit, pasi nuk ka çfarë të nënshkruajë. Këtë problem mund ta zgjidhni me disa komanda:

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

Moduli i kompiluar i bërthamës është instaluar, por sistemi nuk e njeh atë. Le të kërkojmë nga sistemi të krijojë një mapë varësish me marrjen parasysh modulin e ri, pastaj ta ngarkojmë atë:

depmod -a

modprobe xt_geoip

Le të sigurohemi që xt_geoip është ngarkuar në sistem:

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

Së fundi, le të sigurohemi që zgjerimi është ngarkuar në iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Të gjitha janë në rregull dhe mbetet vetëm ta shtojmë emrin e modulit në /etc/modules, për t'u siguruar që moduli të funksionojë pas riçaktivizimit të OS-së. Që nga ky moment, iptables e kupton komandat geoip, por i mungojnë të dhënat për të funksionuar. Le të fillojmë ngarkimin e bazës së të dhënave geoip.

Marrja e bazës së të dhënave GeoIP

Krijojmë një katalog ku do të ruhet informacioni i kuptueshëm për zgjerimin e iptables:

mkdir /usr/share/xt_geoip

Në fillim të artikullit përmendëm se ka dallime midis versionit nga kodi burimor dhe versionit nga menaxheri i pakove. Dallimi më i dukshëm është në furnizuesin e bazës së të dhënave dhe skriptin xt_geoip_dl, i cili shkarkon të dhënat e fundit.

Versioni nga menaxheri i pakove

Skripti ndodhet në rrugën /usr/lib/xtables-addons, megjithatë kur përpiqeni ta ekzekutoni, mund të shihni një gabim që nuk është shumë informativ:

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

Më parë, si bazë të dhënash është përdorur produkti GeoLite, i njohur tani si GeoLite Legacy, i shpërndarë nën licencën Creative Commons ASA 4.0 nga kompania MaxMind. Ky produkt pësoi dy ngjarje që "prishën" compatibilitetin me shtesën për iptables.

Së pari, në janar 2018 konfirmuan u njoftua për ndërprerjen e mbështetjes për produktin, dhe më 2 janar 2019, të gjitha lidhjet për shkarkimin e versionit të vjetër u hoqën nga faqja zyrtare. Përdoruesve të rinj u rekomandohet që të përdorin produktin GeoLite2 ose versionin e tij me pagesë GeoIP2.

Së dyti, që nga dhjetori 2019, MaxMind njoftoi për një ndryshim të konsiderueshëm në aksesin në bazat e të dhënave të tyre. Për të respektuar ligjin e Kalifornisë për mbrojtjen e të drejtave të konsumatorëve, kompania MaxMind ka vendosur të "ndalojë" shpërndarjen e GeoLite2 me regjistrim.

Duke qenë se duam të shfrytëzojmë produktin e tyre, do të regjistrohemi në këtë faqe.

xtables-addons: filtrojmë paketat sipas vendeve
Pas kësaj, në email do të vijë një mesazh që kërkon të vendosim një fjalëkalim. Tani, kur kemi krijuar një llogari, duhet të krijojmë një çelës licencë. Në panelin personal gjejmë pikën My License Keys, dhe pastaj klikojmë në butonin Generate new License Key.

Kur krijojmë çelësin, na bëhet vetëm një pyetje: a do ta përdorim këtë çelës në programin GeoIP Update? Përgjigjemi negativisht dhe klikojmë në butonin Confirm. Në dritaren që shfaqet do të shfaqet çelësi. Ruani këtë çelës në një vend të sigurt, pasi pas mbylljes së dritares, nuk do të jeni në gjendje të shihni çelësin në tërësi përsëri.

xtables-addons: filtrojmë paketat sipas vendeve
Kemi mundësinë të shkarkojmë bazat GeoLite2 manualisht, por formati i tyre nuk është i kompatibilshëm me formatin që pret skripti xt_geoip_build. Këtu ndihmojnë skriptet GeoLite2xtables. Për të funksionuar skriptet, instalojmë modulun perl NetAddr::IP:

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

Pastaj fillojmë të klonojmë depozitat e skripteve dhe regjistrojmë çelësin e licencës që morëm më parë në skedar:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY='123ertyui123' > geolite2.license

Nisni skriptet:

# Скачиваем данные 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 vendos një kufizim prej 2000 shkarkimesh në ditë dhe në rast se keni shumë serverë, rekomandon të ruani azhurnimin në një server proxy.

Shkoni me kujdes, skedari i daljes duhet të quhet patjetër dbip-country-lite.csv. Fatkeqësisht, 20_convert_geolite2 jep një skedar që nuk është ideal. Skripti xt_geoip_build pritet të ketë tre kolona:

  • fillimi i intervalit të adresave;
  • fundi i intervalit të adresave;
  • kode shteti në iso-3166-alpha2.

Dhe skedari i daljes përmban gjashtë kolona:

  • fillimi i intervalit të adresave (paraqitja e vargut);
  • fundi i intervalit të adresave (paraqitja e vargut);
  • fillimi i intervalit të adresave (paraqitja numerike);
  • fundi i intervalit të adresave (paraqitja numerike);
  • kode shteti;
  • emri i shtetit.

Kjo mospërputhje është kritike dhe mund të rregullohet në një nga dy mënyra:

  1. të redaktojmë 20_convert_geolite2;
  2. të redaktojmë xt_geoip_build.

Në rastin e parë, e tkurrim printf në formatin e duhur, dhe në rastin e dytë - ndryshojmë caktimin e variableve $cc$row->[4]. Pas kësaj, mund të filloni ndërtimin:

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

. . .
 2239 gamë IPv4 për ZA
  348 gamë IPv6 për ZA
   56 gamë IPv4 për ZM
   12 gamë IPv6 për ZM
   56 gamë IPv4 për ZW
   15 gamë IPv6 për ZW

Vlen të theksohet se autori GeoLite2xtables nuk i konsideron skriptet e tij të gatshme për prodhim dhe ofron ndjekë për zhvillimin e skripteve origjinale xt_geoip_*. Prandaj, le të kalojmë në ndërtimin nga kodet burimore, në të cilat këto skripte janë tashmë të përditësuara.

Versioni nga kodet burimore

Kur instalohet nga kodet burimore, skriptet xt_geoip_* ndodhen në katalogun /usr/local/libexec/xtables-addons. Në këtë version të skriptit përdoret një bazë të dhënash IP to Country Lite. Licenca është — Licenca Creative Commons Attribution, dhe nga të dhënat e disponueshme, këto janë tre kolonat e nevojshme. Shkarkojmë dhe ndërtojmë bazën:

cd /usr/share/xt_geoip/

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

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

Pas këtyre veprimeve, iptables është gati për punë.

Përdorim geoip në iptables

Moduli xt_geoip shton vetëm dy çelësa:

geoip match options:
[!] --src-cc, --source-country country[,country...]
	Ndeshni paketat që vijnë nga (një prej) vendeve të specificuara
[!] --dst-cc, --destination-country country[,country...]
	Ndeshni paketat që shkojnë në (një prej) vendeve të specificuara

SHENIM: Vendi inputohet me kodin e tij ISO3166.

Metodat e krijimit të rregullave për iptables, në përgjithësi, mbeten të pandryshuara. Për të përdorur çelësat nga modulet shtesë, është e nevojshme të tregoni qartë emrin e modulit me çelësin -m. Për shembull, një rregull për bllokimin e lidhjeve TCP që vijnë në portin 443 nga SHBA në të gjitha ndërfaqet:

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

Skedaret e krijuara nga xt_geoip_build përdoren vetëm gjatë krijimit të rregullave, por nuk merren parasysh gjatë filtrimit. Kështu, për të përditësuar saktë bazën geoip, duhet së pari të përditësoni skedarët iv*- dhe pastaj të rishkruani të gjitha rregullat që përdorin geoip në iptables.

Përfundimi

Filtrimi i paketave në varësi të përkatësisë për vendet është një strategji që është pak e harruar me kalimin e kohës. Megjithatë, mjetet softuerike për këtë filtrim po zhvillohen dhe, ndoshta, së shpejti do të ketë një version të ri të xt_geoip në menaxherët e paketave me një ofrues të ri të të dhënave geoip, që do ta thjeshtojë ndjeshëm jetën e administratorëve të sistemeve.

xtables-addons: filtrojmë paketat sipas vendeve

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, ju lutemi.

A keni pasur ndonjëherë eksperienca me filtrimin sipas vendeve?

  • 59,1%Po13

  • 40,9%Jo9

22 përdorues janë ndjerë; 3 përdorues janë abstenuar.

Burimi: habr.com

Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë 🔥 Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë | ProHoster