xtables-addons: filtrojm paketet sipas vendeve

xtables-addons: filtrojm paketet sipas vendeve
Detyra e bllokimit të trafikëve nga vende të caktuara duket e thjeshtë, por përshtypja e parë është mashtruese. Sot do të tregojmë se si mund ta realizoni këtë.

Historia e mëparshme

Rezultatet e kërkimit në Google për këtë temë janë zhgënjyese: shumica e zgjidhjeve janë shumë të vjetra dhe ndonjëherë duket se kjo temë është lënë mënjanë dhe harruar përjetësisht. Ne kemi ‘shkërlisur’ shumë shënime të vjetra dhe jemi të gatshëm të ndajmë versionin modern të udhëzimit.

Rekomandojmë që të lexoni artikullin plotësisht, para se të kryeni komandat e dhëna.

Përgatitja e sistemit operativ

Filtrimi do të konfigurohet me ndihmën e utilitarit iptables, i cili kërkon një zgjatje 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ë veçanta të kernelit, kështu që nuk është e nevojshme të ribëni kompilimin e kernelit të OS.

Në kohën e shkrimit të këtij artikulli, versioni aktual i xtables-addons është 3.9. Megjithatë, në depozitë standarde të Ubuntu 20.04 LTS mund të gjeni vetëm 3.8, ndërsa në depozitë të Ubuntu 18.04 - 3.0. Për të instaluar zgjerimin nga menaxheri i paketave, mund të përdorni komandën e mëposhtme:

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

Vlen të theksohet se mes versionit 3.9 dhe gjendjes aktuale të projektit ka disa ndryshime të vogla, por të rëndësishme, për të cilat do të flasim më vonë. Për ta ndërtuar nga kodet burimore, instalohet 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

Kloni 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 na intereson vetëm xt_geoip. Nëse nuk dëshironi të merrni zgjerime të panevojshme në sistem, mund t'i përjashtoni ato nga ndërtimi. Për këtë, duhet të redaktoni skedarin mconfig. Për të gjitha modulet e dëshiruara vendosni y, dhe të gjitha të panevojshmet shënoni n. Ndërtojmë:

./autogen.sh

./configure

make

Dhe instalojmë me të drejtat e superpërdoruesit:

make install

Gjatë instalimit të moduleve të kernelit mund të ndodhi një gabim me përmbajtje të tillë:

INSTALL /root/xtables-addons-xtables-addons/extensions/xt_geoip.ko
At main.c:160:
- Gabim SSL:02001002:bibliotekë sistemi:fopen:Nuk ekziston skedari ose direktor i tillë: ../crypto/bio/bss_file.c:72
- Gabim SSL:2006D080:Procedurat BIO:BIO_new_file:nuk ekziston skedari: ../crypto/bio/bss_file.c:79
sign-file: certs/signing_key.pem: Nuk ekziston skedari ose direktor i tillë

Kjo situatë ndodh për shkak të pamundësisë për të nënshkruar modulët e bërthamës, pasi nuk ka mënyrë për ta bërë këtë. Problemi mund të zgjidhet 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 = Modulet

