xtables-addons: paketlarni mamlakat bo'yicha filtrlash

xtables-addons: paketlarni mamlakat bo'yicha filtrlash
Muayyan mamlakatlardan trafikni blokirovka qilish vazifasi oddiy ko'rinadi, ammo birinchi taassurotlar aldamchi bo'lishi mumkin. Bugun biz buni qanday amalga oshirish mumkinligini aytib beramiz.

Sana oldin

Ushbu mavzu bo'yicha Google qidiruvi natijalari umidsizlikka uchraydi: ko'pgina echimlar uzoq vaqtdan beri "chirigan" va ba'zida bu mavzu to'xtab qolgan va abadiy unutilganga o'xshaydi. Biz ko'plab eski yozuvlarni ko'rib chiqdik va ko'rsatmalarning zamonaviy versiyasini baham ko'rishga tayyormiz.

Ushbu buyruqlarni bajarishdan oldin maqolani to'liq o'qib chiqishingizni tavsiya qilamiz.

Operatsion tizimni tayyorlash

Filtrlash yordamchi dastur yordamida sozlanadi iptables, bu GeoIP ma'lumotlari bilan ishlash uchun kengaytmani talab qiladi. Ushbu kengaytmani quyidagi manzilda topish mumkin xtables-qo'shimchalar. xtables-addons mustaqil yadro modullari sifatida iptables uchun kengaytmalarni o'rnatadi, shuning uchun OS yadrosini qayta kompilyatsiya qilishning hojati yo'q.

Yozish vaqtida xtables-addonsning joriy versiyasi 3.9. Biroq, standart Ubuntu 20.04 LTS omborlarida faqat 3.8 va Ubuntu 18.04 omborlarida 3.0 ni topish mumkin. Kengaytmani paket menejeridan quyidagi buyruq bilan o'rnatishingiz mumkin:

apt install xtables-addons-common libtext-csv-xs-perl

E'tibor bering, 3.9 versiyasi va loyihaning hozirgi holati o'rtasida kichik, ammo muhim farqlar mavjud, biz ularni keyinroq muhokama qilamiz. Manba kodidan yaratish uchun barcha kerakli paketlarni o'rnating:

apt install git build-essential autoconf make libtool iptables-dev libxtables-dev pkg-config libnet-cidr-lite-perl libtext-csv-xs-perl

Repozitoriyni klonlash:

git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons

cd xtables-addons-xtables-addons

xtables-addons ko'plab kengaytmalarni o'z ichiga oladi, lekin bizni faqat qiziqtiradi xt_geoip. Agar siz tizimga keraksiz kengaytmalarni tortib olishni xohlamasangiz, ularni tuzilishdan chiqarib tashlashingiz mumkin. Buning uchun faylni tahrirlashingiz kerak mconfig. Barcha kerakli modullar uchun o'rnating y, va barcha keraksizlarini belgilang n. Biz yig'amiz:

./autogen.sh

./configure

make

Va superfoydalanuvchi huquqlari bilan o'rnating:

make install

Yadro modullarini o'rnatishda quyidagilarga o'xshash xatolik yuz berishi mumkin:

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

Bu holat yadro modullarini imzolashning iloji yo'qligi sababli yuzaga keladi, chunki imzolash uchun hech narsa. Ushbu muammoni bir nechta buyruqlar bilan hal qilishingiz mumkin:

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

Kompilyatsiya qilingan yadro moduli o'rnatilgan, ammo tizim uni aniqlamaydi. Keling, tizimdan yangi modulni hisobga olgan holda qaramlik xaritasini yaratishni so'raymiz va keyin uni yuklaymiz:

depmod -a

modprobe xt_geoip

xt_geoip tizimga yuklanganligiga ishonch hosil qilaylik:

# lsmod | grep xt_geoip
xt_geoip               16384  0
x_tables               40960  2 xt_geoip,ip_tables

Bundan tashqari, kengaytma iptables-ga yuklanganligiga ishonch hosil qiling:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Biz hamma narsadan mamnunmiz va qolgan narsa modul nomini qo'shishdir / etc / modullarShunday qilib, modul OTni qayta ishga tushirgandan so'ng ishlaydi. Bundan buyon iptables geoip buyruqlarini tushunadi, lekin u bilan ishlash uchun yetarli ma'lumotlar yo'q. Keling, geoip ma'lumotlar bazasini yuklashni boshlaylik.

