xtables-addons: بسته ها را بر اساس کشور فیلتر کنید

xtables-addons: بسته ها را بر اساس کشور فیلتر کنید
کار مسدود کردن ترافیک برخی کشورها ساده به نظر می رسد، اما اولین برداشت ها می تواند فریبنده باشد. امروز به شما خواهیم گفت که چگونه می توان این کار را اجرا کرد.

ماقبل تاریخ

نتایج جستجوی گوگل در مورد این موضوع ناامید کننده است: بسیاری از راه حل ها مدت هاست "فاسد" شده اند و گاهی اوقات به نظر می رسد که این موضوع برای همیشه کنار گذاشته شده و فراموش شده است. ما بسیاری از رکوردهای قدیمی را بررسی کرده ایم و آماده به اشتراک گذاری نسخه مدرن دستورالعمل ها هستیم.

توصیه می کنیم قبل از اجرای این دستورات، کل مقاله را مطالعه کنید.

آماده سازی سیستم عامل

فیلتر کردن با استفاده از ابزار کاربردی پیکربندی می شود از iptables، که برای کار با داده های GeoIP به یک برنامه افزودنی نیاز دارد. این پسوند را می توان در xtables-addons. xtables-addons پسوندها را برای iptables به عنوان ماژول های هسته مستقل نصب می کند، بنابراین نیازی به کامپایل مجدد هسته سیستم عامل نیست.

در زمان نوشتن، نسخه فعلی xtables-addons 3.9 است. با این حال، تنها 20.04 را می توان در مخازن استاندارد Ubuntu 3.8 LTS، و 18.04 را در مخازن Ubuntu 3.0 یافت. با دستور زیر می توانید افزونه را از Package Manager نصب کنید:

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

و با حقوق superuser نصب کنید:

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 مشخص کنید. به عنوان مثال، یک قانون برای مسدود کردن اتصالات TCP ورودی در پورت 443 نه از ایالات متحده در همه رابط ها:

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: بسته ها را بر اساس کشور فیلتر کنید

فقط کاربران ثبت نام شده می توانند در نظرسنجی شرکت کنند. ورود، لطفا.

آیا تا به حال از فیلتر بر اساس کشور استفاده کرده اید؟

  • ٪۱۰۰بله 13

  • ٪۱۰۰شماره 9

22 کاربر رای دادند 3 کاربر رای ممتنع دادند.

منبع: www.habr.com

اضافه کردن نظر