xtables-addons: filtro paketat sipas vendit

xtables-addons: filtro paketat sipas vendit
Detyra e bllokimit të trafikut nga vende të caktuara duket e thjeshtë, por përshtypjet e para mund të jenë mashtruese. Sot do t'ju tregojmë se si mund të zbatohet kjo.

parahistorinë

Rezultatet e një kërkimi në Google për këtë temë janë zhgënjyese: shumica e zgjidhjeve kanë qenë prej kohësh "të kalbura" dhe ndonjëherë duket se kjo temë është lënë në raft dhe është harruar përgjithmonë. Ne kemi kaluar nëpër shumë regjistrime të vjetra dhe jemi gati të ndajmë një version modern të udhëzimeve.

Ne ju rekomandojmë që të lexoni të gjithë artikullin përpara se të ekzekutoni këto komanda.

Përgatitja e sistemit operativ

Filtrimi do të konfigurohet duke përdorur programin iptables, e cila kërkon një shtesë për të punuar me të dhënat GeoIP. Kjo shtesë mund të gjendet në xtables-shtesa. xtables-addons instalon shtesa për iptables si module të pavarura të kernelit, kështu që nuk ka nevojë të ripërpiloni kernelin e OS.

Në kohën e shkrimit, versioni aktual i xtables-addons është 3.9. Megjithatë, vetëm 20.04 mund të gjendet në magazinat standarde të Ubuntu 3.8 LTS dhe 18.04 në magazinat Ubuntu 3.0. Mund ta instaloni shtesën nga menaxheri i paketave me komandën e mëposhtme:

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

Vini re se ka dallime të vogla por të rëndësishme midis versionit 3.9 dhe gjendjes aktuale të projektit, të cilat do t'i diskutojmë më vonë. Për të ndërtuar nga kodi burim, instaloni 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

Klononi depon:

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ë shtesa, por ne jemi të interesuar vetëm për të xt_geoip. Nëse nuk doni të tërhiqni shtesa të panevojshme në sistem, mund t'i përjashtoni ato nga ndërtimi. Për ta bërë këtë ju duhet të redaktoni skedarin mconfig. Për të gjitha modulet e dëshiruara, instaloni y, dhe shënoni të gjitha të panevojshmet n. Ne mbledhim:

./autogen.sh

./configure

make

Dhe instaloni me të drejtat e superpërdoruesit:

make install

Gjatë instalimit të moduleve të kernelit, mund të ndodhë një gabim i ngjashëm me sa vijon:

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

Kjo situatë lind për shkak të pamundësisë së nënshkrimit të moduleve të kernelit, sepse asgjë për të nënshkruar. Ju mund ta zgjidhni këtë problem me disa komanda:

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

Moduli i kernelit të përpiluar është instaluar, por sistemi nuk e zbulon atë. Le t'i kërkojmë sistemit të krijojë një hartë varësie duke marrë parasysh modulin e ri dhe pastaj ta ngarkojë atë:

depmod -a

modprobe xt_geoip

Le të sigurohemi që xt_geoip të jetë i ngarkuar në sistem:

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

Për më tepër, sigurohuni që shtesa të jetë e ngarkuar në iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Ne jemi të kënaqur me gjithçka dhe gjithçka që mbetet është të shtojmë emrin e modulit / etj / moduletnë mënyrë që moduli të funksionojë pas rindezjes së OS. Që tani e tutje, iptables kupton komandat geoip, por nuk ka të dhëna të mjaftueshme për të punuar me të. Le të fillojmë të ngarkojmë bazën e të dhënave geoip.

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

Ne krijojmë një direktori në të cilën do të ruhen informacione të kuptueshme 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ë ndryshimi në shitësin dhe skriptin e bazës së të dhënave xt_geoip_dl, i cili shkarkon të dhënat më të fundit.

Versioni i menaxherit të paketës

Skripti ndodhet në shtegun /usr/lib/xtables-addons, por kur përpiqeni ta ekzekutoni, do 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ë, produkti GeoLite, i njohur tani si GeoLite Legacy, i shpërndarë me licencë, përdorej si bazë të dhënash Creative Commons ASA 4.0 kompani MaxMind. Dy ngjarje ndodhën menjëherë me këtë produkt që "prishnin" përputhshmërinë me shtesën iptables.

Së pari, në janar 2018 i shpallur në lidhje me përfundimin e mbështetjes për produktin, dhe më 2019 janar 2, të gjitha lidhjet për shkarkimin e versionit të vjetër të bazës së të dhënave u hoqën nga faqja zyrtare e internetit. Përdoruesve të rinj rekomandohet të përdorin produktin GeoLite2 ose versionin e tij me pagesë GeoIPXNUMX.

Së dyti, që nga dhjetori 2019 MaxMind ai deklaroi për një ndryshim të rëndësishëm në aksesin në bazat e të dhënave të tyre. Për të respektuar Aktin e Privatësisë së Konsumatorit në Kaliforni, MaxMind vendosi të "mbulojë" shpërndarjen e GeoLite2 me regjistrim.

