xtables-byvoegings: filter pakkette volgens land

xtables-byvoegings: filter pakkette volgens land
Die taak om verkeer uit sekere lande te blokkeer, lyk eenvoudig, maar eerste indrukke kan bedrieglik wees. Vandag sal ons jou vertel hoe dit geïmplementeer kan word.

voorgeskiedenis

Die resultate van 'n Google-soektog oor hierdie onderwerp is teleurstellend: die meeste van die oplossings is lankal "vrot" en soms lyk dit of hierdie onderwerp vir altyd afgeskaf is en van vergeet is. Ons het deur baie ou rekords gefynkam en is gereed om 'n moderne weergawe van die instruksies te deel.

Ons beveel aan dat u die hele artikel lees voordat u hierdie opdragte uitvoer.

Berei die bedryfstelsel voor

Filtrering sal gekonfigureer word met die hulpprogram iptables, wat 'n uitbreiding vereis om met GeoIP-data te werk. Hierdie uitbreiding kan gevind word in xtables-byvoegings. xtables-addons installeer uitbreidings vir iptables as onafhanklike kernmodules, so dit is nie nodig om die OS-kern te hersaamstel nie.

Met die skryf hiervan is die huidige weergawe van xtables-addons 3.9. Slegs 20.04 kan egter in die standaard Ubuntu 3.8 LTS-bewaarplekke gevind word, en 18.04 in die Ubuntu 3.0-bewaarplekke. U kan die uitbreiding vanaf die pakketbestuurder installeer met die volgende opdrag:

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

Let daarop dat daar klein maar belangrike verskille is tussen weergawe 3.9 en die huidige stand van die projek, wat ons later sal bespreek. Om van bronkode te bou, installeer al die nodige pakkette:

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

Kloon die bewaarplek:

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

cd xtables-addons-xtables-addons

xtables-addons bevat baie uitbreidings, maar ons stel net belang in xt_geoip. As jy nie onnodige uitbreidings na die stelsel wil sleep nie, kan jy dit uitsluit van die bou. Om dit te doen, moet jy die lêer wysig mconfig. Vir alle gewenste modules, installeer y, en merk alle onnodiges n. Ons versamel:

./autogen.sh

./configure

make

En installeer met supergebruikersregte:

make install

Tydens die installering van kernmodules kan 'n fout soortgelyk aan die volgende voorkom:

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

Hierdie situasie ontstaan ​​as gevolg van die onmoontlikheid om kernmodules te onderteken, omdat niks om te teken nie. U kan hierdie probleem oplos met 'n paar opdragte:

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

Die saamgestelde kernmodule is geïnstalleer, maar die stelsel bespeur dit nie. Kom ons vra die stelsel om 'n afhanklikheidskaart te skep met inagneming van die nuwe module, en laai dit dan:

depmod -a

modprobe xt_geoip

Kom ons maak seker dat xt_geoip in die stelsel gelaai is:

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

Maak ook seker dat die uitbreiding in iptables gelaai is:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Ons is tevrede met alles en al wat oorbly is om die modulenaam by te voeg / ens / modulessodat die module werk nadat die bedryfstelsel herlaai is. Van nou af verstaan ​​iptables geoip-opdragte, maar dit het nie genoeg data om mee te werk nie. Kom ons begin die geoip-databasis laai.

Kry die GeoIP-databasis

Ons skep 'n gids waarin inligting wat verstaanbaar is vir die iptables-uitbreiding gestoor sal word:

mkdir /usr/share/xt_geoip

Aan die begin van die artikel het ons genoem dat daar verskille is tussen die weergawe van die bronkode en die weergawe van die pakketbestuurder. Die opvallendste verskil is die verandering in databasisverskaffer en skrif xt_geoip_dl, wat die nuutste data aflaai.

Pakketbestuurder weergawe

Die skrip is geleë in die pad /usr/lib/xtables-addons, maar wanneer jy probeer om dit uit te voer, sal jy 'n nie baie insiggewende fout sien nie:

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

Voorheen is die GeoLite-produk, nou bekend as GeoLite Legacy, onder lisensie versprei, as 'n databasis gebruik Creative Commons ASA 4.0 maatskappy MaxMind. Twee gebeurtenisse het gelyktydig met hierdie produk gebeur wat versoenbaarheid met die iptables-uitbreiding "gebreek" het.

Eerstens, in Januarie 2018 aangekondig oor die beëindiging van ondersteuning vir die produk, en op 2019 Januarie 2 is alle skakels na die aflaai van die ou weergawe van die databasis van die amptelike webwerf verwyder. Nuwe gebruikers word aanbeveel om die GeoLite2-produk of sy betaalde weergawe GeoIPXNUMX te gebruik.

Tweedens, sedert Desember 2019 MaxMind hy het gesê oor 'n beduidende verandering in toegang tot hul databasisse. Om aan die Kaliforniese Wet op Verbruikersprivaatheid te voldoen, het MaxMind besluit om die verspreiding van GeoLite2 met registrasie te "dek".

Aangesien ons hul produk wil gebruik, sal ons op hierdie bladsy registreer.

