xtables-addons: filter packages ayon sa bansa

xtables-addons: filter packages ayon sa bansa
Ang gawain ng pagharang sa trapiko mula sa ilang mga bansa ay tila simple, ngunit ang mga unang impression ay maaaring mapanlinlang. Ngayon sasabihin namin sa iyo kung paano ito maipapatupad.

prehistory

Ang mga resulta ng isang paghahanap sa Google sa paksang ito ay nakakabigo: karamihan sa mga solusyon ay matagal nang "bulok" at kung minsan ay tila ang paksang ito ay naitago at nakalimutan na magpakailanman. Nakapagsuklay na kami ng maraming lumang record at handa kaming magbahagi ng modernong bersyon ng mga tagubilin.

Inirerekomenda namin na basahin mo ang buong artikulo bago isagawa ang mga utos na ito.

Paghahanda ng operating system

Ang pag-filter ay iko-configure gamit ang utility iptables, na nangangailangan ng extension upang gumana sa data ng GeoIP. Ang extension na ito ay matatagpuan sa xtables-addons. Ang xtables-addons ay nag-i-install ng mga extension para sa mga iptable bilang mga independiyenteng kernel module, kaya hindi na kailangang muling i-compile ang OS kernel.

Sa oras ng pagsulat, ang kasalukuyang bersyon ng xtables-addons ay 3.9. Gayunpaman, 20.04 lamang ang makikita sa karaniwang mga repositoryo ng Ubuntu 3.8 LTS, at 18.04 sa mga repositoryo ng Ubuntu 3.0. Maaari mong i-install ang extension mula sa manager ng package gamit ang sumusunod na command:

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

Tandaan na may maliit ngunit mahalagang pagkakaiba sa pagitan ng bersyon 3.9 at ang kasalukuyang estado ng proyekto, na tatalakayin natin sa ibang pagkakataon. Upang bumuo mula sa source code, i-install ang lahat ng kinakailangang package:

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

I-clone ang repositoryo:

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

cd xtables-addons-xtables-addons

Ang xtables-addons ay naglalaman ng maraming extension, ngunit interesado lang kami sa xt_geoip. Kung ayaw mong i-drag ang mga hindi kinakailangang extension sa system, maaari mong ibukod ang mga ito sa build. Upang gawin ito kailangan mong i-edit ang file mconfig. Para sa lahat ng gustong module, i-install y, at markahan ang lahat ng hindi kailangan n. Kinokolekta namin:

./autogen.sh

./configure

make

At i-install gamit ang mga karapatan ng superuser:

make install

Sa panahon ng pag-install ng mga kernel module, maaaring mangyari ang isang error na katulad ng sumusunod:

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

Ang sitwasyong ito ay lumitaw dahil sa imposibilidad ng pag-sign ng mga module ng kernel, dahil walang pipirmahan. Maaari mong lutasin ang problemang ito sa isang pares ng mga utos:

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

Ang pinagsama-samang kernel module ay naka-install, ngunit ang system ay hindi nakakakita nito. Hilingin natin sa system na gumawa ng dependency map na isinasaalang-alang ang bagong module, at pagkatapos ay i-load ito:

depmod -a

modprobe xt_geoip

Siguraduhin natin na ang xt_geoip ay na-load sa system:

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

Bukod pa rito, tiyaking na-load ang extension sa iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Masaya kami sa lahat at ang natitira ay idagdag ang pangalan ng module sa / etc / modulesupang gumana ang module pagkatapos i-reboot ang OS. Mula ngayon, naiintindihan ng iptables ang mga geoip na utos, ngunit wala itong sapat na data upang magamit. Simulan natin ang pag-load ng geoip database.

Pagkuha ng GeoIP Database

Lumilikha kami ng isang direktoryo kung saan maiimbak ang impormasyong naiintindihan ng extension ng iptables:

mkdir /usr/share/xt_geoip

Sa simula ng artikulo, binanggit namin na may mga pagkakaiba sa pagitan ng bersyon mula sa source code at ang bersyon mula sa package manager. Ang pinaka-kapansin-pansing pagkakaiba ay ang pagbabago sa database vendor at script xt_geoip_dl, na nagda-download ng pinakabagong data.

Bersyon ng manager ng package

Ang script ay matatagpuan sa path /usr/lib/xtables-addons, ngunit kapag sinubukan mong patakbuhin ito, makikita mo ang isang hindi masyadong nagbibigay-kaalaman na error:

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

Dati, ang produkto ng GeoLite, na kilala ngayon bilang GeoLite Legacy, na ipinamahagi sa ilalim ng lisensya, ay ginamit bilang isang database Creative Commons ASA 4.0 kumpanya MaxMind. Dalawang kaganapan ang nangyari sa produktong ito nang sabay-sabay na "nasira" ang pagiging tugma sa extension ng iptables.

Una, noong Enero 2018 inihayag tungkol sa pagwawakas ng suporta para sa produkto, at noong Enero 2019, 2, ang lahat ng link sa pag-download ng lumang bersyon ng database ay inalis mula sa opisyal na website. Inirerekomenda ang mga bagong user na gamitin ang produkto ng GeoLite2 o ang bayad na bersyon nito na GeoIPXNUMX.

Pangalawa, mula noong Disyembre 2019 MaxMind siya nakasaad tungkol sa isang makabuluhang pagbabago sa pag-access sa kanilang mga database. Upang sumunod sa California Consumer Privacy Act, nagpasya ang MaxMind na "takpan" ang pamamahagi ng GeoLite2 na may pagpaparehistro.

