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
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
Prvo, u siječnju 2018
Drugo, od prosinca 2019. MaxMind
Budući da želimo koristiti njihov proizvod, registrirat ćemo se na ovoj stranici.
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č.
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:
- Uredi 20_pretvoriti_geolit2;
- Uredi xt_geoip_build.
U prvom slučaju smanjujemo
/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
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
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.
U anketi mogu sudjelovati samo registrirani korisnici.
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