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
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
Prvo, u januaru 2018
Drugo, od decembra 2019. MaxMind
Pošto želimo da koristimo njihov proizvod, registrovaćemo se na ovoj stranici.
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č.
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:
- vladati 20_convert_geolite2;
- vladati 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
Napominjemo da je 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-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.
Samo registrovani korisnici mogu učestvovati u anketi.
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