کار مسدود کردن ترافیک برخی کشورها ساده به نظر می رسد، اما اولین برداشت ها می تواند فریبنده باشد. امروز به شما خواهیم گفت که چگونه می توان این کار را اجرا کرد.
ماقبل تاریخ
نتایج جستجوی گوگل در مورد این موضوع ناامید کننده است: بسیاری از راه حل ها مدت هاست "فاسد" شده اند و گاهی اوقات به نظر می رسد که این موضوع برای همیشه کنار گذاشته شده و فراموش شده است. ما بسیاری از رکوردهای قدیمی را بررسی کرده ایم و آماده به اشتراک گذاری نسخه مدرن دستورالعمل ها هستیم.
توصیه می کنیم قبل از اجرای این دستورات، کل مقاله را مطالعه کنید.
آماده سازی سیستم عامل
فیلتر کردن با استفاده از ابزار کاربردی پیکربندی می شود از iptables، که برای کار با داده های GeoIP به یک برنامه افزودنی نیاز دارد. این پسوند را می توان در
در زمان نوشتن، نسخه فعلی 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 شناخته می شود، تحت مجوز توزیع می شود، به عنوان پایگاه داده استفاده می شد.
اولاً در ژانویه 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 مشخص کنید. به عنوان مثال، یک قانون برای مسدود کردن اتصالات 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 جدید در مدیران بسته ظاهر شود که زندگی مدیران سیستم را بسیار ساده می کند.
فقط کاربران ثبت نام شده می توانند در نظرسنجی شرکت کنند.
آیا تا به حال از فیلتر بر اساس کشور استفاده کرده اید؟
-
٪۱۰۰بله 13
-
٪۱۰۰شماره 9
22 کاربر رای دادند 3 کاربر رای ممتنع دادند.
منبع: www.habr.com