Dahil gusto naming gamitin ang kanilang produkto, magrerehistro kami sa page na ito.

xtables-addons: filter packages ayon sa bansa
Makakatanggap ka ng email na humihiling sa iyong magtakda ng password. Ngayong nakagawa na kami ng account, kailangan naming gumawa ng license key. Sa iyong personal na account makikita namin ang item Aking Mga License Key, at pagkatapos ay mag-click sa pindutan Bumuo ng bagong License Key.

Kapag gumagawa ng susi, isang tanong lang ang tatanungin sa amin: gagamitin ba namin ang key na ito sa programang GeoIP Update? Sumasagot kami ng negatibo at pinindot ang pindutan Patunayan. Ang susi ay ipapakita sa isang pop-up window. I-save ang key na ito sa isang ligtas na lugar, dahil sa sandaling isara mo ang pop-up window, hindi mo na makikita ang buong key.

xtables-addons: filter packages ayon sa bansa
Mayroon kaming kakayahang mag-download nang manu-mano ng mga database ng GeoLite2, ngunit ang format ng mga ito ay hindi tugma sa format na inaasahan ng xt_geoip_build script. Dito sumagip ang mga script ng GeoLite2xtables. Upang magpatakbo ng mga script, i-install ang NetAddr::IP perl module:

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

Susunod, kino-clone namin ang repositoryo ng mga script at isulat ang dating nakuhang susi ng lisensya sa isang file:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Patakbuhin natin ang mga script:

# Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ 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

Ang MaxMind ay nagpapataw ng limitasyon na 2000 mga pag-download bawat araw at, na may malaking bilang ng mga server, nag-aalok upang i-cache ang update sa isang proxy server.

Mangyaring tandaan na ang output file ay dapat na tawagan dbip-country-lite.csv... Sa kasamaang palad 20_convert_geolite2 hindi gumagawa ng perpektong file. Script xt_geoip_build inaasahan ang tatlong column:

  • simula ng hanay ng address;
  • dulo ng hanay ng address;
  • country code sa iso-3166-alpha2.

At ang output file ay naglalaman ng anim na column:

  • simula ng hanay ng address (representasyon ng string);
  • dulo ng hanay ng address (representasyon ng string);
  • simula ng hanay ng address (numeric na representasyon);
  • dulo ng hanay ng address (numeric na representasyon);
  • code ng bansa;
  • ang pangalan ng bansa.

Ang pagkakaibang ito ay kritikal at maaaring itama sa isa sa dalawang paraan:

  1. i-edit 20_convert_geolite2;
  2. i-edit xt_geoip_build.

Sa unang kaso binabawasan namin printf sa kinakailangang format, at sa pangalawa - binabago namin ang pagtatalaga sa variable $cc sa $row->[4]. Pagkatapos nito maaari kang bumuo:

/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

Tandaan na ang may-akda GeoLite2xtables hindi isinasaalang-alang ang mga script nito na handa para sa produksyon at mga alok subaybayan para sa pagbuo ng orihinal na xt_geoip_* script. Samakatuwid, lumipat tayo sa pagpupulong mula sa mga source code, kung saan ang mga script na ito ay na-update na.

Pinagmulan na bersyon

Kapag nag-i-install mula sa mga script ng source code xt_geoip_* ay matatagpuan sa catalog /usr/local/libexec/xtables-addons. Ang bersyon na ito ng script ay gumagamit ng database IP sa Country Lite. Ang lisensya ay Creative Commons Attribution License, at mula sa magagamit na data mayroong tatlong kinakailangang column. I-download at tipunin ang database:

cd /usr/share/xt_geoip/

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

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

Pagkatapos ng mga hakbang na ito, handa nang gumana ang iptables.

Paggamit ng geoip sa iptables

Modyul xt_geoip nagdaragdag lamang ng dalawang susi:

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.

Ang mga pamamaraan para sa paglikha ng mga panuntunan para sa mga iptable, sa pangkalahatan, ay nananatiling hindi nagbabago. Upang gumamit ng mga key mula sa mga karagdagang module, dapat mong tahasang tukuyin ang pangalan ng module gamit ang -m switch. Halimbawa, isang panuntunan upang harangan ang mga papasok na koneksyon sa TCP sa port 443 hindi mula sa USA sa lahat ng mga interface:

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

Ang mga file na nilikha ng xt_geoip_build ay ginagamit lamang kapag gumagawa ng mga panuntunan, ngunit hindi isinasaalang-alang kapag nag-filter. Kaya, upang mai-update nang tama ang database ng geoip, kailangan mo munang i-update ang mga iv* file, at pagkatapos ay muling likhain ang lahat ng mga patakaran na gumagamit ng geoip sa mga iptables.

Konklusyon

Ang pag-filter ng mga packet batay sa mga bansa ay isang diskarte na medyo nakalimutan ng panahon. Sa kabila nito, ang mga tool ng software para sa naturang pag-filter ay binuo at, marahil, sa lalong madaling panahon ang isang bagong bersyon ng xt_geoip na may bagong geoip data provider ay lalabas sa mga manager ng package, na lubos na magpapasimple sa buhay ng mga administrator ng system.

xtables-addons: filter packages ayon sa bansa

Ang mga rehistradong user lamang ang maaaring lumahok sa survey. Mag-sign in, pakiusap

Nagamit mo na ba ang pag-filter ayon sa bansa?

  • 59,1%Oo13

  • 40,9%No9

22 na user ang bumoto. 3 user ang umiwas.

Pinagmulan: www.habr.com

Magdagdag ng komento