xtables-addons: تصفية الحزم حسب البلد

xtables-addons: تصفية الحزم حسب البلد
تبدو مهمة منع حركة المرور من بعض البلدان بسيطة، ولكن الانطباعات الأولى قد تكون خادعة. اليوم سنخبرك كيف يمكن تنفيذ ذلك.

قبل التاريخ

نتائج بحث Google حول هذا الموضوع مخيبة للآمال: فمعظم الحلول كانت "فاسدة" منذ فترة طويلة، ويبدو أحيانًا أن هذا الموضوع قد تم وضعه على الرف ونسيانه إلى الأبد. لقد قمنا بتمشيط الكثير من السجلات القديمة ونحن على استعداد لمشاركة نسخة حديثة من التعليمات.

نوصي بقراءة المقالة بأكملها قبل تنفيذ هذه الأوامر.

إعداد نظام التشغيل

سيتم تكوين التصفية باستخدام الأداة المساعدة يبتابليس، الأمر الذي يتطلب امتدادًا للعمل مع بيانات GeoIP. يمكن العثور على هذا الامتداد في xtables-addons. يقوم xtables-addons بتثبيت ملحقات iptables كوحدات نواة مستقلة، لذلك ليست هناك حاجة لإعادة ترجمة نواة نظام التشغيل.

في وقت كتابة هذا التقرير، الإصدار الحالي من 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

أثناء تثبيت وحدات kernel، قد يحدث خطأ مشابه لما يلي:

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

ينشأ هذا الموقف بسبب استحالة التوقيع على وحدات kernel، لأن لا شيء للتوقيع. يمكنك حل هذه المشكلة باستخدام أمرين:

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

تم تثبيت وحدة kernel المترجمة، لكن النظام لم يكتشفها. لنطلب من النظام إنشاء خريطة تبعية مع مراعاة الوحدة الجديدة، ثم تحميلها:

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

نحن سعداء بكل شيء وكل ما تبقى هو إضافة اسم الوحدة إليه / etc / modulesبحيث تعمل الوحدة بعد إعادة تشغيل نظام التشغيل. من الآن فصاعدًا، يفهم 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، والموزع بموجب ترخيص، كقاعدة بيانات المشاع الإبداعي ASA 4.0 شركة MaxMind في. حدث حدثان مع هذا المنتج في وقت واحد مما أدى إلى "كسر" التوافق مع ملحق iptables.

أولاً، في يناير 2018 أعلن حول إنهاء دعم المنتج، وفي 2019 يناير 2، تمت إزالة جميع روابط تنزيل الإصدار القديم من قاعدة البيانات من الموقع الرسمي. يُنصح المستخدمون الجدد باستخدام منتج GeoLite2 أو نسخته المدفوعة GeoIPXNUMX.

ثانيًا، منذ ديسمبر 2019، ماكس مايند قال حول تغيير كبير في الوصول إلى قواعد البيانات الخاصة بهم. للامتثال لقانون خصوصية المستهلك في كاليفورنيا، قررت MaxMind "تغطية" توزيع GeoLite2 بالتسجيل.

وبما أننا نريد استخدام منتجهم، فسوف نقوم بالتسجيل في هذه الصفحة.

xtables-addons: تصفية الحزم حسب البلد
ستتلقى بعد ذلك رسالة بريد إلكتروني تطلب منك تعيين كلمة مرور. الآن بعد أن قمنا بإنشاء حساب، نحتاج إلى إنشاء مفتاح ترخيص. في حسابك الشخصي نجد هذا البند مفاتيح الترخيص الخاصة بي، ثم انقر على الزر إنشاء مفتاح ترخيص جديد.

عند إنشاء مفتاح، سيتم طرح سؤال واحد فقط علينا: هل سنستخدم هذا المفتاح في برنامج تحديث GeoIP؟ نجيب بالنفي ونضغط على الزر أكد. سيتم عرض المفتاح في نافذة منبثقة. احفظ هذا المفتاح في مكان آمن، لأنه بمجرد إغلاق النافذة المنبثقة، لن تتمكن بعد ذلك من عرض المفتاح بالكامل.

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 إلى التنسيق المطلوب، وفي الثانية - نغير الإسناد إلى المتغير $ سم مكعب في صف $->[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 إلى البلد لايت. الترخيص هو ترخيص Creative Commons Attribution، ومن البيانات المتاحة توجد الأعمدة الثلاثة الضرورية للغاية. تنزيل وتجميع قاعدة البيانات:

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.

تبقى طرق إنشاء قواعد iptables بشكل عام دون تغيير. لاستخدام مفاتيح من وحدات إضافية، يجب عليك تحديد اسم الوحدة بوضوح باستخدام رمز التبديل -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: تصفية الحزم حسب البلد

يمكن للمستخدمين المسجلين فقط المشاركة في الاستطلاع. تسجيل الدخول، من فضلك.

هل سبق لك استخدام التصفية حسب البلد؟

  • 59,1%نعم 13

  • 40,9%رقم 9

صوَّت 22 مستخدمًا. امتنع 3 مستخدما عن التصويت.

المصدر: www.habr.com

إضافة تعليق