xtables-addons: filtreerime pakette riikide järgi

xtables-addons: filtreerime pakette riikide järgi
Liiklus blokeerimise ülesanne teatud riikidest tundub lihtne, kuid esimene mulje petab. Täna räägime, kuidas seda ellu viia.

Eelalugu

Google'i otsingutulemused selle teema kohta on pettumust valmistavad: enamik lahendusi on ammu "välja surnud" ja mõnikord tundub, et seda teemat on ära unustatud. Meie aga oleme "läbistanud" palju vanu postitusi ja oleme valmis jagama kaasaegset juhendit.

Soovitame lugeda artiklit täielikult, enne kui täidate antud käske.

Operatsioonisüsteemi ettevalmistamine

Filtreerimine seadistatakse utiliidi abil iptables, mis vajab GeoIP-andmete töötlemiseks laiendust. Sellise laienduse leiate xtables-addons. xtables-addons paigaldab iptables'i laiendused iseseisvate tuumamoodulitena, mistõttu ei ole vajalik OSi tuuma uuesti kompileerida.

Artikli kirjutamise hetkel on xtables-addons'i uusim versioon 3.9. Siiski, Ubuntu 20.04 LTS standardsetes hoidlates leidub vaid 3.8 versioon ja Ubuntu 18.04 hoidlates 3.0 versioon. Laienduse paigaldamiseks paketihaldurist saab kasutada järgmise käsku:

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

Tuleb märkida, et versiooni 3.9 ja praeguse projekti oleku vahel on mõned väikesed, kuid olulised erinevused, millest räägime hiljem. Allika koodist koostamiseks installime 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

Kloonime repositooriumi:

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

cd xtables-addons-xtables-addons

xtables-addons sisaldab paljusid laiendusi, kuid meid huvitab ainult xt_geoip. Kui te ei soovi süsteemi mittesoovitavaid laiendusi tuua, saate need koostamisest välja jätta. Selleks tuleb muuta faili mconfig. Kõigi soovitud moodulite puhul tuleb panna y, ja kõik mittesoovitud tuleb märkida n. Koostame:

./autogen.sh

./configure

make

Ja installime superkasutaja õigustes:

make install

Moodulite installimise ajal võib esineda viga, mis näeb välja umbes järgmine:

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, kuna tuumamooduleid ei ole võimalik allkirjastada, kuna allkirjastamiseks pole midagi. Selle probleemi lahendamiseks saab kasutada paari käsku:

cd /lib/modules/(uname -r)/build/certs

cat < x509.genkey
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts

[ req_distinguished_name ]
CN = Moodulid