[ 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 bërthamës është instaluar, por sistemi nuk e njeh atë. Le të kërkojmë nga sistemi të krijojë një hartë varësish për modulin e ri, dhe 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ë fundmi, le të sigurohemi që zgjerimi është ngarkuar në iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Të gjitha duke qenë të pranueshme, mbetet vetëm të shtojmë emrin e modulit në /etc/modules, në mënyrë që moduli të funksionojë pas rinisjes së sistemit. Me këtë, iptables kupton komandat geoip, por i mungojnë të dhënat për të punuar. 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 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 paketave. Dallimi më i dukshëm është në ndryshimin e ofruesit të bazës së të dhënave dhe skriptit xt_geoip_dl, i cili shkarkon të dhënat e fundit.

Versioni nga menaxheri i paketave

Skripti ndodhet në rrugën /usr/lib/xtables-addons, megjithatë gjatë përpjekjes për ta ekzekutuar mund të shihni një gabim jo shumë informues:

# ./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, tani i njohur si GeoLite Legacy, i shpërndarë me licencë Creative Commons ASA 4.0 nga kompania MaxMind. Me këtë produkt ndodhi një ngjarje për dy ndryshime, të cilat "thyen" lidhjen me zgjerimin për iptables.

Së pari, në janar 2018 njoftuan u njoftua për ndalimin e mbështetjes për produktin, dhe më dy janar 2019 të gjitha lidhjet për shkarkimin e versionit të vjetër u hoqën nga faqja zyrtare. Përdoruesit e rinj inkurajohen 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ë rëndësishëm në qasjen ndaj bazave të tyre. Për të përmbushur ligjin kalifornian për mbrojtjen e të drejtave të konsumatorëve, kompania MaxMind vendosi të "mbyllë" shpërndarjen e GeoLite2 duke kërkuar regjistrim.

Mund të regjistrohemi në këtë faqe pasi dëshirojmë të përdorim produktin e tyre.

xtables-addons: filtrojm paketet sipas vendeve
Pas kësaj, do të vijë një mesazh në e-mail me kërkesën për të vendosur një fjalëkalim. Tani që kemi krijuar një llogari, duhet të krijojmë një çelës licencë. Në panelin personal, gjejmë pikën Çelësat e mi të Licencës, dhe më pas klikojmë butonin Krijo çelës të ri Licencë.

Gjatë krijimit të çelësit, do të 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ë butonin Konfirmo. Në dritaren që shfaqet do të shfaqet çelësi. Ruani këtë çelës në një vend të sigurt, sepse pas mbylljes së dritares, nuk do të mund të shihni çelësin plotësisht më.

xtables-addons: filtrojm paketet sipas vendeve
Kemi mundësinë të shkarkojmë bazat GeoLite2 në mënyrë manuale, por formati i tyre nuk janë të përputhshme me formatin që pret skripti xt_geoip_build. Këtu vijnë në ndihmë skriptet GeoLite2xtables. Për të punuar me skriptet, instaloni modulën 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

Më pas, klononi depot me skriptet dhe regjistroni në skedarin çelësin e licencës të marra më parë:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Nisni në punë 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 shkarkimeve në ditë dhe për një numër të madh serverësh ofron të cache-oni përditësimin në një server proxy.

Kujdes, që skedari i dalë duhet patjetër të quhet dbip-country-lite.csv. Fatkeqësisht, 20_convert_geolite2 nuk jep një skedar ideal. Skripti xt_geoip_build pret tre kolona:

  • fillimi i radhëve të adresave;
  • fundi i radhëve të adresave;
  • kodin e vendit në iso-3166-alpha2.

Dhe skedari i dalë përmban gjashtë kolona:

  • fillimi i radhëve të adresave (përfaqësimi si varg);
  • fundi i radhëve të adresave (përfaqësimi si varg);
  • fillimi i radhëve të adresave (përfaqësimi numëror);
  • fundi i radhëve të adresave (përfaqësimi numëror);
  • kodin e vendit;
  • emri i vendit.

Kjo përputhje është kritike dhe mund të korrigjohet në një nga dy mënyrat:

  1. redaktoni 20_convert_geolite2;
  2. redaktoni xt_geoip_build.

Në rastin e parë, shkurtuar printf në formatin e nevojshëm, dhe në të dytin - ndryshoni caktimin e variableve $cc$row->[4]. Pas kësaj, mund të kryeni ndërtimin:

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

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

Vlen të theksohet që autori GeoLite2xtables nuk i konsideron skriptet e tij të gatshme për prodhim dhe sugjeron ndjekin e zhvillimit të skripteve origjinale xt_geoip_*. Prandaj, le t'i kalojmë ndërtimit nga burimi, ku këto skripte janë tashmë të azhurnuara.

Versioni nga burimi

Për instalimin nga burimi, 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 e Atribucioneve Creative Commons, dhe nga të dhënat e disponueshme janë ato tri kolona të nevojshme. Shkarkoni dhe ndërroni 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 t’u përdorur.

Përdorim geoip në iptables

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

geoip match options:
[!] --src-cc, --source-country vendi[,vendi...]
	Përputh paketën që vjen nga (një nga) vendet e caktuara
[!] --dst-cc, --destination-country vendi[,vendi...]
	Përputh paketën që shkon në (një nga) vendet e caktuara

VËREJTJE: Vendi futet sipas kodit të tij ISO3166.

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

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

Skedarët e krijuar nga xt_geoip_build përdoren vetëm gjatë krijimit të rregullave, por nuk merret parasysh gjatë filtrimit. Kështu, për azhurnimin e saktë të bazës geoip është e nevojshme së pari të azhurnohet skedarët iv*-dhe më pas të rinovohet të gjitha rregullat që përdorin geoip në iptables.

Përfundim

Filtrimi i paketeve në varësi të përkatësisë ndaj vendeve është një strategji e harruar disi nga koha. Megjithatë, mjetet software për filtrimin e tillë po zhvillohen dhe, ndoshta, së shpejti në menaxherët e pakove do të dalë një version i ri xt_geoip me një furnizues të ri të të dhënave geoip, që do ta thjeshtojë ndjeshëm jetën e administratëve të sistemeve.

xtables-addons: filtrojm paketet sipas vendeve

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

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

  • 59,1%Po13

  • 40,9%Jo9

20 përdorues votuan. 3 përdorues abstenuan.

Burimi: habr.com

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster