
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 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-perlVë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-perlKlonojmë 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 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./configuremakeDhe instalojmë me të drejta superuser:
make installGjatë 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 directoryKjo 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/certscat < 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
EOFopenssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pemModuli 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 -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ë fundi, le të sigurohemi që zgjerimi është ngarkuar në iptables:
# cat /proc/net/ip_tables_matches
geoip
icmpTë 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_geoipNë 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 nga kompania . Ky produkt pësoi dy ngjarje që "prishën" compatibilitetin me shtesën për iptables.
Së pari, në janar 2018 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 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.

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.

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.gztar xvf NetAddr-IP-4.079.tar.gzcd NetAddr-IP-4.079perl Makefile.PLmakemake installPastaj 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.gitcd GeoLite2xtablesecho YOUR_LICENSE_KEY='123ertyui123' > geolite2.licenseNisni 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 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:
- të redaktojmë 20_convert_geolite2;
- të redaktojmë xt_geoip_build.
Në rastin e parë, e tkurrim në formatin e duhur, dhe në rastin e dytë - ndryshojmë caktimin e variableve $cc në $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 ZWVlen të theksohet se autori nuk i konsideron skriptet e tij të gatshme për prodhim dhe ofron 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 . 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_buildPas 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 DROPSkedaret 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.
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. , 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
