
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 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-perlVlen 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-perlKloni depozitën:
git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons
cd xtables-addons-xtables-addonsxtables-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./configuremakeDhe instalojmë me të drejtat e superpërdoruesit:
make installGjatë 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/certscat < 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
EOFopenssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pemModuli 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 -amodprobe xt_geoipLe të sigurohemi që xt_geoip është ngarkuar në sistem:
# lsmod | grep xt_geoip
xt_geoip 16384 0
x_tables 40960 2 xt_geoip,ip_tablesSë fundmi, le të sigurohemi që zgjerimi është ngarkuar në iptables:
# cat /proc/net/ip_tables_matches
geoip
icmpTë 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_geoipNë 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ë nga kompania . 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 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 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.

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ë.

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.gztar xvf NetAddr-IP-4.079.tar.gzcd NetAddr-IP-4.079perl Makefile.PLmakemake installMë 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.gitcd GeoLite2xtablesecho YOUR_LICENSE_KEY=’123ertyui123' > geolite2.licenseNisni 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.csvMaxMind 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:
- redaktoni 20_convert_geolite2;
- redaktoni xt_geoip_build.
Në rastin e parë, shkurtuar në formatin e nevojshëm, dhe në të dytin - ndryshoni caktimin e variableve $cc në $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 ZWVlen të theksohet që autori nuk i konsideron skriptet e tij të gatshme për prodhim dhe sugjeron 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 . 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_buildPas 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 DROPSkedarë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.
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. , 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