[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOF

[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts

[ req_distinguished_name ]
CN = Moodulid

[ 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 tuumamoodul on paigaldatud, kuid süsteem ei tuvastanud seda. Palume süsteemil luua sõltuvuste kaart uue mooduli arvestamisega ning seejärel laadime selle sisse:

depmod -a

modprobe xt_geoip

Veendume, et xt_geoip on süsteemi laaditud:

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

Lisaks veendume, et laiendus on iptables'i laaditud:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Meile kõik sobib ja jääb vaid lisada mooduli nimi /etc/modules, et moodul töötaks pärast operatsioonisüsteemi taaskäivitamist. Sellest hetkest alates mõistab iptables geoip käske, kuid tal puuduvad andmed tööks. Alustame geoip andmebaasi laadimist.

GeoIP andmebaasi allalaadimine

Loome katalooge, kus hoitakse iptables'e laiendusele arusaadavat teavet:

mkdir /usr/share/xt_geoip

Artikli alguses mainisime, et allikakoodi versiooni ja paketihalduri versiooni vahel on erinevusi. Kõige märgatavam erinevus seisneb andmebaasiteenuse ja skripti muutuses. xt_geoip_dl, mis allalaadib ajakohased andmed.

Paketihalduri versioon

Skript asub teel /usr/lib/xtables-addons, kuid käivitamisproovil võib näha mitte kõige informatiivsemat tõrget:

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

Varasemalt kasutati andmebaasina GeoLite'i toodet, mis on nüüd tuntud kui GeoLite Legacy, levitatuna litsentsi alusel Creative Commons ASA 4.0 ettevõtte MaxMind. Selle tootega juhtus kaks asja, mis "katkestasid" ühilduvuse iptablesi laiendusega.

Esiteks, jaanuaris 2018 teatasid teatas toote toe lõpetamisest, ja 2019. aasta teisel jaanuaril eemaldati ametlikult kõik allalaadimise lingid vana andmebaasi jaoks. Uutele kasutajatele soovitatakse kasutada GeoLite2 toodet või selle tasulist versiooni GeoIP2.

Teiseks, alates detsembrist 2019 on MaxMind teatanud olulise muutuse kohta nende andmebaaside juurdepääsul. Vastusena California tarbijakaitseseadusele otsustas ettevõte MaxMind peatada GeoLite2 levitamise registreerimisega.

Kuna soovime nende tootest kasu saada, registreerime end sellel lehel.

xtables-addons: filtreerime pakette riikide järgi
Pärast seda saadetakse e-postile sõnum parooli seadmiseks. Nüüd, kui oleme konto loonud, tuleb meil luua litsentsikood. Otsime isiklikust kabinetist punkti My License Keys, seejärel vajutame nuppu Generate new License Key.

Litsentsikoodi loomisel küsitakse meilt ainult ühte küsimust: kas me kasutame seda koodi GeoIP Update programmis? Vastame ei ja vajutame nuppu Confirm. Hüpikaknas kuvatakse kood. Salvestage see kood turvalisse kohta, sest pärast hüpikakna sulgemist ei saa te koodi enam täielikult vaadata.

xtables-addons: filtreerime pakette riikide järgi
Meil on võimalus GeoLite2 andmebaase käsitsi allalaadida, kuid nende formaat ei ühildu xt_geoip_build skripti ootusega. Siin tulevad appi GeoLite2xtables skriptid. Skriptide tööks installime perl-mooduli 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

Seejärel kloonime skriptide reservi ja salvestame varasemalt saadud litsentsi võ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 piirdub 2000 allalaadimisega päevas ja suurte serverite arvu korral soovitab ta värskenduse vahemälu salvestada vahe-serverisse.

Pange tähele, et väljundfail peab kindlasti olema nimetatud dbip-country-lite.csv. Kahjuks, 20_convert_geolite2 loob mitte ideaalset faili. Skript xt_geoip_build ootab kolme veeru:

  • aadresside vahemiku algus;
  • aadresside vahemiku lõpp;
  • riigi kood iso-3166-alpha2.

Ja väljundfail sisaldab kuut veergu:

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

See vastuolu on kriitiline ja seda saab parandada ühel kahest viisis:

  1. muutmine 20_convert_geolite2;
  2. muutmine xt_geoip_build.

Esimesel juhul lühendame printf kuni vajaliku formaadini, teisel juhul muudame muutujale määramise $cc järgnevaga $row->[4]. Pärast seda on võimalik koguda:

/usr/lib/xtables-addons/xt_geoip_build -S /usr/share/xt_geoip/ -D /usr/share/xt_geoip

. . .
 2239 IPv4 vahemikku ZA jaoks
  348 IPv6 vahemikku ZA jaoks
   56 IPv4 vahemikku ZM jaoks
   12 IPv6 vahemikku ZM jaoks
   56 IPv4 vahemikku ZW jaoks
   15 IPv6 vahemikku ZW jaoks

Tähtis on märkida, et autor GeoLite2xtables ei pea oma skripte tootmiseks valmis ja soovitab jälgida originaalsete xt_geoip_* skriptide arendust. Seega liigume edasi lähtekoodide kogumiseni, kus need skriptid on juba ajakohastatud.

Lähtekoodide versioon

Lähtekoodide installimisel paiknevad skriptid xt_geoip_* asuvad kataloogis /usr/local/libexec/xtables-addons. Selles skripti versioonis kasutatakse andmebaasi IP to Country Lite. Litsents on Creative Commonsi autorile viitamise litsents, ja saadaolevatest andmetest on just need kolm vajalikku veergu. Laeme alla ja kogume andmebaasi:

cd /usr/share/xt_geoip/

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

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

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

Kasutame geoip-d iptables-is

Modul xt_geoip lisab vaid kaks lippu:

geoip match options:
[!] --src-cc, --source-country country[,country...]
	Match pakett, mis tuleb (ühe) nimetatud riigi(riikide) seest
[!] --dst-cc, --destination-country country[,country...]
	Match pakett, mis läheb (ühe) nimetatud riigi(riikide) suunas

MÄRKUS: Riik sisestatakse ISO3166 koodi järgi.

iptables reeglite koostamine jääb peamiselt muutumatuks. Lisamoodulite võtmete kasutamiseks tuleb selgelt märkida mooduli nimi koos võtmega -m. Näiteks reegel, mis blokeerib sissetulevaid TCP-ühendusi porti 443, välja arvatud USA-st, kõigil liidestel:

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

Failid, mille xt_geoip_build on loonud, kasutatakse ainult reeglite koostamisel, kuid neid ei arvestata filtreerimisel. Seetõttu tuleb geoip andmebaasi õigeks uuendamiseks kõigepealt uuendada iv*-faile ja seejärel luua uuesti kõik reeglid, mis kasutavad geoip iptablesis.

Kokkuvõte

Paketifiltramine riikide kuuluvuse alusel on veidi unustatud strateegia. Hoolimata sellest areneb selline filtreerimine ja võib-olla ilmub peagi uut versiooni xt_geoip-ga uue geoip andmete pakkujaga pakihaldurisse, mis muudab süsteemiadministraatorite elu oluliselt lihtsamaks.

xtables-addons: filtreerime pakette riikide järgi

Ainult registreeritud kasutajad saavad küsitluses osaleda. Logige sisse, palun.

Kas olete kunagi riigipõhist filtreerimist kasutanud?

  • 59,1%Jah13

  • 40,9%Ei9

22 kasutajat hääletasid. 3 kasutajat jäid erapooletuks.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster