xtables-addons. զտեք փաթեթներն ըստ երկրների

xtables-addons. զտեք փաթեթներն ըստ երկրների
Որոշ երկրներից երթևեկությունն արգելափակելու խնդիրը պարզ է թվում, բայց առաջին տպավորությունները կարող են խաբուսիկ լինել: Այսօր մենք ձեզ կասենք, թե ինչպես դա կարող է իրականացվել:

նախապատմությանը

Այս թեմայի վերաբերյալ Google-ի որոնման արդյունքները հիասթափեցնող են. լուծումների մեծ մասը վաղուց արդեն «փտած» է, և երբեմն թվում է, թե այս թեման մնացել է դարակաշարում և ընդմիշտ մոռացվել: Մենք անցել ենք բազմաթիվ հին գրառումների միջով և պատրաստ ենք կիսվել հրահանգների ժամանակակից տարբերակով:

Մենք խորհուրդ ենք տալիս կարդալ ամբողջ հոդվածը նախքան այս հրամանները կատարելը:

Օպերացիոն համակարգի պատրաստում

Զտումը կկարգավորվի կոմունալ ծրագրի միջոցով iptables, որը պահանջում է ընդլայնում GeoIP տվյալների հետ աշխատելու համար: Այս ընդլայնումը կարելի է գտնել այստեղ xtables-addons. xtables-addons-ը տեղադրում է ընդլայնումներ iptables-ի համար՝ որպես անկախ միջուկի մոդուլներ, ուստի կարիք չկա նորից կոմպիլյացիայի ենթարկել OS միջուկը:

Գրելու պահին 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, բաշխված լիցենզիայի ներքո, օգտագործվում էր որպես տվյալների բազա։ Creative Commons ASA 4.0 ընկերություն MaxMind. Այս ապրանքի հետ միանգամից երկու իրադարձություն տեղի ունեցավ, որոնք «խախտեցին» համատեղելիությունը iptables ընդլայնման հետ:

Նախ՝ 2018 թվականի հունվարին հայտարարեց արտադրանքի աջակցության դադարեցման մասին, իսկ 2019 թվականի հունվարի 2-ին տվյալների բազայի հին տարբերակը ներբեռնելու բոլոր հղումները հեռացվել են պաշտոնական կայքից։ Նոր օգտվողներին խորհուրդ է տրվում օգտագործել GeoLite2 արտադրանքը կամ դրա վճարովի տարբերակը GeoIPXNUMX:

Երկրորդ, 2019 թվականի դեկտեմբերից MaxMind հայտարարեց իրենց տվյալների բազաների հասանելիության զգալի փոփոխության մասին։ Կալիֆորնիայի սպառողների գաղտնիության մասին օրենքին համապատասխանելու համար MaxMind-ը որոշել է «ծածկել» GeoLite2-ի բաշխումը գրանցմամբ։

Քանի որ մենք ցանկանում ենք օգտագործել իրենց արտադրանքը, մենք կգրանցվենք այս էջում։

xtables-addons. զտեք փաթեթներն ըստ երկրների
Այնուհետև դուք նամակ կստանաք՝ խնդրելով գաղտնաբառ սահմանել: Այժմ, երբ մենք ստեղծել ենք հաշիվ, մենք պետք է ստեղծենք լիցենզիայի բանալի: Ձեր անձնական հաշվում մենք գտնում ենք ապրանքը Իմ լիցենզիայի բանալիները, ապա սեղմեք կոճակը Ստեղծեք նոր լիցենզիայի բանալի.

Բանալին ստեղծելիս մեզ միայն մեկ հարց է տրվելու՝ կօգտագործե՞նք այս բանալին GeoIP Update ծրագրում: Բացասական ենք պատասխանում և սեղմում ենք կոճակը հաստատել. Բանալին կցուցադրվի բացվող պատուհանում: Պահպանեք այս բանալին ապահով տեղում, քանի որ բացվող պատուհանը փակելուց հետո դուք այլևս չեք կարողանա դիտել ամբողջ բանալին:

xtables-addons. զտեք փաթեթներն ըստ երկրների
Մենք ունենք 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-ում:

Եվ ելքային ֆայլը պարունակում է վեց սյունակ.

  • հասցեների տիրույթի սկիզբ (լարային ներկայացում);
  • հասցեների տիրույթի վերջ (լարային ներկայացում);
  • հասցեների տիրույթի սկիզբ (թվային ներկայացում);
  • հասցեների տիրույթի վերջը (թվային ներկայացում);
  • երկրի ծածկագիր;
  • երկրի անվանումը.

Այս անհամապատասխանությունը կրիտիկական է և կարող է շտկվել երկու եղանակներից մեկով.

  1. խմբագրել 20_convert_geolite2;
  2. խմբագրել xt_geoip_build.

Առաջին դեպքում մենք նվազեցնում ենք printf պահանջվող ձևաչափին, իսկ երկրորդում մենք փոխում ենք հանձնարարությունը փոփոխականին $cc մասին $row->[4]. Դրանից հետո դուք կարող եք կառուցել.

/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

Նշենք, որ հեղինակը GeoLite2xtables իր սցենարները պատրաստ չի համարում արտադրության և առաջարկում հետեւեք բնօրինակ xt_geoip_* սցենարների մշակման համար։ Հետևաբար, եկեք անցնենք ժողովի սկզբնական կոդերից, որոնցում այս սցենարներն արդեն թարմացվել են:

Աղբյուր տարբերակը

Կոդերի սկրիպտներից տեղադրելիս xt_geoip_* գտնվում են կատալոգում /usr/local/libexec/xtables-addons. Սցենարի այս տարբերակը օգտագործում է տվյալների բազա IP դեպի Country Lite. Լիցենզիան Creative Commons Attribution License է, և առկա տվյալներից կան շատ անհրաժեշտ երեք սյունակներ: Ներբեռնեք և հավաքեք տվյալների բազան.

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 տվյալների մատակարարով, ինչը մեծապես կհեշտացնի համակարգի ադմինիստրատորների կյանքը:

xtables-addons. զտեք փաթեթներն ըստ երկրների

Հարցմանը կարող են մասնակցել միայն գրանցված օգտվողները։ Մուտք գործել, խնդրում եմ:

Դուք երբևէ օգտագործե՞լ եք զտում ըստ երկրների:

  • 59,1%Այո 13

  • 40,9%No9

Քվեարկել է 22 օգտատեր։ 3 օգտատեր ձեռնպահ է մնացել։

Source: www.habr.com

Добавить комментарий