xtables-addons: memfilter paket berdasarkan negara

xtables-addons: memfilter paket berdasarkan negara
Tugas memblokir lalu lintas dari negara-negara tertentu tampaknya sederhana, namun kesan pertama bisa menipu. Hari ini kami akan memberi tahu Anda bagaimana hal ini dapat diterapkan.

prasejarah

Hasil pencarian Google mengenai topik ini mengecewakan: sebagian besar solusi telah lama “busuk” dan terkadang topik ini tampaknya telah disimpan dan dilupakan selamanya. Kami telah menyisir banyak catatan lama dan siap membagikan instruksi versi modern.

Kami menyarankan Anda membaca seluruh artikel sebelum menjalankan perintah ini.

Persiapan sistem operasi

Pemfilteran akan dikonfigurasi menggunakan utilitas iptables, yang memerlukan ekstensi untuk bekerja dengan data GeoIP. Ekstensi ini dapat ditemukan di xtables-tambahan. xtables-addons menginstal ekstensi untuk iptables sebagai modul kernel independen, sehingga tidak perlu mengkompilasi ulang kernel OS.

Pada saat penulisan, versi xtables-addons saat ini adalah 3.9. Namun, hanya 20.04 yang dapat ditemukan di repositori standar Ubuntu 3.8 LTS, dan 18.04 di repositori Ubuntu 3.0. Anda dapat menginstal ekstensi dari manajer paket dengan perintah berikut:

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

Perhatikan bahwa ada perbedaan kecil namun penting antara versi 3.9 dan status proyek saat ini, yang akan kita bahas nanti. Untuk membangun dari kode sumber, instal semua paket yang diperlukan:

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

Kloning repositori:

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

cd xtables-addons-xtables-addons

xtables-addons berisi banyak ekstensi, tetapi kami hanya tertarik pada xt_geoip. Jika Anda tidak ingin menyeret ekstensi yang tidak perlu ke dalam sistem, Anda dapat mengecualikannya dari build. Untuk melakukan ini, Anda perlu mengedit file mconfig. Untuk semua modul yang diinginkan, instal y, dan tandai semua yang tidak diperlukan n. Kami mengumpulkan:

./autogen.sh

./configure

make

Dan instal dengan hak pengguna super:

make install

Selama instalasi modul kernel, kesalahan serupa berikut ini mungkin terjadi:

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

Situasi ini muncul karena ketidakmungkinan menandatangani modul kernel, karena tidak ada yang perlu ditandatangani. Anda dapat mengatasi masalah ini dengan beberapa perintah:

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 dikompilasi telah diinstal, tetapi sistem tidak mendeteksinya. Mari kita minta sistem untuk membuat peta ketergantungan dengan mempertimbangkan modul baru, lalu memuatnya:

depmod -a

modprobe xt_geoip

Mari pastikan xt_geoip dimuat ke dalam sistem:

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

Selain itu, pastikan ekstensi dimuat ke iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Kami senang dengan semuanya dan yang tersisa hanyalah menambahkan nama modul / etc / modulesagar modul berfungsi setelah me-reboot OS. Mulai sekarang, iptables memahami perintah geoip, tetapi tidak memiliki cukup data untuk digunakan. Mari mulai memuat database geoip.

Mendapatkan Basis Data GeoIP

Kami membuat direktori di mana informasi yang dapat dimengerti oleh ekstensi iptables akan disimpan:

mkdir /usr/share/xt_geoip

Di awal artikel, kami telah menyebutkan bahwa ada perbedaan antara versi dari kode sumber dan versi dari pengelola paket. Perbedaan yang paling mencolok adalah perubahan vendor database dan script xt_geoip_dl, yang mengunduh data terbaru.

Versi manajer paket

Skrip ini terletak di jalur /usr/lib/xtables-addons, tetapi ketika Anda mencoba menjalankannya, Anda akan melihat kesalahan yang tidak terlalu informatif:

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

Sebelumnya, produk GeoLite, sekarang dikenal sebagai GeoLite Legacy, didistribusikan di bawah lisensi, digunakan sebagai database Creative Commons ASA 4.0 perusahaan MaxMind. Dua peristiwa terjadi dengan produk ini sekaligus yang “merusak” kompatibilitas dengan ekstensi iptables.

Pertama, pada bulan Januari 2018 diumumkan tentang penghentian dukungan untuk produk, dan pada 2019 Januari 2, semua tautan untuk mengunduh database versi lama telah dihapus dari situs web resmi. Pengguna baru disarankan untuk menggunakan produk GeoLite2 atau GeoIPXNUMX versi berbayarnya.

Kedua, sejak Desember 2019 MaxMind dinyatakan tentang perubahan signifikan dalam akses ke database mereka. Untuk mematuhi Undang-Undang Privasi Konsumen California, MaxMind memutuskan untuk "menutupi" distribusi GeoLite2 dengan registrasi.

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

