xtables-addons: filtreerige pakette riigi järgi

xtables-addons: filtreerige pakette riigi järgi
Teatud riikide liikluse blokeerimine tundub lihtne, kuid esmamulje võib olla petlik. Täna räägime teile, kuidas seda saab rakendada.

eelajalugu

Google’i otsingutulemused sellel teemal valmistavad pettumuse: enamus lahendusi on ammu “mäda” olnud ja kohati tundub, et see teema on igaveseks riiulisse lükatud ja unustatud. Oleme läbi kamminud palju vanu plaate ja oleme valmis jagama juhendi kaasaegset versiooni.

Enne nende käskude täitmist soovitame lugeda kogu artiklit.

Operatsioonisüsteemi ettevalmistamine

Filtreerimine konfigureeritakse utiliidi abil iptables, mis vajab GeoIP andmetega töötamiseks laiendust. Selle laienduse leiate aadressilt xtables-addons. xtables-addons installib iptablesi laiendused sõltumatute tuumamoodulitena, seega pole vaja OS-i kernelit uuesti kompileerida.

Selle artikli kirjutamise ajal on xtables-addonsi praegune versioon 3.9. Standardsetes Ubuntu 20.04 LTS-i hoidlates leidub aga ainult 3.8 ja Ubuntu 18.04 hoidlates 3.0. Laienduse saate installida paketihaldurist järgmise käsuga:

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

Pange tähele, et versiooni 3.9 ja projekti praeguse seisu vahel on väikesed, kuid olulised erinevused, millest räägime hiljem. Lähtekoodist ehitamiseks installige kõik vajalikud paketid:

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

Kloonige hoidla:

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

cd xtables-addons-xtables-addons

xtables-addons sisaldab palju laiendusi, kuid meid huvitavad ainult xt_geoip. Kui te ei soovi tarbetuid laiendusi süsteemi lohistada, saate need järgust välja jätta. Selleks peate faili redigeerima mconfig. Kõigi soovitud moodulite jaoks installige yja märkige kõik mittevajalikud n. Kogume:

./autogen.sh

./configure

make

Ja installige superkasutaja õigustega:

make install

Kerneli moodulite installimisel võib ilmneda järgmisega sarnane tõrge:

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

See olukord tekib kerneli moodulite allkirjastamise võimatuse tõttu, kuna pole millelegi alla kirjutada. Selle probleemi saate lahendada paari käsuga:

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

Kompileeritud kerneli moodul on installitud, kuid süsteem seda ei tuvasta. Paluge süsteemil luua sõltuvuskaart, võttes arvesse uut moodulit, ja seejärel laadida see:

depmod -a

modprobe xt_geoip

Veenduge, et xt_geoip on süsteemi laaditud:

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

Lisaks veenduge, et laiendus oleks iptablesi laaditud:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Oleme kõigega rahul ja jääb üle vaid lisada mooduli nimi / etc / moodulidnii et moodul töötaks pärast OS-i taaskäivitamist. Nüüdsest saab iptables geoip-käskudest aru, kuid tal pole töötamiseks piisavalt andmeid. Alustame geoip andmebaasi laadimist.

GeoIP andmebaasi hankimine

Loome kataloogi, kuhu salvestatakse iptablesi laiendusele arusaadav teave:

mkdir /usr/share/xt_geoip

Artikli alguses mainisime, et lähtekoodi ja paketihalduri versiooni vahel on erinevusi. Kõige märgatavam erinevus on andmebaasi tarnija ja skripti muutus xt_geoip_dl, mis laadib alla uusimad andmed.

Paketihalduri versioon

Skript asub teel /usr/lib/xtables-addons, kuid kui proovite seda käivitada, näete mitte eriti informatiivset viga:

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

Varem kasutati andmebaasina GeoLite'i toodet, mida nüüd tuntakse GeoLite Legacy nime all ja mida levitati litsentsi alusel. Creative Commons ASA 4.0 ettevõte MaxMind. Selle tootega juhtus korraga kaks sündmust, mis "rikkusid" ühilduvuse iptablesi laiendusega.

Esiteks jaanuaris 2018 teatas toote toe lõpetamise kohta ja 2019. jaanuaril 2 eemaldati ametlikult veebisaidilt kõik lingid andmebaasi vana versiooni allalaadimiseks. Uutel kasutajatel on soovitatav kasutada GeoLite2 toodet või selle tasulist versiooni GeoIPXNUMX.

Teiseks alates 2019. aasta detsembrist MaxMind ta märkis olulise muudatuse kohta juurdepääsus nende andmebaasidele. California tarbijate privaatsusseaduse järgimiseks otsustas MaxMind GeoLite2 levitamise "katta" registreerimisega.

Kuna soovime nende toodet kasutada, siis registreerime end sellel lehel.

