xtables-addons: filtri pakaĵojn laŭ lando

xtables-addons: filtri pakaĵojn laŭ lando
La tasko bloki trafikon de certaj landoj ŝajnas simpla, sed unuaj impresoj povas esti trompaj. Hodiaŭ ni rakontos al vi kiel ĉi tio povas esti efektivigita.

antaŭhistorio

La rezultoj de Guglo-serĉo pri ĉi tiu temo estas seniluziigaj: la plej multaj el la solvoj jam delonge estas "putraj" kaj foje ŝajnas, ke ĉi tiu temo estas arkivita kaj forgesita por ĉiam. Ni kombis multajn malnovajn rekordojn kaj pretas dividi modernan version de la instrukcioj.

Ni rekomendas, ke vi legu la tutan artikolon antaŭ ol ekzekuti ĉi tiujn komandojn.

Preparado de la operaciumo

Filtrado estos agordita per la ilo iptables, kiu postulas etendon por labori kun GeoIP-datumoj. Ĉi tiu etendo troveblas en xtables-aldonaĵoj. xtables-addons instalas etendaĵojn por iptables kiel sendependaj kernaj moduloj, do ne necesas rekompili la OS-kernon.

En la momento de skribado, la nuna versio de xtables-addons estas 3.9. Tamen, nur 20.04 troveblas en la normaj Ubuntu 3.8 LTS-deponejoj, kaj 18.04 en la Ubuntu 3.0-deponejoj. Vi povas instali la etendon de la pakadministranto per la jena komando:

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

Notu, ke estas malgrandaj sed gravaj diferencoj inter versio 3.9 kaj la nuna stato de la projekto, pri kiuj ni diskutos poste. Por konstrui el fontkodo, instalu ĉiujn necesajn pakaĵojn:

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

Klonu la deponejon:

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

cd xtables-addons-xtables-addons

xtables-addons enhavas multajn etendaĵojn, sed ni nur interesiĝas xt_geoip. Se vi ne volas treni nenecesajn etendaĵojn en la sistemon, vi povas ekskludi ilin de la konstruo. Por fari tion vi devas redakti la dosieron mconfig. Por ĉiuj dezirataj moduloj, instalu y, kaj marku ĉiujn nenecesajn n. Ni kolektas:

./autogen.sh

./configure

make

Kaj instalu kun superuzantrajtoj:

make install

Dum la instalado de kernaj moduloj, eraro simila al la sekvanta povas okazi:

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

Ĉi tiu situacio estiĝas pro la malebleco subskribi kernajn modulojn, ĉar nenio por subskribi. Vi povas solvi ĉi tiun problemon per kelkaj komandoj:

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

La kompilita kernomodulo estas instalita, sed la sistemo ne detektas ĝin. Ni petu la sistemon krei dependecan mapon konsiderante la novan modulon, kaj poste ŝarĝu ĝin:

depmod -a

modprobe xt_geoip

Ni certigu, ke xt_geoip estas ŝarĝita en la sistemon:

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

Aldone, certigu, ke la etendaĵo estas ŝarĝita en iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Ni estas feliĉaj pri ĉio kaj restas nur aldoni la modulan nomon al / etc / modulespor ke la modulo funkciu post rekomenco de la OS. De nun, iptables komprenas geoip-komandojn, sed ĝi ne havas sufiĉajn datumojn por labori. Ni komencu ŝargi la geoip-datumbazon.

Akirante la GeoIP-Datumbazon

Ni kreas dosierujon, en kiu estos konservitaj informoj kompreneblaj por la etendo iptables:

mkdir /usr/share/xt_geoip

Komence de la artikolo, ni menciis, ke estas diferencoj inter la versio de la fontkodo kaj la versio de la pakaĵa administranto. La plej rimarkinda diferenco estas la ŝanĝo en datumbaza vendisto kaj skripto xt_geoip_dl, kiu elŝutas la plej novajn datumojn.

Pakaĵmanaĝera versio

La skripto troviĝas en la vojo /usr/lib/xtables-addons, sed kiam vi provos ruli ĝin, vi vidos ne tre informan eraron:

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

Antaŭe, la produkto GeoLite, nun konata kiel GeoLite Legacy, distribuita sub licenco, estis utiligita kiel datumbazo Krea Komunaĵo ASA 4.0 kompanio MaxMind. Du eventoj okazis kun ĉi tiu produkto samtempe, kiuj "rompis" kongruon kun la etendo iptables.

Unue, en januaro 2018 anoncita pri la fino de subteno por la produkto, kaj la 2019-an de januaro 2, ĉiuj ligiloj al elŝuto de la malnova versio de la datumbazo estis forigitaj de la oficiala retejo. Novaj uzantoj rekomendas uzi la produkton GeoLite2 aŭ ĝian pagitan version GeoIPXNUMX.

Due, ekde decembro 2019 MaxMind deklaris pri grava ŝanĝo en aliro al iliaj datumbazoj. Por plenumi la Leĝon pri Privateco de Kalifornia Konsumanto, MaxMind decidis "kovri" la distribuadon de GeoLite2 per registrado.

Ĉar ni volas uzi ilian produkton, ni registriĝos sur ĉi tiu paĝo.

