xtables-addons: pakej penapis mengikut negara

xtables-addons: pakej penapis mengikut negara
Tugas menyekat lalu lintas dari negara tertentu kelihatan mudah, tetapi tanggapan pertama boleh mengelirukan. Hari ini kami akan memberitahu anda bagaimana ini boleh dilaksanakan.

prasejarah

Hasil carian Google mengenai topik ini mengecewakan: kebanyakan penyelesaian telah lama "busuk" dan kadang-kadang nampaknya topik ini telah diketepikan dan dilupakan selama-lamanya. Kami telah melalui banyak rekod lama dan bersedia untuk berkongsi versi moden arahan.

Kami mengesyorkan anda membaca keseluruhan artikel sebelum melaksanakan arahan ini.

Menyediakan sistem pengendalian

Penapisan akan dikonfigurasikan menggunakan utiliti iptables, yang memerlukan sambungan untuk berfungsi dengan data GeoIP. Sambungan ini boleh didapati dalam xtables-addons. xtables-addons memasang sambungan untuk iptables sebagai modul kernel bebas, jadi tidak perlu menyusun semula kernel OS.

Pada masa penulisan, versi semasa xtables-addons ialah 3.9. Walau bagaimanapun, hanya 20.04 boleh didapati dalam repositori Ubuntu 3.8 LTS standard, dan 18.04 dalam repositori Ubuntu 3.0. Anda boleh memasang sambungan daripada pengurus pakej dengan arahan berikut:

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

Ambil perhatian bahawa terdapat perbezaan kecil tetapi penting antara versi 3.9 dan keadaan semasa projek, yang akan kita bincangkan kemudian. Untuk membina daripada kod sumber, pasang semua pakej yang diperlukan:

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

Klon repositori:

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

cd xtables-addons-xtables-addons

xtables-addons mengandungi banyak sambungan, tetapi kami hanya berminat xt_geoip. Jika anda tidak mahu menyeret sambungan yang tidak diperlukan ke dalam sistem, anda boleh mengecualikannya daripada binaan. Untuk melakukan ini, anda perlu mengedit fail mconfig. Untuk semua modul yang dikehendaki, pasang y, dan tandakan semua yang tidak perlu n. Kami mengumpul:

./autogen.sh

./configure

make

Dan pasang dengan hak superuser:

make install

Semasa pemasangan modul kernel, ralat yang serupa dengan yang berikut mungkin berlaku:

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

Keadaan ini timbul kerana ketidakmungkinan menandatangani modul kernel, kerana tiada apa yang perlu ditandatangani. Anda boleh menyelesaikan masalah ini dengan beberapa arahan:

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

Modul kernel yang disusun dipasang, tetapi sistem tidak mengesannya. Mari minta sistem membuat peta pergantungan dengan mengambil kira modul baharu, dan kemudian memuatkannya:

depmod -a

modprobe xt_geoip

Mari pastikan bahawa xt_geoip dimuatkan ke dalam sistem:

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

Selain itu, pastikan sambungan dimuatkan ke dalam iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Kami gembira dengan segala-galanya dan yang tinggal hanyalah menambah nama modul / etc / modulsupaya modul berfungsi selepas but semula OS. Mulai sekarang, iptables memahami arahan geoip, tetapi ia tidak mempunyai data yang mencukupi untuk digunakan. Mari mulakan memuatkan pangkalan data geoip.

Mendapatkan Pangkalan Data GeoIP

Kami mencipta direktori di mana maklumat yang boleh difahami oleh sambungan iptables akan disimpan:

mkdir /usr/share/xt_geoip

Pada permulaan artikel, kami menyebut bahawa terdapat perbezaan antara versi daripada kod sumber dan versi daripada pengurus pakej. Perbezaan yang paling ketara ialah perubahan dalam vendor pangkalan data dan skrip xt_geoip_dl, yang memuat turun data terkini.

Versi pengurus pakej

Skrip terletak di laluan /usr/lib/xtables-addons, tetapi apabila anda cuba menjalankannya, anda akan melihat ralat yang tidak begitu bermaklumat:

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

Sebelum ini, produk GeoLite, kini dikenali sebagai GeoLite Legacy, diedarkan di bawah lesen, digunakan sebagai pangkalan data Creative Commons ASA 4.0 syarikat MaxMind. Dua peristiwa berlaku dengan produk ini sekaligus yang "memecahkan" keserasian dengan sambungan iptables.

Pertama, pada Januari 2018 diumumkan mengenai penamatan sokongan untuk produk, dan pada 2019 Januari 2, semua pautan untuk memuat turun versi lama pangkalan data telah dialih keluar daripada tapak web rasmi. Pengguna baharu disyorkan untuk menggunakan produk GeoLite2 atau GeoIPXNUMX versi berbayarnya.

Kedua, sejak Disember 2019 MaxMind beliau menyatakan tentang perubahan ketara dalam akses kepada pangkalan data mereka. Untuk mematuhi Akta Privasi Pengguna California, MaxMind memutuskan untuk "melindungi" pengedaran GeoLite2 dengan pendaftaran.

Oleh kerana kami ingin menggunakan produk mereka, kami akan mendaftar di halaman ini.

