xtables-addons: filtrirajte pakete po zemlji

xtables-addons: filtrirajte pakete po zemlji
Zadatak blokiranja prometa iz određenih zemalja čini se jednostavan, ali prvi dojmovi mogu varati. Danas ćemo vam reći kako se to može implementirati.

prapovijest

Rezultati Google pretraživanja na ovu temu su razočaravajući: većina rješenja je odavno “pokvarena” i ponekad se čini da je ova tema zauvijek odložena i zaboravljena. Pročešljali smo mnogo starih zapisa i spremni smo podijeliti modernu verziju uputa.

Preporučujemo da pročitate cijeli članak prije izvršavanja ovih naredbi.

Priprema operativnog sustava

Filtriranje će se konfigurirati pomoću uslužnog programa iptables, koji zahtijeva proširenje za rad s GeoIP podacima. Ovo proširenje se može pronaći u xtables-dodaci. xtables-addons instalira proširenja za iptables kao neovisne module kernela, tako da nema potrebe za ponovnim kompajliranjem kernela OS-a.

U vrijeme pisanja, trenutna verzija xtables-addons je 3.9. Međutim, samo 20.04 može se pronaći u standardnim Ubuntu 3.8 LTS spremištima, a 18.04 u Ubuntu 3.0 spremištima. Ekstenziju možete instalirati iz upravitelja paketa sljedećom naredbom:

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

Imajte na umu da postoje male, ali važne razlike između verzije 3.9 i trenutnog stanja projekta, o čemu ćemo raspravljati kasnije. Za izgradnju iz izvornog koda instalirajte sve potrebne pakete:

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

Kloniraj spremište:

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

cd xtables-addons-xtables-addons

xtables-addons sadrži mnoga proširenja, ali nas zanimaju samo xt_geoip. Ako ne želite povlačiti nepotrebna proširenja u sustav, možete ih isključiti iz međugradnje. Da biste to učinili, morate urediti datoteku mconfig. Za sve željene module instalirati y, a sve nepotrebne označite n. Sakupljamo:

./autogen.sh

./configure

make

I instalirajte s pravima superkorisnika:

make install

Tijekom instalacije modula jezgre može se pojaviti pogreška slična sljedećoj:

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

Ova situacija nastaje zbog nemogućnosti potpisivanja kernel modula, jer ništa za potpisati. Ovaj problem možete riješiti s nekoliko naredbi:

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

Prevedeni kernel modul je instaliran, ali ga sustav ne otkriva. Zamolimo sustav da izradi mapu ovisnosti uzimajući u obzir novi modul, a zatim je učitaj:

depmod -a

modprobe xt_geoip

Provjerimo da je xt_geoip učitan u sustav:

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

Osim toga, provjerite je li ekstenzija učitana u iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Sa svime smo zadovoljni i preostaje samo dodati naziv modula / etc / modulitako da modul radi nakon ponovnog pokretanja OS-a. Od sada, iptables razumije geoip naredbe, ali nema dovoljno podataka za rad. Počnimo učitavati geoip bazu podataka.

Dobivanje GeoIP baze podataka

Stvaramo direktorij u kojem će biti pohranjene informacije razumljive ekstenziji iptables:

mkdir /usr/share/xt_geoip

Na početku članka spomenuli smo da postoje razlike između verzije iz izvornog koda i verzije iz upravitelja paketa. Najuočljivija razlika je promjena dobavljača baze podataka i skripte xt_geoip_dl, koji preuzima najnovije podatke.

Verzija upravitelja paketa

Skripta se nalazi u putanji /usr/lib/xtables-addons, ali kada je pokušate pokrenuti, vidjet ćete ne baš informativnu grešku:

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

Prethodno je proizvod GeoLite, sada poznat kao GeoLite Legacy, distribuiran pod licencom, korišten kao baza podataka Creative Commons ASA 4.0 poduzeće MaxMind. S ovim su se proizvodom odjednom dogodila dva događaja koja su "prekinula" kompatibilnost s ekstenzijom iptables.

Prvo, u siječnju 2018 najavio o prestanku podrške za proizvod, a 2019. siječnja 2. sa službene stranice uklonjene su sve poveznice za preuzimanje stare verzije baze podataka. Novim korisnicima preporučamo korištenje proizvoda GeoLite2 ili njegovu plaćenu verziju GeoIPXNUMX.

Drugo, od prosinca 2019. MaxMind on je naveo o značajnoj promjeni u pristupu njihovim bazama podataka. U skladu s kalifornijskim Zakonom o privatnosti potrošača, MaxMind je odlučio "pokriti" distribuciju GeoLite2 registracijom.

Budući da želimo koristiti njihov proizvod, registrirat ćemo se na ovoj stranici.