xtables-addons: filtri pakaĵojn laŭ lando
Vi tiam ricevos retpoŝton petante vin agordi pasvorton. Nun kiam ni kreis konton, ni devas krei permesilon-ŝlosilon. En via persona konto ni trovas la objekton Miaj Licencaj Ŝlosiloj, kaj poste alklaku la butonon Generu novan Licencan Ŝlosilon.

Kreante ŝlosilon, ni demandos nur unu demandon: ĉu ni uzos ĉi tiun ŝlosilon en la programo GeoIP Update? Ni respondas negative kaj premas la butonon konfirmi. La ŝlosilo estos montrata en ŝprucfenestro. Konservu ĉi tiun ŝlosilon en sekura loko, ĉar post kiam vi fermos la ŝprucfenestron, vi ne plu povos vidi la tutan ŝlosilon.

xtables-addons: filtri pakaĵojn laŭ lando
Ni havas la kapablon elŝuti GeoLite2 datumbazoj permane, sed ilia formato ne estas kongrua kun la formato atendita de la xt_geoip_build skripto. Jen kie GeoLite2xtables-skriptoj venas al la savo. Por ruli skriptojn, instalu la NetAddr::IP perl-modulon:

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

Poste, ni klonas la deponejon per skriptoj kaj skribas la antaŭe akiritan permesilan ŝlosilon al dosiero:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Ni rulu la skriptojn:

# Скачиваем данные 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 trudas limon de 2000 elŝutoj tage kaj, kun granda nombro da serviloj, ofertas konservi la ĝisdatigon en prokura servilo.

Bonvolu noti, ke la eligodosiero devas esti nomita dbip-country-lite.csv... Bedaŭrinde, 20_konverti_geolito2 ne produktas perfektan dosieron. Skripto xt_geoip_build atendas tri kolumnojn:

  • komenco de adresaro;
  • fino de adresaro;
  • landokodo en iso-3166-alpha2.

Kaj la eligdosiero enhavas ses kolumnojn:

  • komenco de adresamplekso (ŝnureprezento);
  • fino de adresamplekso (ŝnureprezento);
  • komenco de adresaro (numera prezento);
  • fino de adresaro (numera prezento);
  • kodo de la lando;
  • la nomo de la lando.

Tiu diferenco estas kritika kaj povas esti korektita en unu el du manieroj:

  1. reĝado 20_konverti_geolito2;
  2. reĝado xt_geoip_build.

En la unua kazo, ni reduktas printf al la bezonata formato, kaj en la dua - ni ŝanĝas la taskon al la variablo $cc sur $vico->[4]. Post ĉi tio vi povas konstrui:

/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

Notu ke la aŭtoro GeoLite2xtables ne konsideras ĝiajn skriptojn pretajn por produktado kaj ofertoj trako por la evoluo de originalaj xt_geoip_* skriptoj. Tial ni transiru al la asembleo de fontkodoj, en kiuj ĉi tiuj skriptoj jam estis ĝisdatigitaj.

Fontversio

Kiam oni instalas el fontkodaj skriptoj xt_geoip_* troviĝas en la katalogo /usr/local/libexec/xtables-addons. Ĉi tiu versio de la skripto uzas datumbazon IP al Country Lite. La permesilo estas Krea Komunaĵo Atribuite, kaj el la disponeblaj datumoj estas la tre necesaj tri kolumnoj. Elŝutu kaj kunigu la datumbazon:

cd /usr/share/xt_geoip/

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

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

Post ĉi tiuj paŝoj, iptables estas preta funkcii.

Uzante geoip en iptables

Modulo xt_geoip aldonas nur du ŝlosilojn:

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.

La metodoj por krei regulojn por iptables, ĝenerale, restas senŝanĝaj. Por uzi klavojn de pliaj moduloj, vi devas eksplicite specifi la nomon de la modulo per la -m ŝaltilo. Ekzemple, regulo por bloki envenantajn TCP-konegojn sur haveno 443 ne de Usono sur ĉiuj interfacoj:

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

Dosieroj kreitaj de xt_geoip_build estas uzataj nur dum kreado de reguloj, sed ne estas konsiderataj dum filtrado. Tiel, por ĝuste ĝisdatigi la geoip-datumbazon, vi unue devas ĝisdatigi la iv*-dosierojn, kaj poste rekrei ĉiujn regulojn, kiuj uzas geoip en iptables.

konkludo

Filtri pakojn bazitajn sur landoj estas strategio iom forgesita de tempo. Malgraŭ tio, oni ellaboras programajn ilojn por tia filtrado kaj, eble, baldaŭ nova versio de xt_geoip kun nova geoip-datumprovizanto aperos en pakaĵadministriloj, kio multe simpligos la vivon de sistemaj administrantoj.

xtables-addons: filtri pakaĵojn laŭ lando

Nur registritaj uzantoj povas partopreni la enketon. Ensaluti, bonvolu.

Ĉu vi iam uzis filtradon laŭ lando?

  • 59,1%Jes13

  • 40,9%No9

22 uzantoj voĉdonis. 3 uzantoj sindetenis.

fonto: www.habr.com

Aldoni komenton