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
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.
Birincisi, 2018-ci ilin yanvarında
İkincisi, 2019-cu ilin dekabrından MaxMind
Onların məhsulundan istifadə etmək istədiyimiz üçün bu səhifədə qeydiyyatdan keçəcəyik.
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.
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:
- hökmdarlıq 20_convert_geolite2;
- hökmdarlıq xt_geoip_build.
Birinci halda biz azaldırıq
/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
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
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.
Sorğuda yalnız qeydiyyatdan keçmiş istifadəçilər iştirak edə bilər.
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