Meqenëse ne duam të përdorim produktin e tyre, ne do të regjistrohemi në këtë faqe.

xtables-addons: filtro paketat sipas vendit
Më pas do të merrni një email që ju kërkon të vendosni një fjalëkalim. Tani që kemi krijuar një llogari, duhet të krijojmë një çelës licence. Në llogarinë tuaj personale gjejmë artikullin Çelësat e mi të licencës, dhe më pas klikoni në butonin Gjeneroni çelësin e ri të licencës.

Kur krijojmë një çelës, do të na bëhet vetëm një pyetje: a do ta përdorim këtë çelës në programin GeoIP Update? Ne përgjigjemi negativisht dhe shtypim butonin Konfirmoj. Ky çelës do të shfaqet në një dritare pop-up. Ruaje këtë çelës në një vend të sigurt, pasi pasi të mbyllësh dritaren kërcyese, nuk do të mund të shikosh më të gjithë çelësin.

xtables-addons: filtro paketat sipas vendit
Ne kemi mundësinë të shkarkojmë manualisht bazat e të dhënave GeoLite2, por formati i tyre nuk është i pajtueshëm me formatin e pritur nga skripti xt_geoip_build. Këtu vijnë në shpëtim skriptet GeoLite2xtables. Për të ekzekutuar skriptet, instaloni modulin NetAddr::IP perl:

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, ne klonojmë depon me skripta dhe shkruajmë çelësin e licencës të marrë më parë në një skedar:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Le të ekzekutojmë 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ë kufi prej 2000 shkarkimesh në ditë dhe, me një numër të madh serverësh, ofron për të ruajtur përditësimin në një server proxy.

Ju lutemi vini re se skedari i daljes duhet të thirret dbip-country-lite.csv... Për fat të keq, 20_konvert_gjeoliti2 nuk prodhon një skedar të përsosur. Script xt_geoip_build pret tre kolona:

  • fillimi i gamës së adresave;
  • fundi i gamës së adresave;
  • kodi i shtetit në iso-3166-alpha2.

Dhe skedari i daljes përmban gjashtë kolona:

  • fillimi i gamës së adresave (përfaqësimi i vargut);
  • fundi i gamës së adresave (përfaqësimi i vargut);
  • fillimi i gamës së adresave (paraqitja numerike);
  • fundi i gamës së adresave (paraqitja numerike);
  • kodi i vendit;
  • emri i vendit.

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

  1. rregull 20_konvert_gjeoliti2;
  2. rregull xt_geoip_build.

Në rastin e parë zvogëlojmë printf në formatin e kërkuar, dhe në të dytën - ne ndryshojmë caktimin në ndryshore $cc mbi $row->[4]. Pas kësaj ju mund të ndërtoni:

/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

Vini re se autori GeoLite2xtables nuk i konsideron skenarët e tij gati për prodhim dhe oferta udhë për zhvillimin e skripteve origjinale xt_geoip_*. Prandaj, le të kalojmë në asamble nga kodet burimore, në të cilat këto skripte tashmë janë përditësuar.

Versioni burimor

Kur instaloni nga skriptet e kodit burimor xt_geoip_* gjenden në katalog /usr/local/libexec/xtables-addons. Ky version i skriptit përdor një bazë të dhënash IP në Country Lite. Licenca është Creative Commons Attribution License, dhe nga të dhënat e disponueshme janë tre kolonat shumë të nevojshme. Shkarkoni dhe montoni bazën e të dhënave:

cd /usr/share/xt_geoip/

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

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

Pas këtyre hapave, iptables është gati për të punuar.

Përdorimi i geoip në iptables

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

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.

Metodat për krijimin e rregullave për iptables, në përgjithësi, mbeten të pandryshuara. Për të përdorur çelësat nga modulet shtesë, duhet të specifikoni në mënyrë eksplicite emrin e modulit me çelësin -m. Për shembull, një rregull për të bllokuar lidhjet hyrëse TCP në portin 443 jo 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 kur krijohen rregulla, por nuk merren parasysh gjatë filtrimit. Kështu, për të përditësuar saktë bazën e të dhënave geoip, fillimisht duhet të përditësoni skedarët iv* dhe më pas të rikrijoni të gjitha rregullat që përdorin geoip në iptables.

Përfundim

Filtrimi i paketave në bazë të vendeve është një strategji disi e harruar nga koha. Përkundër kësaj, mjetet softuerike për filtrim të tillë po zhvillohen dhe, ndoshta, së shpejti një version i ri i xt_geoip me një ofrues të ri të të dhënave geoip do të shfaqet në menaxherët e paketave, gjë që do të thjeshtojë shumë jetën e administratorëve të sistemit.

xtables-addons: filtro paketat sipas vendit

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

A keni përdorur ndonjëherë filtrim sipas shteteve?

  • 59,1%Po 13

  • 40,9%Nr 9

22 përdorues votuan. 3 përdorues abstenuan.

Burimi: www.habr.com

Shto një koment