xtables-addons: filtreerige pakette riigi järgi
Seejärel saate e-kirja, milles palutakse teil määrata parool. Nüüd, kui oleme konto loonud, peame looma litsentsivõtme. Teie isiklikult kontolt leiame üksuse Minu litsentsivõtmedja seejärel klõpsake nuppu Looge uus litsentsivõti.

Võtme loomisel esitatakse meile ainult üks küsimus: kas kasutame seda võtit GeoIP Update programmis? Vastame eitavalt ja vajutame nuppu Kinnitama. Võti kuvatakse hüpikaknas. Salvestage see võti kindlasse kohta, sest pärast hüpikakna sulgemist ei saa te enam kogu võtit vaadata.

xtables-addons: filtreerige pakette riigi järgi
Meil on võimalus GeoLite2 andmebaase käsitsi alla laadida, kuid nende vorming ei ühildu xt_geoip_build skripti eeldatud vorminguga. Siin tulevad appi GeoLite2xtablesi skriptid. Skriptide käitamiseks installige NetAddr::IP perli moodul:

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

Järgmisena kloonime hoidla skriptidega ja kirjutame varem saadud litsentsivõtme faili:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Käivitame skriptid:

# Скачиваем данные 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 seab piirangu 2000 allalaadimist päevas ja pakub suure hulga serverite korral värskenduse vahemällu puhverserverisse.

Pange tähele, et väljundfaili tuleb kutsuda dbip-country-lite.csv... Kahjuks 20_convert_geoliit2 ei tooda täiuslikku faili. Skript xt_geoip_build ootab kolme veergu:

  • aadressivahemiku algus;
  • aadressivahemiku lõpp;
  • riigikood iso-3166-alpha2-s.

Ja väljundfail sisaldab kuut veergu:

  • aadressivahemiku algus (stringi esitus);
  • aadressivahemiku lõpp (stringi esitus);
  • aadressivahemiku algus (numbriline esitus);
  • aadressivahemiku lõpp (numbriline esitus);
  • riigi kood;
  • riigi nimi.

See lahknevus on kriitiline ja seda saab parandada kahel viisil:

  1. valitsema 20_convert_geoliit2;
  2. valitsema xt_geoip_build.

Esimesel juhul vähendame printf vajalikule vormingule ja teises - muudame määramise muutujale $cc edasi $rida->[4]. Pärast seda saate ehitada:

/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

Pange tähele, et autor GeoLite2xtables ei pea oma skripte tootmiseks ja pakkumisteks valmis järgi originaalsete xt_geoip_* skriptide arendamiseks. Seetõttu liigume lähtekoodidest koosneva juurde, milles neid skripte on juba värskendatud.

Lähteversioon

Lähtekoodi skriptidest installimisel xt_geoip_* asuvad kataloogis /usr/local/libexec/xtables-addons. See skripti versioon kasutab andmebaasi IP Country Lite'ile. Litsents on Creative Commons Attribution License ja olemasolevate andmete põhjal on kolm väga vajalikku veergu. Laadige alla ja koostage andmebaas:

cd /usr/share/xt_geoip/

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

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

Pärast neid samme on iptables tööks valmis.

Geoipi kasutamine iptablesis

Moodul xt_geoip lisab ainult kaks võtit:

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.

Iptablesi reeglite loomise meetodid jäävad üldiselt muutumatuks. Täiendavate moodulite võtmete kasutamiseks peate lülitiga -m selgesõnaliselt määrama mooduli nime. Näiteks reegel sissetulevate TCP-ühenduste blokeerimiseks pordis 443, mitte USA-st kõigis liidestes:

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

Xt_geoip_buildi loodud faile kasutatakse ainult reeglite loomisel, kuid neid ei võeta filtreerimisel arvesse. Seega peate geoip-andmebaasi korrektseks värskendamiseks esmalt värskendama iv*-faile ja seejärel uuesti looma kõik reeglid, mis kasutavad geoipi iptablesis.

Järeldus

Pakettide filtreerimine riikide alusel on aja poolt mõneti unustatud strateegia. Sellele vaatamata töötatakse sellise filtreerimise jaoks välja tarkvaratööriistu ja võib-olla ilmub peagi paketihalduritesse xt_geoip uus versioon koos uue geoip-andmete pakkujaga, mis lihtsustab oluliselt süsteemiadministraatorite elu.

xtables-addons: filtreerige pakette riigi järgi

Küsitluses saavad osaleda ainult registreerunud kasutajad. Logi sissepalun.

Kas olete kunagi kasutanud riigipõhist filtreerimist?

  • 59,1%jah 13

  • 40,9%Ei 9

22 kasutajat hääletas. 3 kasutajat jäi erapooletuks.

Allikas: www.habr.com

Lisa kommentaar