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ë
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
Së pari, në janar 2018
Së dyti, që nga dhjetori 2019 MaxMind
Meqenëse ne duam të përdorim produktin e tyre, ne do të regjistrohemi në këtë faqe.
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.
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:
- rregull 20_konvert_gjeoliti2;
- rregull xt_geoip_build.
Në rastin e parë zvogëlojmë
/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
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
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.
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë.
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