GeoIP ma'lumotlar bazasini olish

Biz iptables kengaytmasi uchun tushunarli ma'lumotlar saqlanadigan katalog yaratamiz:

mkdir /usr/share/xt_geoip

Maqolaning boshida biz manba kodidagi versiya va paket boshqaruvchisi versiyasi o'rtasida farq borligini eslatib o'tdik. Eng sezilarli farq ma'lumotlar bazasi sotuvchisi va skriptidagi o'zgarishdir xt_geoip_dl, bu eng so'nggi ma'lumotlarni yuklab oladi.

Paket menejeri versiyasi

Skript /usr/lib/xtables-addons yo'lida joylashgan, lekin uni ishga tushirmoqchi bo'lganingizda, unchalik ma'lumot bermaydigan xatoni ko'rasiz:

# ./xt_geoip_dl 
unzip:  cannot find or open GeoLite2-Country-CSV.zip, GeoLite2-Country-CSV.zip.zip or GeoLite2-Country-CSV.zip.ZIP.

Ilgari, GeoLite mahsuloti, hozirda GeoLite Legacy deb nomlanuvchi, litsenziya asosida tarqatilgan, maΚΌlumotlar bazasi sifatida foydalanilgan. Creative Commons ASA 4.0 kompaniya MaxMind. Ushbu mahsulot bilan birdaniga ikkita voqea sodir bo'ldi, bu iptables kengaytmasi bilan moslikni "buzdi".

Birinchidan, 2018 yil yanvar oyida e'lon qildi mahsulotni qo'llab-quvvatlashni to'xtatish haqida va 2019 yil 2 yanvarda ma'lumotlar bazasining eski versiyasini yuklab olish uchun barcha havolalar rasmiy veb-saytdan olib tashlandi. Yangi foydalanuvchilarga GeoLite2 mahsulotidan yoki uning GeoIPXNUMX pullik versiyasidan foydalanish tavsiya etiladi.

Ikkinchidan, 2019 yil dekabr oyidan boshlab MaxMind deya ta'kidladi ularning ma'lumotlar bazalariga kirishda sezilarli o'zgarishlar haqida. Kaliforniyadagi iste'molchilarning maxfiyligi to'g'risidagi qonunga rioya qilish uchun MaxMind GeoLite2 tarqatilishini ro'yxatga olish bilan "qoplashga" qaror qildi.

Biz ularning mahsulotidan foydalanmoqchi bo'lganimiz sababli, biz ushbu sahifada ro'yxatdan o'tamiz.

xtables-addons: paketlarni mamlakat bo'yicha filtrlash
Shundan so'ng siz parol o'rnatishingizni so'ragan elektron pochta xabarini olasiz. Endi biz hisob yaratdik, biz litsenziya kalitini yaratishimiz kerak. Shaxsiy hisobingizda biz elementni topamiz Mening litsenziya kalitlari, va keyin tugmani bosing Yangi litsenziya kalitini yarating.

Kalit yaratishda bizga faqat bitta savol beriladi: bu kalitdan GeoIP Update dasturida foydalanamizmi? Biz salbiy javob beramiz va tugmani bosamiz tasdiqlang. Kalit qalqib chiquvchi oynada ko'rsatiladi. Ushbu kalitni xavfsiz joyda saqlang, chunki qalqib chiquvchi oynani yopganingizdan so'ng, siz endi butun kalitni ko'ra olmaysiz.

xtables-addons: paketlarni mamlakat bo'yicha filtrlash
Bizda GeoLite2 ma'lumotlar bazalarini qo'lda yuklab olish imkoniyati mavjud, ammo ularning formati xt_geoip_build skripti kutgan formatga mos kelmaydi. Bu erda GeoLite2xtables skriptlari yordamga keladi. Skriptlarni ishga tushirish uchun NetAddr::IP perl modulini o'rnating:

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

Keyinchalik, biz omborni skriptlar bilan klonlaymiz va avval olingan litsenziya kalitini faylga yozamiz:

git clone https://github.com/mschmitt/GeoLite2xtables.git

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Keling, skriptlarni ishga tushiramiz:

# Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ 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 kuniga 2000 ta yuklab olish chegarasini qo'yadi va ko'p sonli serverlar bilan yangilanishni proksi-serverda keshlashni taklif qiladi.

