xtables-addons: filtrirajte pakete po zemlji

xtables-addons: filtrirajte pakete po zemlji
Zadatak blokiranja saobraćaja iz određenih zemalja izgleda jednostavan, ali prvi utisci mogu biti varljivi. Danas ćemo vam reći kako se to može implementirati.

prapovijest

Rezultati Google pretrage na ovu temu su razočaravajući: većina rješenja je odavno „trula“ i ponekad se čini da je ova tema zauvijek zaboravljena. Prošli smo kroz dosta starih zapisa i spremni smo podijeliti modernu verziju uputstava.

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

Priprema operativnog sistema

Filtriranje će biti konfigurirano pomoću uslužnog programa iptables, što zahtijeva proširenje za rad sa GeoIP podacima. Ova ekstenzija se može naći u xtables-addons. xtables-addons instalira ekstenzije za iptables kao nezavisne module kernela, tako da nema potrebe za ponovnom kompajliranjem kernela OS-a.

U vrijeme pisanja, trenutna verzija xtables-addons je 3.9. Međutim, samo 20.04 se može naći u standardnim Ubuntu 3.8 LTS repozitorijumima, a 18.04 u Ubuntu 3.0 repozitorijumima. Možete instalirati ekstenziju iz upravitelja paketa pomoću sljedeće naredbe:

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 kasnije raspravljati. Da biste napravili 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

Klonirajte 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 mnogo ekstenzija, ali nas samo zanimaju xt_geoip. Ako ne želite da prevučete nepotrebna proširenja u sistem, možete ih isključiti iz izrade. Da biste to učinili, morate urediti datoteku mconfig. Za sve željene module, instalirajte y, i označite sve nepotrebne n. prikupljamo:

./autogen.sh

./configure

make

I instalirajte sa pravima superkorisnika:

make install

Tokom instalacije modula kernela može se pojaviti greš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 modula kernela, jer ništa za potpisati. Ovaj problem možete riješiti sa 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 modul kernela je instaliran, ali ga sistem ne detektuje. Zamolimo sistem da kreira mapu zavisnosti uzimajući u obzir novi modul, a zatim je učitamo:

depmod -a

modprobe xt_geoip

Uvjerimo se da je xt_geoip učitan u sistem:

# 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

Zadovoljni smo svime i ostaje nam samo da dodamo naziv modula / etc / modulestako da modul radi nakon ponovnog pokretanja OS-a. Od sada, iptables razumije geoip komande, ali nema dovoljno podataka za rad. Počnimo sa učitavanjem geoip baze podataka.

Dobivanje GeoIP baze podataka

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

mkdir /usr/share/xt_geoip

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

Verzija menadžera paketa

Skripta se nalazi na putu /usr/lib/xtables-addons, ali kada pokušate da je pokrenete, videćete grešku koja nije baš informativna:

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

Ranije je proizvod GeoLite, sada poznat kao GeoLite Legacy, distribuiran pod licencom, korišten kao baza podataka Creative Commons ASA 4.0 kompanija MaxMind. Sa ovim proizvodom su se dogodila dva događaja odjednom koja su "pokvarila" kompatibilnost sa ekstenzijom iptables.

Prvo, u januaru 2018 najavljeno o prestanku podrške za proizvod, a 2019. januara 2. godine sa službene web stranice uklonjeni su svi linkovi za preuzimanje stare verzije baze podataka. Novim korisnicima se preporučuje korištenje GeoLite2 proizvoda ili njegove plaćene verzije GeoIPXNUMX.

Drugo, od decembra 2019. MaxMind navedeno o značajnoj promjeni pristupa njihovim bazama podataka. Kako bi se uskladio sa Kalifornijskim zakonom o privatnosti potrošača, MaxMind je odlučio da distribuciju GeoLite2 "pokrije" registracijom.

Pošto želimo da koristimo njihov proizvod, registrovaćemo se na ovoj stranici.

xtables-addons: filtrirajte pakete po zemlji
Tada ćete dobiti e-poštu u kojoj se od vas traži da postavite lozinku. Sada kada smo kreirali nalog, moramo kreirati licencni ključ. U Vašem ličnom računu nalazimo artikl Moji licencni ključevi, a zatim kliknite na dugme Generirajte novi ključ licence.

Prilikom kreiranja ključa biće nam postavljeno samo jedno pitanje: da li ćemo ovaj ključ koristiti u programu GeoIP Update? Odgovaramo negativno i pritisnemo dugme potvrditi. Ključ će biti prikazan u iskačućem prozoru. Sačuvajte ovaj ključ na sigurnom mjestu, jer kada zatvorite iskačući prozor, više nećete moći vidjeti cijeli ključ.

xtables-addons: filtrirajte pakete po zemlji
Imamo mogućnost da ručno preuzmemo GeoLite2 baze podataka, ali njihov format nije kompatibilan sa formatom koji se očekuje od skripte xt_geoip_build. Ovdje GeoLite2xtables skripte dolaze u pomoć. Da biste pokrenuli skripte, 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 spremište sa skriptama i upisujemo prethodno dobijeni 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, sa velikim brojem servera, nudi keširanje ažuriranja na proxy serveru.

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

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

A izlazna datoteka sadrži šest kolona:

  • početak raspona adresa (string reprezentacija);
  • kraj raspona adresa (string reprezentacija);
  • početak raspona adresa (numerički prikaz);
  • kraj raspona adresa (numerički prikaz);
  • kod zemlje;
  • naziv zemlje.

Ovo neslaganje je kritično i može se ispraviti na jedan od dva načina:

  1. vladati 20_convert_geolite2;
  2. vladati xt_geoip_build.

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

/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

Napominjemo da je autor GeoLite2xtables ne smatra svoje skripte spremnim za proizvodnju i ponude track za razvoj originalnih xt_geoip_* skripti. Stoga, prijeđimo na sklop 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 za Country Lite. Licenca je Creative Commons Attribution License, a od dostupnih podataka postoje tri potrebne kolone. 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-a 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 kreiranje pravila za iptables, općenito, ostaju nepromijenjene. Da biste koristili ključeve iz dodatnih modula, morate eksplicitno navesti ime modula pomoću -m prekidača. Na primjer, pravilo za blokiranje dolaznih TCP veza na portu 443 koji nije 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 kreira xt_geoip_build koriste se samo prilikom kreiranja pravila, ali se ne uzimaju u obzir prilikom filtriranja. Dakle, da biste ispravno ažurirali geoip bazu podataka, prvo morate ažurirati iv* datoteke, a zatim ponovo kreirati sva pravila koja koriste geoip u iptables.

zaključak

Filtriranje paketa po zemljama je strategija koja je pomalo zaboravljena od vremena. Unatoč tome, softverski alati za takvo filtriranje se razvijaju i, možda, uskoro će se nova verzija xt_geoip-a sa novim geoip provajderom podataka pojaviti u paket menadžerima, što će uvelike pojednostaviti život sistem administratorima.

xtables-addons: filtrirajte pakete po zemlji

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Jeste li ikada koristili filtriranje po zemlji?

  • 59,1%Da13

  • 40,9%No9

22 korisnika je glasalo. 3 korisnika su bila uzdržana.

izvor: www.habr.com

Dodajte komentar