xtables-addons: filtrirajte pakete po zemlji
Zatim ćete primiti e-poruku u kojoj se od vas traži da postavite lozinku. Sada kada smo kreirali račun, moramo kreirati licencni ključ. Na vašem osobnom računu nalazimo stavku Moji ključevi licenci, a zatim kliknite na gumb Generirajte novi licencni ključ.

Prilikom izrade ključa postavit će nam se samo jedno pitanje: hoćemo li ovaj ključ koristiti u programu GeoIP Update? Odgovaramo negativno i pritisnemo tipku potvrditi. Ključ će se prikazati u skočnom prozoru. Spremite ovaj ključ na sigurno mjesto, jer kada zatvorite skočni prozor, više nećete moći vidjeti cijeli ključ.

xtables-addons: filtrirajte pakete po zemlji
Imamo mogućnost ručnog preuzimanja GeoLite2 baza podataka, ali njihov format nije kompatibilan s formatom koji očekuje skripta xt_geoip_build. Tu u pomoć dolaze GeoLite2xtables skripte. Za pokretanje skripti instalirajte NetAddr::IP perl modul:

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

Zatim kloniramo repozitorij sa skriptama i zapisujemo prethodno dobiveni licencni ključ u datoteku:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Pokrenimo skripte:

# Скачиваем данные 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 nameće ograničenje od 2000 preuzimanja dnevno i, s velikim brojem poslužitelja, nudi predmemoriju ažuriranja na proxy poslužitelju.

Imajte na umu da se izlazna datoteka mora pozvati dbip-country-lite.csv... Nažalost, 20_pretvoriti_geolit2 ne daje savršenu datoteku. Skripta xt_geoip_build očekuje tri stupca:

  • početak raspona adresa;
  • kraj raspona adresa;
  • kod zemlje u iso-3166-alpha2.

A izlazna datoteka sadrži šest stupaca:

  • početak raspona adresa (predstavljanje niza);
  • kraj raspona adresa (predstavljanje niza);
  • početak raspona adresa (numerički prikaz);
  • kraj raspona adresa (numerički prikaz);
  • kod države;
  • ime zemlje.

Ova razlika je kritična i može se ispraviti na jedan od dva načina:

  1. Uredi 20_pretvoriti_geolit2;
  2. Uredi xt_geoip_build.

U prvom slučaju smanjujemo printf u traženi format, au drugom - mijenjamo dodjelu varijabli $cc na $row->[4]. Nakon ovoga možete graditi:

/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

Imajte na umu da autor GeoLite2xtablice ne smatra svoje skripte spremnima za proizvodnju i nudi staza za razvoj originalnih xt_geoip_* skripti. Stoga, prijeđimo na montažu iz izvornih kodova, u kojima su ove skripte već ažurirane.

Izvorna verzija

Prilikom instaliranja iz skripti izvornog koda xt_geoip_* nalaze se u katalogu /usr/local/libexec/xtables-addons. Ova verzija skripte koristi bazu podataka IP na Country Lite. Licenca je Creative Commons Attribution License, a od dostupnih podataka postoje prijeko potrebna tri stupca. Preuzmite i sastavite bazu podataka:

cd /usr/share/xt_geoip/

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

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

Nakon ovih koraka, iptables je spreman za rad.

Korištenje geoip u iptables

Modul xt_geoip dodaje samo dva ključa:

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.

Metode za stvaranje pravila za iptables općenito ostaju nepromijenjene. Da biste koristili ključeve iz dodatnih modula, morate eksplicitno navesti naziv modula s prekidačem -m. Na primjer, pravilo za blokiranje dolaznih TCP veza na portu 443 ne iz SAD-a na svim sučeljima:

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

Datoteke koje je izradio xt_geoip_build koriste se samo prilikom kreiranja pravila, ali se ne uzimaju u obzir prilikom filtriranja. Dakle, da ispravno ažurirate geoip bazu podataka, prvo morate ažurirati iv* datoteke, a zatim ponovno stvoriti sva pravila koja koriste geoip u iptables.

Zaključak

Filtriranje paketa na temelju zemalja je strategija koju je vrijeme pomalo zaboravilo. Unatoč tome, razvijaju se softverski alati za takvo filtriranje i možda će se uskoro u upraviteljima paketa pojaviti nova verzija xt_geoip s novim pružateljem geoip podataka, što će uvelike pojednostaviti život administratorima sustava.

xtables-addons: filtrirajte pakete po zemlji

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Jeste li ikada koristili filtriranje po zemlji?

  • 59,1%Da13

  • 40,9%br.9

Glasovalo je 22 korisnika. Suzdržana su bila 3 korisnika.

Izvor: www.habr.com

Dodajte komentar