Iltimos, chiqish faylini chaqirish kerakligini unutmang dbip-country-lite.csv... Afsuski, 20_convert_geolite2 mukammal fayl yaratmaydi. Skript xt_geoip_build uchta ustunni kutadi:

  • manzillar oralig'ining boshlanishi;
  • manzil oralig'ining oxiri;
  • iso-3166-alpha2 da mamlakat kodi.

Va chiqish faylida oltita ustun mavjud:

  • manzillar oralig'ining boshlanishi (satr ko'rsatish);
  • manzillar oralig'ining oxiri (satr ko'rinishi);
  • manzillar oralig'ining boshlanishi (raqamli ko'rinish);
  • manzil oralig'ining oxiri (raqamli ko'rinish);
  • mamlakat kodi;
  • mamlakat nomi.

Ushbu nomuvofiqlik juda muhim va uni ikki yo'ldan biri bilan tuzatish mumkin:

  1. hukmronlik qilish 20_convert_geolite2;
  2. hukmronlik qilish xt_geoip_build.

Birinchi holda, biz qisqartiramiz printf kerakli formatga, ikkinchisida esa - o'zgaruvchiga topshiriqni o'zgartiramiz $cc haqida $row->[4]. Shundan so'ng siz qurishingiz mumkin:

/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

E'tibor bering, muallif GeoLite2xtables o'z skriptlarini ishlab chiqarish va takliflarga tayyor deb hisoblamaydi kuzatib boring original xt_geoip_* skriptlarini ishlab chiqish uchun. Shuning uchun, keling, ushbu skriptlar allaqachon yangilangan manba kodlaridan yig'ilishga o'tamiz.

Manba versiyasi

Manba kodli skriptlardan o'rnatishda xt_geoip_* katalogida joylashgan /usr/local/libexec/xtables-addons. Skriptning ushbu versiyasi ma'lumotlar bazasidan foydalanadi IP-dan Country Litega. Litsenziya Creative Commons Attribution License bo'lib, mavjud ma'lumotlardan juda kerakli uchta ustun mavjud. Ma'lumotlar bazasini yuklab oling va yig'ing:

cd /usr/share/xt_geoip/

/usr/local/libexec/xtables-addons/xt_geoip_dl

/usr/local/libexec/xtables-addons/xt_geoip_build

Ushbu qadamlardan so'ng iptables ishlashga tayyor.

Iptables-da geoip-dan foydalanish

Modul xt_geoip faqat ikkita kalit qo'shadi:

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.

Umuman olganda, iptables uchun qoidalarni yaratish usullari o'zgarishsiz qolmoqda. Qo'shimcha modullarning kalitlaridan foydalanish uchun modul nomini -m kaliti bilan aniq ko'rsatishingiz kerak. Masalan, barcha interfeyslarda AQShdan emas, 443-portda kiruvchi TCP ulanishlarini bloklash qoidasi:

iptables -I INPUT ! -i lo -p tcp --dport 443 -m geoip ! --src-cc US -j DROP

Xt_geoip_build tomonidan yaratilgan fayllar faqat qoidalar yaratishda ishlatiladi, lekin filtrlashda hisobga olinmaydi. Shunday qilib, geoip ma'lumotlar bazasini to'g'ri yangilash uchun siz avval iv * fayllarini yangilashingiz kerak, so'ngra iptables-da geoip-dan foydalanadigan barcha qoidalarni qayta yaratishingiz kerak.

xulosa

Mamlakatlar bo'yicha paketlarni filtrlash vaqt o'tishi bilan biroz unutilgan strategiyadir. Shunga qaramay, bunday filtrlash uchun dasturiy vositalar ishlab chiqilmoqda va, ehtimol, tez orada paket menejerlarida yangi geoip ma'lumotlar provayderi bilan xt_geoipning yangi versiyasi paydo bo'ladi, bu tizim ma'murlarining hayotini sezilarli darajada soddalashtiradi.

xtables-addons: paketlarni mamlakat bo'yicha filtrlash

So'rovda faqat ro'yxatdan o'tgan foydalanuvchilar ishtirok etishlari mumkin. tizimga kirishiltimos.

Siz hech qachon mamlakat bo'yicha filtrlashdan foydalanganmisiz?

  • 59,1%Ha 13

  • 40,9%β„–9

22 ta foydalanuvchi ovoz berdi. 3 nafar foydalanuvchi betaraf qoldi.

Manba: www.habr.com

a Izoh qo'shish