xtables-addons: pakej penapis mengikut negara
Anda kemudian akan menerima e-mel yang meminta anda menetapkan kata laluan. Sekarang kita telah mencipta akaun, kita perlu mencipta kunci lesen. Dalam akaun peribadi anda kami dapati item tersebut Kunci Lesen Saya, dan kemudian klik pada butang Jana Kunci Lesen baharu.

Apabila mencipta kunci, kami akan ditanya hanya satu soalan: adakah kami akan menggunakan kunci ini dalam program Kemas Kini GeoIP? Kami menjawab negatif dan menekan butang Sahkan. Kekunci akan dipaparkan dalam tetingkap pop timbul. Simpan kunci ini di tempat yang selamat, kerana sebaik sahaja anda menutup tetingkap pop timbul, anda tidak akan dapat melihat keseluruhan kunci lagi.

xtables-addons: pakej penapis mengikut negara
Kami mempunyai keupayaan untuk memuat turun pangkalan data GeoLite2 secara manual, tetapi formatnya tidak serasi dengan format yang dijangkakan oleh skrip xt_geoip_build. Di sinilah skrip GeoLite2xtables datang untuk menyelamatkan. Untuk menjalankan skrip, pasang modul 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

Seterusnya, kami mengklonkan repositori dengan skrip dan menulis kunci lesen yang diperoleh sebelum ini pada fail:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Mari jalankan skrip:

# Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ 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 mengenakan had 2000 muat turun setiap hari dan, dengan sejumlah besar pelayan, menawarkan untuk cache kemas kini pada pelayan proksi.

Sila ambil perhatian bahawa fail output mesti dipanggil dbip-country-lite.csv... Malangnya, 20_tukar_geolit2 tidak menghasilkan fail yang sempurna. Skrip xt_geoip_build menjangkakan tiga lajur:

  • permulaan julat alamat;
  • hujung julat alamat;
  • kod negara dalam iso-3166-alpha2.

Dan fail output mengandungi enam lajur:

  • permulaan julat alamat (perwakilan rentetan);
  • hujung julat alamat (perwakilan rentetan);
  • permulaan julat alamat (perwakilan angka);
  • hujung julat alamat (perwakilan angka);
  • kod negara;
  • nama negara.

Percanggahan ini adalah kritikal dan boleh diperbetulkan dalam salah satu daripada dua cara:

  1. untuk memerintah 20_tukar_geolit2;
  2. untuk memerintah xt_geoip_build.

Dalam kes pertama kita kurangkan Printf kepada format yang diperlukan, dan pada yang kedua - kami menukar tugasan kepada pembolehubah $cc pada $row->[4]. Selepas ini anda boleh membina:

/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

Perhatikan bahawa penulis GeoLite2xtables tidak menganggap skripnya sedia untuk pengeluaran dan tawaran trek untuk pembangunan skrip xt_geoip_* asal. Oleh itu, mari kita beralih ke pemasangan dari kod sumber, di mana skrip ini telah dikemas kini.

Versi sumber

Apabila memasang daripada skrip kod sumber xt_geoip_* terdapat dalam katalog /usr/local/libexec/xtables-addons. Versi skrip ini menggunakan pangkalan data IP kepada Country Lite. Lesen itu ialah Lesen Atribusi Creative Commons, dan daripada data yang tersedia terdapat tiga lajur yang sangat diperlukan. Muat turun dan pasang pangkalan data:

cd /usr/share/xt_geoip/

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

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

Selepas langkah ini, iptables sedia untuk berfungsi.

Menggunakan geoip dalam iptables

Modul xt_geoip hanya menambah dua kunci:

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.

Kaedah untuk mencipta peraturan untuk iptables, secara amnya, kekal tidak berubah. Untuk menggunakan kekunci daripada modul tambahan, anda mesti menyatakan secara eksplisit nama modul dengan suis -m. Sebagai contoh, peraturan untuk menyekat sambungan TCP masuk pada port 443 bukan dari Amerika Syarikat pada semua antara muka:

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

Fail yang dibuat oleh xt_geoip_build digunakan hanya semasa membuat peraturan, tetapi tidak diambil kira semasa menapis. Oleh itu, untuk mengemas kini pangkalan data geoip dengan betul, anda mesti mengemas kini fail iv* dahulu, dan kemudian mencipta semula semua peraturan yang menggunakan geoip dalam iptables.

Kesimpulan

Menapis paket berdasarkan negara adalah strategi yang agak dilupakan oleh masa. Walaupun begitu, alat perisian untuk penapisan tersebut sedang dibangunkan dan, mungkin, tidak lama lagi, versi baharu xt_geoip dengan pembekal data geoip baharu akan muncul dalam pengurus pakej, yang akan memudahkan kehidupan pentadbir sistem.

xtables-addons: pakej penapis mengikut negara

Hanya pengguna berdaftar boleh mengambil bahagian dalam tinjauan. Log masuk, Sama-sama.

Adakah anda pernah menggunakan penapisan mengikut negara?

  • 59,1% Ya13

  • 40,9% No9

22 pengguna mengundi. 3 pengguna berpantang.

Sumber: www.habr.com

Tambah komen