xtables-addons: filtre els paquets per país

xtables-addons: filtre els paquets per país
La tasca de bloquejar el trànsit de determinats països sembla senzilla, però les primeres impressions poden enganyar. Avui us explicarem com es pot implementar això.

prehistòria

Els resultats d'una cerca a Google sobre aquest tema són decebedors: la majoria de les solucions fa temps que estan "podrides" i de vegades sembla que aquest tema s'ha deixat de banda i s'ha oblidat per sempre. Hem revisat molts registres antics i estem preparats per compartir una versió moderna de les instruccions.

Us recomanem que llegiu l'article sencer abans d'executar aquestes ordres.

Preparació del sistema operatiu

El filtratge es configurarà mitjançant la utilitat iptables, que requereix una extensió per treballar amb dades GeoIP. Aquesta extensió es pot trobar a xtables-addons. xtables-addons instal·la extensions per a iptables com a mòduls independents del nucli, de manera que no cal tornar a compilar el nucli del sistema operatiu.

En el moment d'escriure, la versió actual de xtables-addons és la 3.9. Tanmateix, només es pot trobar 20.04 als dipòsits estàndard d'Ubuntu 3.8 LTS i 18.04 als dipòsits Ubuntu 3.0. Podeu instal·lar l'extensió des del gestor de paquets amb l'ordre següent:

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

Tingueu en compte que hi ha diferències petites però importants entre la versió 3.9 i l'estat actual del projecte, que parlarem més endavant. Per crear a partir del codi font, instal·leu tots els paquets necessaris:

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

Clonar el repositori:

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

cd xtables-addons-xtables-addons

xtables-addons conté moltes extensions, però només ens interessen xt_geoip. Si no voleu arrossegar extensions innecessàries al sistema, podeu excloure-les de la compilació. Per fer-ho, cal editar el fitxer mconfig. Per a tots els mòduls desitjats, instal·leu y, i marca tots els innecessaris n. Recollim:

./autogen.sh

./configure

make

I instal·leu amb drets de superusuari:

make install

Durant la instal·lació dels mòduls del nucli, es pot produir un error semblant al següent:

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

Aquesta situació sorgeix a causa de la impossibilitat de signar mòduls del nucli, perquè res a signar. Podeu resoldre aquest problema amb un parell d'ordres:

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

El mòdul del nucli compilat està instal·lat, però el sistema no el detecta. Demanem al sistema que creï un mapa de dependències tenint en compte el nou mòdul, i després el carreguem:

depmod -a

modprobe xt_geoip

Assegurem-nos que xt_geoip es carregui al sistema:

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

A més, assegureu-vos que l'extensió es carregui a iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Estem contents amb tot i només queda afegir-hi el nom del mòdul / Etc / modulesperquè el mòdul funcioni després de reiniciar el sistema operatiu. A partir d'ara, iptables entén les ordres geoip, però no té prou dades per treballar-hi. Comencem a carregar la base de dades geoip.

Obtenció de la base de dades GeoIP

Creem un directori en el qual s'emmagatzemarà informació comprensible per a l'extensió iptables:

mkdir /usr/share/xt_geoip

Al principi de l'article, vam esmentar que hi ha diferències entre la versió del codi font i la versió del gestor de paquets. La diferència més notable és el canvi en el proveïdor de la base de dades i l'script xt_geoip_dl, que baixa les dades més recents.

Versió del gestor de paquets

L'script es troba al camí /usr/lib/xtables-addons, però quan intenteu executar-lo, veureu un error poc informatiu:

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

Anteriorment, el producte GeoLite, ara conegut com GeoLite Legacy, distribuït sota llicència, s'utilitzava com a base de dades Creative Commons ASA 4.0 per empresa Maxmind. Amb aquest producte es van produir alhora dos esdeveniments que van "trencar" la compatibilitat amb l'extensió iptables.

En primer lloc, el gener de 2018 va anunciar sobre la finalització del suport per al producte i, el 2019 de gener de 2, tots els enllaços per descarregar la versió antiga de la base de dades es van eliminar del lloc web oficial. Es recomana als nous usuaris que utilitzin el producte GeoLite2 o la seva versió de pagament GeoIPXNUMX.

En segon lloc, des de desembre de 2019 MaxMind va declarar sobre un canvi significatiu en l'accés a les seves bases de dades. Per complir amb la Llei de privadesa del consumidor de Califòrnia, MaxMind va decidir "cobrir" la distribució de GeoLite2 amb el registre.

Com que volem utilitzar el seu producte, ens registrarem en aquesta pàgina.