xtables-addons: memfilter paket berdasarkan negara
Anda kemudian akan menerima email yang meminta Anda untuk mengatur kata sandi. Sekarang kita telah membuat akun, kita perlu membuat kunci lisensi. Di akun pribadi Anda, kami menemukan item tersebut Kunci Lisensi Saya, lalu klik tombolnya Hasilkan Kunci Lisensi baru.

Saat membuat kunci, kita hanya akan ditanyai satu pertanyaan: apakah kita akan menggunakan kunci ini dalam program Pembaruan GeoIP? Kami menjawab negatif dan menekan tombol Memastikan. Kuncinya akan ditampilkan di jendela pop-up. Simpan kunci ini di tempat yang aman, karena setelah Anda menutup jendela pop-up, Anda tidak dapat lagi melihat seluruh kunci.

xtables-addons: memfilter paket berdasarkan negara
Kami memiliki kemampuan untuk mengunduh database GeoLite2 secara manual, namun formatnya tidak kompatibel dengan format yang diharapkan oleh skrip xt_geoip_build. Di sinilah skrip GeoLite2xtables membantu. Untuk menjalankan skrip, instal 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

Selanjutnya, kami mengkloning repositori dengan skrip dan menulis kunci lisensi yang diperoleh sebelumnya ke sebuah file:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Mari kita jalankan skripnya:

# Скачиваем данные 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 memberlakukan batasan 2000 unduhan per hari dan, dengan jumlah server yang besar, menawarkan untuk menyimpan pembaruan dalam cache di server proxy.

Harap dicatat bahwa file keluaran harus dipanggil dbip-negara-lite.csv... Sayangnya, 20_convert_geolite2 tidak menghasilkan file yang sempurna. Naskah xt_geoip_build mengharapkan tiga kolom:

  • mulai dari rentang alamat;
  • akhir rentang alamat;
  • kode negara di iso-3166-alpha2.

Dan file keluaran berisi enam kolom:

  • awal rentang alamat (representasi string);
  • akhir rentang alamat (representasi string);
  • awal rentang alamat (representasi numerik);
  • akhir rentang alamat (representasi numerik);
  • kode negara;
  • nama negara.

Perbedaan ini sangat penting dan dapat diperbaiki dengan salah satu dari dua cara berikut:

  1. memerintah 20_convert_geolite2;
  2. memerintah xt_geoip_build.

Dalam kasus pertama kita mengurangi Printf ke format yang diperlukan, dan yang kedua - kami mengubah penugasan ke variabel $cc pada $baris->[4]. Setelah ini, Anda dapat membangun:

/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 bahwa penulis Tabel GeoLite2x tidak menganggap skripnya siap untuk produksi dan penawaran melacak untuk pengembangan skrip xt_geoip_* asli. Oleh karena itu, mari beralih ke perakitan dari kode sumber, di mana skrip ini telah diperbarui.

Versi sumber

Saat menginstal dari skrip kode sumber xt_geoip_* terletak di katalog /usr/local/libexec/xtables-addons. Versi skrip ini menggunakan database IP ke Negara Lite. Lisensinya adalah Lisensi Atribusi Creative Commons, dan dari data yang tersedia terdapat tiga kolom yang sangat diperlukan. Unduh dan rakit databasenya:

cd /usr/share/xt_geoip/

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

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

Setelah langkah-langkah ini, iptables siap bekerja.

Menggunakan geoip di iptables

Modul xt_geoip hanya menambahkan 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.

Metode untuk membuat aturan untuk iptables, secara umum, tetap tidak berubah. Untuk menggunakan kunci dari modul tambahan, Anda harus secara eksplisit menentukan nama modul dengan tombol -m. Misalnya, aturan untuk memblokir koneksi TCP masuk pada port 443 bukan dari AS di semua antarmuka:

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

File yang dibuat oleh xt_geoip_build hanya digunakan saat membuat aturan, tetapi tidak diperhitungkan saat memfilter. Jadi, untuk memperbarui database geoip dengan benar, Anda harus memperbarui file iv* terlebih dahulu, lalu membuat ulang semua aturan yang menggunakan geoip di iptables.

Kesimpulan

Memfilter paket berdasarkan negara adalah strategi yang agak terlupakan seiring berjalannya waktu. Meskipun demikian, perangkat lunak untuk pemfilteran tersebut sedang dikembangkan dan, mungkin, versi baru xt_geoip dengan penyedia data geoip baru akan segera muncul di pengelola paket, yang akan sangat menyederhanakan kehidupan administrator sistem.

xtables-addons: memfilter paket berdasarkan negara

Hanya pengguna terdaftar yang dapat berpartisipasi dalam survei. Masuk, silakan.

Pernahkah Anda menggunakan pemfilteran berdasarkan negara?

  • 59,1%Ya13

  • 40,9%No9

22 pengguna memilih. 3 pengguna abstain.

Sumber: www.habr.com

Tambah komentar