xtables-addons: paketləri ölkə üzrə süzün

xtables-addons: paketləri ölkə üzrə süzün
Müəyyən ölkələrdən gələn trafikin qarşısını almaq vəzifəsi sadə görünür, lakin ilk təəssüratlar aldadıcı ola bilər. Bu gün bunun necə həyata keçirilə biləcəyini sizə xəbər verəcəyik.

Prehistorya

Bu mövzuda Google axtarışının nəticələri məyusedicidir: həllərin əksəriyyəti çoxdan "çürümüşdür" və bəzən bu mövzu rəflərə qoyulmuş və həmişəlik unudulmuş kimi görünür. Biz bir çox köhnə qeydlərdən keçdik və təlimatların müasir versiyasını paylaşmağa hazırıq.

Bu əmrləri yerinə yetirməzdən əvvəl bütün məqaləni oxumağınızı tövsiyə edirik.

Əməliyyat sisteminin hazırlanması

Filtrləmə yardım proqramı ilə konfiqurasiya ediləcək iptables, GeoIP məlumatları ilə işləmək üçün genişləndirmə tələb edir. Bu uzantıda tapa bilərsiniz xtables əlavələri. xtables-addons müstəqil kernel modulları kimi iptables üçün uzantıları quraşdırır, ona görə də ƏS nüvəsini yenidən tərtib etməyə ehtiyac yoxdur.

Yazı zamanı xtables-addons-un hazırkı versiyası 3.9-dur. Bununla belə, standart Ubuntu 20.04 LTS depolarında yalnız 3.8, Ubuntu 18.04 repozitoriyalarında isə 3.0 tapıla bilər. Genişləndirməni paket menecerindən aşağıdakı əmrlə quraşdıra bilərsiniz:

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

Nəzərə alın ki, 3.9 versiyası ilə layihənin hazırkı vəziyyəti arasında kiçik, lakin vacib fərqlər var ki, bundan sonra bunları müzakirə edəcəyik. Mənbə kodundan qurmaq üçün bütün lazımi paketləri quraşdırın:

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

Anbarı klonlayın:

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

cd xtables-addons-xtables-addons

xtables-addons çoxlu uzantıları ehtiva edir, lakin bizi yalnız maraqlandırır xt_geoip. Lazımsız uzantıları sistemə sürükləmək istəmirsinizsə, onları quruluşdan xaric edə bilərsiniz. Bunu etmək üçün faylı redaktə etməlisiniz mconfig. İstədiyiniz bütün modullar üçün quraşdırın y, və bütün lazımsızları qeyd edin n. Biz toplayırıq:

./autogen.sh

./configure

make

Və super istifadəçi hüquqları ilə quraşdırın:

make install

Kernel modullarının quraşdırılması zamanı aşağıdakılara bənzər xəta baş verə bilər:

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 vəziyyət kernel modullarının imzalanmasının mümkünsüzlüyü səbəbindən yaranır, çünki imzalamaq üçün heç nə. Bu problemi bir neçə əmrlə həll edə bilərsiniz:

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

Tərtib edilmiş nüvə modulu quraşdırılıb, lakin sistem onu ​​aşkar etmir. Gəlin sistemdən yeni modulu nəzərə alaraq asılılıq xəritəsi yaratmağı xahiş edək və sonra onu yükləyək:

depmod -a

modprobe xt_geoip

xt_geoip-in sistemə yükləndiyinə əmin olaq:

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

Əlavə olaraq, uzantının iptables-ə yükləndiyinə əmin olun:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Biz hər şeydən razıyıq və qalan modul adını əlavə etməkdir / etc / modullarımodulun ƏS-ni yenidən işə saldıqdan sonra işləməsi üçün. Bundan sonra iptables geoip əmrlərini başa düşür, lakin onunla işləmək üçün kifayət qədər məlumat yoxdur. Geoip verilənlər bazasını yükləməyə başlayaq.

GeoIP verilənlər bazasının əldə edilməsi

Biz iptables uzantısı üçün başa düşülən məlumatların saxlanacağı qovluq yaradırıq:

mkdir /usr/share/xt_geoip

Məqalənin əvvəlində mənbə kodundakı versiya ilə paket meneceri versiyası arasında fərqlərin olduğunu qeyd etdik. Ən nəzərə çarpan fərq verilənlər bazası satıcısı və skriptdəki dəyişiklikdir xt_geoip_dl, ən son məlumatları yükləyən.

Paket meneceri versiyası

Skript /usr/lib/xtables-addons yolunda yerləşir, lakin onu işə salmağa çalışdığınız zaman çox informativ olmayan xəta görəcəksiniz:

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

Əvvəllər, lisenziya əsasında paylanan, indi GeoLite Legacy kimi tanınan GeoLite məhsulu verilənlər bazası kimi istifadə olunurdu. Creative Commons ASA 4.0 şirkət MaxMind. Bu məhsulla eyni anda iki hadisə baş verdi ki, bu da iptables uzantısı ilə uyğunluğu "sındırdı".

Birincisi, 2018-ci ilin yanvarında elan etdi məhsula dəstəyin dayandırılması haqqında və 2019 yanvar 2-cu ildə verilənlər bazasının köhnə versiyasını yükləmək üçün bütün bağlantılar rəsmi veb saytdan silindi. Yeni istifadəçilərə GeoLite2 məhsulundan və ya onun GeoIPXNUMX ödənişli versiyasından istifadə etmək tövsiyə olunur.

İkincisi, 2019-cu ilin dekabrından MaxMind ifadə etdi verilənlər bazalarına girişdə əhəmiyyətli dəyişiklik haqqında. Kaliforniya İstehlakçı Məxfiliyi Qanununa riayət etmək üçün MaxMind, GeoLite2-nin paylanmasını qeydiyyatla "örtmək" qərarına gəldi.