xtables-addons: filtre els paquets per país
Aleshores rebreu un correu electrònic que us demanarà que establiu una contrasenya. Ara que hem creat un compte, hem de crear una clau de llicència. Al teu compte personal trobem l'article Les meves claus de llicència, i després feu clic al botó Genera una nova clau de llicència.

A l'hora de crear una clau, només se'ns farà una pregunta: utilitzarem aquesta clau al programa d'actualització de GeoIP? Contestem negativament i premem el botó Confirmar. La clau es mostrarà en una finestra emergent. Deseu aquesta clau en un lloc segur, ja que un cop tanqueu la finestra emergent, ja no podreu veure la clau sencera.

xtables-addons: filtre els paquets per país
Tenim la possibilitat de descarregar les bases de dades GeoLite2 manualment, però el seu format no és compatible amb el format esperat per l'script xt_geoip_build. Aquí és on els scripts de GeoLite2xtables vénen al rescat. Per executar scripts, instal·leu el mòdul perl NetAddr::IP:

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

A continuació, clonem el dipòsit amb scripts i escrivim la clau de llicència obtinguda prèviament en un fitxer:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Executem els scripts:

# Скачиваем данные 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 imposa un límit de 2000 descàrregues per dia i, amb un gran nombre de servidors, ofereix la memòria cau de l'actualització en un servidor intermediari.

Tingueu en compte que el fitxer de sortida s'ha de cridar dbip-country-lite.csv... Malauradament, 20_convertir_geolita2 no produeix un fitxer perfecte. Guió xt_geoip_build espera tres columnes:

  • inici de l'interval d'adreces;
  • final de l'interval d'adreces;
  • codi de país a iso-3166-alpha2.

I el fitxer de sortida conté sis columnes:

  • inici de l'interval d'adreces (representació de cadena);
  • final de l'interval d'adreces (representació de cadena);
  • inici de l'interval d'adreces (representació numèrica);
  • final de l'interval d'adreces (representació numèrica);
  • codi de país;
  • el nom del país.

Aquesta discrepància és crítica i es pot corregir de dues maneres:

  1. regnar 20_convertir_geolita2;
  2. regnar xt_geoip_build.

En el primer cas reduïm imprimirf al format requerit i, en el segon, canviem l'assignació a la variable $cc en $fila->[4]. Després d'això, podeu construir:

/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

Tingueu en compte que l'autor GeoLite2xtables no considera els seus guions preparats per a la producció i les ofertes pista per al desenvolupament d'scripts xt_geoip_* originals. Per tant, passem al muntatge a partir dels codis font, en què aquests scripts ja s'han actualitzat.

Versió font

Quan instal·leu des de scripts de codi font xt_geoip_* es troben al catàleg /usr/local/libexec/xtables-addons. Aquesta versió de l'script utilitza una base de dades IP a Country Lite. La llicència és Creative Commons Attribution License, i de les dades disponibles hi ha les tres columnes molt necessàries. Descarrega i munta la base de dades:

cd /usr/share/xt_geoip/

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

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

Després d'aquests passos, iptables està llest per funcionar.

Utilitzant geoip a iptables

Mòdul xt_geoip afegeix només dues claus:

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.

Els mètodes per crear regles per a iptables, en general, romanen sense canvis. Per utilitzar claus de mòduls addicionals, heu d'especificar explícitament el nom del mòdul amb el commutador -m. Per exemple, una regla per bloquejar les connexions TCP entrants al port 443 no des dels EUA a totes les interfícies:

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

Els fitxers creats per xt_geoip_build només s'utilitzen quan es creen regles, però no es tenen en compte a l'hora de filtrar. Així, per actualitzar correctament la base de dades geoip, primer heu d'actualitzar els fitxers iv*, i després recrear totes les regles que utilitzen geoip a iptables.

Conclusió

Filtrar paquets per països és una estratègia una mica oblidada pel temps. Malgrat això, s'estan desenvolupant eines de programari per a aquest filtratge i, potser, aviat apareixerà una nova versió de xt_geoip amb un nou proveïdor de dades geoip als gestors de paquets, cosa que simplificarà molt la vida dels administradors del sistema.

xtables-addons: filtre els paquets per país

Només els usuaris registrats poden participar en l'enquesta. Inicia sessiósi us plau.

Heu utilitzat mai el filtratge per país?

  • 59,1%Sí 13

  • 40,9%No9

Han votat 22 usuaris. 3 usuaris es van abstenir.

Font: www.habr.com

Afegeix comentari