Որոշ երկրներից երթևեկությունն արգելափակելու խնդիրը պարզ է թվում, բայց առաջին տպավորությունները կարող են խաբուսիկ լինել: Այսօր մենք ձեզ կասենք, թե ինչպես դա կարող է իրականացվել:
նախապատմությանը
Այս թեմայի վերաբերյալ Google-ի որոնման արդյունքները հիասթափեցնող են. լուծումների մեծ մասը վաղուց արդեն «փտած» է, և երբեմն թվում է, թե այս թեման մնացել է դարակաշարում և ընդմիշտ մոռացվել: Մենք անցել ենք բազմաթիվ հին գրառումների միջով և պատրաստ ենք կիսվել հրահանգների ժամանակակից տարբերակով:
Մենք խորհուրդ ենք տալիս կարդալ ամբողջ հոդվածը նախքան այս հրամանները կատարելը:
Օպերացիոն համակարգի պատրաստում
Զտումը կկարգավորվի կոմունալ ծրագրի միջոցով iptables, որը պահանջում է ընդլայնում GeoIP տվյալների հետ աշխատելու համար: Այս ընդլայնումը կարելի է գտնել այստեղ
Գրելու պահին xtables-addons-ի ներկայիս տարբերակը 3.9-ն է։ Այնուամենայնիվ, միայն 20.04-ը կարելի է գտնել Ubuntu 3.8 LTS ստանդարտ պահոցներում, իսկ 18.04-ը Ubuntu 3.0 պահեստներում: Դուք կարող եք տեղադրել ընդլայնումը փաթեթի կառավարիչից հետևյալ հրամանով.
apt install xtables-addons-common libtext-csv-xs-perl
Նկատի ունեցեք, որ 3.9 տարբերակի և նախագծի ներկա վիճակի միջև կան փոքր, բայց կարևոր տարբերություններ, որոնք մենք կքննարկենք ավելի ուշ: Աղբյուրի կոդից կառուցելու համար տեղադրեք բոլոր անհրաժեշտ փաթեթները.
apt install git build-essential autoconf make libtool iptables-dev libxtables-dev pkg-config libnet-cidr-lite-perl libtext-csv-xs-perl
Կլոնավորել պահեստը.
git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons
cd xtables-addons-xtables-addons
xtables-addons-ը պարունակում է բազմաթիվ ընդարձակումներ, բայց մեզ միայն հետաքրքրում է xt_geoip. Եթե դուք չեք ցանկանում համակարգում անհարկի ընդլայնումներ քաշել, կարող եք դրանք բացառել կառուցումից: Դա անելու համար անհրաժեշտ է խմբագրել ֆայլը mconfig. Բոլոր ցանկալի մոդուլների համար տեղադրեք y, և նշեք բոլոր ավելորդները n. Մենք հավաքում ենք.
./autogen.sh
./configure
make
Եվ տեղադրեք գերօգտագործողի իրավունքներով.
make install
Միջուկի մոդուլների տեղադրման ժամանակ կարող է առաջանալ հետևյալի նման սխալ.
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
Այս իրավիճակը առաջանում է միջուկի մոդուլների ստորագրման անհնարինության պատճառով, քանի որ ստորագրելու ոչինչ չկա. Այս խնդիրը կարող եք լուծել մի քանի հրամաններով.
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
Կազմված միջուկի մոդուլը տեղադրված է, բայց համակարգը չի հայտնաբերում այն: Եկեք խնդրենք համակարգին ստեղծել կախվածության քարտեզ՝ հաշվի առնելով նոր մոդուլը, այնուհետև բեռնել այն.
depmod -a
modprobe xt_geoip
Եկեք համոզվենք, որ xt_geoip-ը բեռնված է համակարգում՝
# lsmod | grep xt_geoip
xt_geoip 16384 0
x_tables 40960 2 xt_geoip,ip_tables
Բացի այդ, համոզվեք, որ ընդլայնումը բեռնված է iptables-ում.
# cat /proc/net/ip_tables_matches
geoip
icmp
Մենք գոհ ենք ամեն ինչից, և մնում է միայն ավելացնել մոդուլի անունը / եւ այլն / մոդուլներայնպես, որ մոդուլը աշխատի ՕՀ-ի վերագործարկումից հետո: Այսուհետ iptables-ը հասկանում է geoip հրամանները, սակայն այն չունի բավարար տվյալներ՝ աշխատելու համար։ Սկսենք բեռնել geoip տվյալների բազան։
GeoIP տվյալների բազայի ստացում
Մենք ստեղծում ենք գրացուցակ, որտեղ կպահվեն iptables ընդլայնման համար հասկանալի տեղեկատվությունը.
mkdir /usr/share/xt_geoip
Հոդվածի սկզբում մենք նշեցինք, որ տարբերություններ կան սկզբնական կոդի և փաթեթի կառավարչի տարբերակի միջև։ Առավել նկատելի տարբերությունը տվյալների բազայի վաճառողի և սցենարի փոփոխությունն է xt_geoip_dl, որը ներբեռնում է վերջին տվյալները։
Փաթեթի մենեջերի տարբերակ
Սցենարը գտնվում է /usr/lib/xtables-addons ուղու վրա, բայց երբ փորձեք այն գործարկել, կտեսնեք ոչ այնքան տեղեկատվական սխալ.
# ./xt_geoip_dl
unzip: cannot find or open GeoLite2-Country-CSV.zip, GeoLite2-Country-CSV.zip.zip or GeoLite2-Country-CSV.zip.ZIP.
Նախկինում GeoLite արտադրանքը, որն այժմ հայտնի է որպես GeoLite Legacy, բաշխված լիցենզիայի ներքո, օգտագործվում էր որպես տվյալների բազա։
Նախ՝ 2018 թվականի հունվարին
Երկրորդ, 2019 թվականի դեկտեմբերից MaxMind
Քանի որ մենք ցանկանում ենք օգտագործել իրենց արտադրանքը, մենք կգրանցվենք այս էջում։
Այնուհետև դուք նամակ կստանաք՝ խնդրելով գաղտնաբառ սահմանել: Այժմ, երբ մենք ստեղծել ենք հաշիվ, մենք պետք է ստեղծենք լիցենզիայի բանալի: Ձեր անձնական հաշվում մենք գտնում ենք ապրանքը Իմ լիցենզիայի բանալիները, ապա սեղմեք կոճակը Ստեղծեք նոր լիցենզիայի բանալի.
Բանալին ստեղծելիս մեզ միայն մեկ հարց է տրվելու՝ կօգտագործե՞նք այս բանալին GeoIP Update ծրագրում: Բացասական ենք պատասխանում և սեղմում ենք կոճակը հաստատել. Բանալին կցուցադրվի բացվող պատուհանում: Պահպանեք այս բանալին ապահով տեղում, քանի որ բացվող պատուհանը փակելուց հետո դուք այլևս չեք կարողանա դիտել ամբողջ բանալին:
Մենք ունենք GeoLite2 տվյալների բազաները ձեռքով ներբեռնելու հնարավորություն, սակայն դրանց ձևաչափը համատեղելի չէ xt_geoip_build սկրիպտի կողմից ակնկալվող ձևաչափի հետ: Այստեղ օգնության են հասնում GeoLite2xtables սկրիպտները: Սկրիպտներ գործարկելու համար տեղադրեք 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
Հաջորդը, մենք կլոնավորում ենք պահեստը սկրիպտներով և ֆայլում գրում ենք նախկինում ստացված լիցենզիայի բանալին.
git clone https://github.com/mschmitt/GeoLite2xtables.git
cd GeoLite2xtables
echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license
Եկեք գործարկենք սցենարները.
# Скачиваем данные 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-ը սահմանում է օրական 2000 ներբեռնման սահմանափակում և մեծ թվով սերվերների առկայությամբ առաջարկում է թարմացումը քեշավորել պրոքսի սերվերի վրա:
Խնդրում ենք նկատի ունենալ, որ ելքային ֆայլը պետք է կանչվի dbip-country-lite.csv... Ցավոք, 20_convert_geolite2 չի արտադրում կատարյալ ֆայլ: Սցենար xt_geoip_build ակնկալում է երեք սյունակ.
- հասցեի տիրույթի սկիզբ;
- հասցեի տիրույթի վերջ;
- երկրի կոդը iso-3166-alpha2-ում:
Եվ ելքային ֆայլը պարունակում է վեց սյունակ.
- հասցեների տիրույթի սկիզբ (լարային ներկայացում);
- հասցեների տիրույթի վերջ (լարային ներկայացում);
- հասցեների տիրույթի սկիզբ (թվային ներկայացում);
- հասցեների տիրույթի վերջը (թվային ներկայացում);
- երկրի ծածկագիր;
- երկրի անվանումը.
Այս անհամապատասխանությունը կրիտիկական է և կարող է շտկվել երկու եղանակներից մեկով.
- խմբագրել 20_convert_geolite2;
- խմբագրել xt_geoip_build.
Առաջին դեպքում մենք նվազեցնում ենք
/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
Նշենք, որ հեղինակը
Աղբյուր տարբերակը
Կոդերի սկրիպտներից տեղադրելիս xt_geoip_* գտնվում են կատալոգում /usr/local/libexec/xtables-addons. Սցենարի այս տարբերակը օգտագործում է տվյալների բազա
cd /usr/share/xt_geoip/
/usr/local/libexec/xtables-addons/xt_geoip_dl
/usr/local/libexec/xtables-addons/xt_geoip_build
Այս քայլերից հետո iptables-ը պատրաստ է աշխատելու:
Օգտագործելով geoip iptables-ում
Մոդուլ xt_geoip ավելացնում է միայն երկու բանալի.
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.
Ընդհանուր առմամբ, iptable-ների համար կանոններ ստեղծելու մեթոդները մնում են անփոփոխ: Լրացուցիչ մոդուլներից ստեղներ օգտագործելու համար դուք պետք է հստակորեն նշեք մոդուլի անունը -m անջատիչով: Օրինակ՝ 443 նավահանգստի մուտքային TCP կապերը ոչ ԱՄՆ-ից բոլոր ինտերֆեյսների վրա արգելափակելու կանոն.
iptables -I INPUT ! -i lo -p tcp --dport 443 -m geoip ! --src-cc US -j DROP
xt_geoip_build-ի կողմից ստեղծված ֆայլերը օգտագործվում են միայն կանոններ ստեղծելիս, սակայն զտելիս հաշվի չեն առնվում։ Այսպիսով, geoip տվյալների բազան ճիշտ թարմացնելու համար նախ պետք է թարմացնեք iv* ֆայլերը, այնուհետև նորից ստեղծեք բոլոր կանոնները, որոնք օգտագործում են geoip-ը iptables-ում։
Ամփոփում
Երկրների վրա հիմնված փաթեթների զտումը ժամանակի կողմից որոշ չափով մոռացված ռազմավարություն է: Չնայած դրան, մշակվում են նման զտման ծրագրային գործիքներ, և, հավանաբար, շուտով փաթեթների կառավարիչներում կհայտնվի xt_geoip-ի նոր տարբերակը նոր geoip տվյալների մատակարարով, ինչը մեծապես կհեշտացնի համակարգի ադմինիստրատորների կյանքը:
Հարցմանը կարող են մասնակցել միայն գրանցված օգտվողները։
Դուք երբևէ օգտագործե՞լ եք զտում ըստ երկրների:
-
59,1%Այո 13
-
40,9%No9
Քվեարկել է 22 օգտատեր։ 3 օգտատեր ձեռնպահ է մնացել։
Source: www.habr.com