xtables-byvoegings: filter pakkette volgens land
Jy sal dan 'n e-pos ontvang wat jou vra om 'n wagwoord in te stel. Noudat ons 'n rekening geskep het, moet ons 'n lisensiesleutel skep. In jou persoonlike rekening vind ons die item My lisensiesleutels, en klik dan op die knoppie Genereer nuwe lisensiesleutel.

Wanneer 'n sleutel geskep word, sal ons net een vraag gevra word: sal ons hierdie sleutel in die GeoIP Update-program gebruik? Ons antwoord negatief en druk die knoppie Bevestig. Die sleutel sal in 'n opspringvenster vertoon word. Stoor hierdie sleutel op 'n veilige plek, want sodra jy die opspringvenster toemaak, sal jy nie meer die hele sleutel kan sien nie.

xtables-byvoegings: filter pakkette volgens land
Ons het die vermoë om GeoLite2-databasisse met die hand af te laai, maar hul formaat is nie versoenbaar met die formaat wat deur die xt_geoip_build-skrip verwag word nie. Dit is waar GeoLite2xtables-skrifte tot die redding kom. Om skrifte uit te voer, installeer die 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

Vervolgens kloon ons die bewaarplek met skrifte en skryf die voorheen verkrygde lisensiesleutel na 'n lêer:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Kom ons voer die skrifte uit:

# Скачиваем данные 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 stel 'n limiet van 2000 aflaaie per dag op en bied met 'n groot aantal bedieners aan om die opdatering op 'n instaanbediener te kas.

Neem asseblief kennis dat die uitvoerlêer geroep moet word dbip-country-lite.csv... Ongelukkig, 20_convert_geolite2 produseer nie 'n perfekte lêer nie. Skripsie xt_geoip_build verwag drie kolomme:

  • begin van adresreeks;
  • einde van adresreeks;
  • landkode in iso-3166-alpha2.

En die uitvoerlêer bevat ses kolomme:

  • begin van adresreeks (stringvoorstelling);
  • einde van adresreeks (stringvoorstelling);
  • begin van adresreeks (numeriese voorstelling);
  • einde van adresreeks (numeriese voorstelling);
  • land kode;
  • die naam van die land.

Hierdie teenstrydigheid is krities en kan op een van twee maniere reggestel word:

  1. reël 20_convert_geolite2;
  2. reël xt_geoip_build.

In die eerste geval verminder ons printf na die vereiste formaat, en in die tweede - verander ons die opdrag na die veranderlike $cc op $row->[4]. Hierna kan jy bou:

/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

Let daarop dat die skrywer GeoLite2xtafels beskou nie sy draaiboeke as gereed vir vervaardiging en aanbiedings nie spoor vir die ontwikkeling van oorspronklike xt_geoip_* skrifte. Kom ons gaan dus voort na die samestelling vanaf bronkodes, waarin hierdie skrifte reeds opgedateer is.

Bron weergawe

Wanneer u vanaf bronkode-skrifte installeer xt_geoip_* is in die katalogus geleë /usr/local/libexec/xtables-addons. Hierdie weergawe van die skrif gebruik 'n databasis IP na Country Lite. Die lisensie is Creative Commons Attribution License, en uit die beskikbare data is daar die baie nodige drie kolomme. Laai die databasis af en stel dit saam:

cd /usr/share/xt_geoip/

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

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

Na hierdie stappe is iptables gereed om te werk.

Gebruik geoip in iptables

Module xt_geoip voeg slegs twee sleutels by:

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.

Die metodes om reëls vir iptables te skep, bly in die algemeen onveranderd. Om sleutels van bykomende modules te gebruik, moet jy die naam van die module uitdruklik spesifiseer met die -m skakelaar. Byvoorbeeld, 'n reël om inkomende TCP-verbindings op poort 443 nie van die VSA op alle koppelvlakke te blokkeer nie:

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

Lêers wat deur xt_geoip_build geskep is, word slegs gebruik wanneer reëls geskep word, maar word nie in ag geneem wanneer dit gefiltreer word nie. Dus, om die geoip-databasis korrek op te dateer, moet jy eers die iv*-lêers bywerk, en dan al die reëls wat geoip in iptables gebruik, herskep.

Gevolgtrekking

Filtering van pakkies gebaseer op lande is 'n strategie wat ietwat deur die tyd vergeet is. Ten spyte hiervan word sagteware-instrumente vir sulke filtering ontwikkel en, miskien, binnekort sal 'n nuwe weergawe van xt_geoip met 'n nuwe geoip-dataverskaffer in pakketbestuurders verskyn, wat die lewe van stelseladministrateurs aansienlik sal vereenvoudig.

xtables-byvoegings: filter pakkette volgens land

Slegs geregistreerde gebruikers kan aan die opname deelneem. Meld aan, asseblief.

Het jy al ooit filter volgens land gebruik?

  • 59,1%Ja 13

  • 40,9%No9

22 gebruikers het gestem. 3 gebruikers het buite stemming gebly.

Bron: will.com

Voeg 'n opmerking