Onların məhsulundan istifadə etmək istədiyimiz üçün bu səhifədə qeydiyyatdan keçəcəyik.

xtables-addons: paketləri ölkə üzrə süzün
Bundan sonra parol təyin etməyinizi xahiş edən bir e-poçt alacaqsınız. İndi hesab yaratdıq, lisenziya açarı yaratmalıyıq. Şəxsi hesabınızda biz elementi tapırıq Lisenziya Açarlarım, və sonra düyməni basın Yeni Lisenziya Açarı yaradın.

Açar yaratarkən bizə yalnız bir sual veriləcək: bu açardan GeoIP Update proqramında istifadə edəcəyik? Mənfi cavab veririk və düyməni basırıq Təsdiqləmək. Açar açılan pəncərədə görünəcək. Bu açarı təhlükəsiz yerdə saxlayın, çünki açılan pəncərəni bağladıqdan sonra siz artıq bütün açara baxa bilməyəcəksiniz.

xtables-addons: paketləri ölkə üzrə süzün
GeoLite2 verilənlər bazalarını əl ilə yükləmək imkanımız var, lakin onların formatı xt_geoip_build skripti tərəfindən gözlənilən formata uyğun gəlmir. GeoLite2xtables skriptlərinin köməyə gəldiyi yer budur. Skriptləri işə salmaq üçün NetAddr::IP perl modulunu quraşdırın:

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

Sonra, deponu skriptlərlə klonlayırıq və əvvəllər əldə edilmiş lisenziya açarını fayla yazırıq:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Skriptləri işə salaq:

# Скачиваем данные 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 gündə 2000 yükləmə limiti qoyur və çoxlu sayda serverlə yeniləməni proksi serverdə keş etməyi təklif edir.

Nəzərə alın ki, çıxış faylı çağırılmalıdır dbip-country-lite.csv... Təəssüf ki, 20_convert_geolite2 mükəmməl fayl yaratmır. Skript xt_geoip_build üç sütun gözləyir:

  • ünvan diapazonunun başlanğıcı;
  • ünvan aralığının sonu;
  • iso-3166-alpha2-də ölkə kodu.

Və çıxış faylı altı sütundan ibarətdir:

  • ünvan diapazonunun başlanğıcı (sətir təsviri);
  • ünvan diapazonunun sonu (sətir təsviri);
  • ünvan diapazonunun başlanğıcı (rəqəmli təmsil);
  • ünvan diapazonunun sonu (rəqəmli təmsil);
  • ölkə kodu;
  • ölkənin adı.

Bu uyğunsuzluq kritikdir və iki yoldan biri ilə düzəldilə bilər:

  1. hökmdarlıq 20_convert_geolite2;
  2. hökmdarlıq xt_geoip_build.

Birinci halda biz azaldırıq printf tələb olunan formata, ikincisi isə - təyinatı dəyişənə dəyişdiririk $cc haqqında $sətir->[4]. Bundan sonra qura bilərsiniz:

/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

Qeyd edək ki, müəllif GeoLite2xtables skriptlərini istehsala və təkliflərə hazır hesab etmir təqib edin orijinal xt_geoip_* skriptlərinin inkişafı üçün. Buna görə də, bu skriptlərin artıq yeniləndiyi mənbə kodlarından montaja keçək.

Mənbə versiyası

Mənbə kodu skriptlərindən quraşdırarkən xt_geoip_* kataloqda yerləşir /usr/local/libexec/xtables-addons. Skriptin bu versiyası verilənlər bazasından istifadə edir Ölkə Lite üçün IP. Lisenziya Creative Commons Attribution License-dir və mövcud məlumatlardan çox zəruri üç sütun var. Verilənlər bazasını yükləyin və yığın:

cd /usr/share/xt_geoip/

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

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

Bu addımlardan sonra iptables işləməyə hazırdır.

İptables-də geoipdən istifadə

Modul xt_geoip yalnız iki açar əlavə edir:

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.

İptables üçün qaydalar yaratmaq üsulları, ümumiyyətlə, dəyişməz qalır. Əlavə modulların açarlarından istifadə etmək üçün modulun adını -m keçidi ilə açıq şəkildə göstərməlisiniz. Məsələn, bütün interfeyslərdə ABŞ-dan deyil, 443-cü portda daxil olan TCP bağlantılarını bloklamaq qaydası:

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

xt_geoip_build tərəfindən yaradılmış fayllar yalnız qaydalar yaradılarkən istifadə olunur, lakin filtrasiya zamanı nəzərə alınmır. Beləliklə, geoip verilənlər bazasını düzgün yeniləmək üçün əvvəlcə iv* fayllarını yeniləməlisiniz, sonra iptables-də geoipdən istifadə edən bütün qaydaları yenidən yaratmalısınız.

Nəticə

Ölkələrə əsaslanan paketlərin süzülməsi zamanla bir qədər unudulmuş bir strategiyadır. Buna baxmayaraq, bu cür filtrləmə üçün proqram vasitələri hazırlanır və bəlkə də tezliklə paket menecerlərində yeni geoip məlumat provayderi ilə xt_geoip-in yeni versiyası görünəcək ki, bu da sistem administratorlarının həyatını xeyli asanlaşdıracaq.

xtables-addons: paketləri ölkə üzrə süzün

Sorğuda yalnız qeydiyyatdan keçmiş istifadəçilər iştirak edə bilər. Daxil olunxahiş edirəm.

Heç ölkə üzrə filtrləmədən istifadə etmisinizmi?

  • 59,1%Bəli 13

  • 40,9%№9

22 istifadəçi səs verdi. 3 istifadəçi bitərəf qalıb.

Mənbə: www.habr.com

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