xtables-addons: filtrirajte pakete po državah

xtables-addons: filtrirajte pakete po državah
Naloga blokiranja prometa iz določenih držav se zdi preprosta, vendar je prvi vtis lahko varljiv. Danes vam bomo povedali, kako je to mogoče izvesti.

prazgodovina

Rezultati iskanja v Googlu na to temo so razočarajoči: večina rešitev je že dolgo "gnilih" in včasih se zdi, da je bila ta tema odložena in za vedno pozabljena. Prečesali smo veliko starih zapisov in smo pripravljeni deliti sodobno različico navodil.

Priporočamo, da pred izvajanjem teh ukazov preberete celoten članek.

Priprava operacijskega sistema

Filtriranje bo konfigurirano s pomočjo pripomočka iptables, ki zahteva razširitev za delo s podatki GeoIP. To razširitev lahko najdete v xtables-addons. xtables-addons namesti razširitve za iptables kot neodvisne module jedra, tako da ni potrebe po ponovnem prevajanju jedra OS.

V času pisanja je trenutna različica xtables-addons 3.9. Vendar je v standardnih repozitorijih Ubuntu 20.04 LTS mogoče najti le 3.8, v repozitorijih Ubuntu 18.04 pa 3.0. Razširitev lahko namestite iz upravitelja paketov z naslednjim ukazom:

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

Upoštevajte, da obstajajo majhne, ​​a pomembne razlike med različico 3.9 in trenutnim stanjem projekta, o katerih bomo razpravljali kasneje. Če želite zgraditi iz izvorne kode, namestite vse 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 repozitorij:

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

cd xtables-addons-xtables-addons

xtables-addons vsebuje veliko razširitev, vendar nas zanimajo le xt_geoip. Če v sistem ne želite vleči nepotrebnih razširitev, jih lahko izključite iz gradnje. Če želite to narediti, morate urediti datoteko mconfig. Za vse želene module namestite yin označite vse nepotrebne n. Zbiramo:

./autogen.sh

./configure

make

In namestite s pravicami superuporabnika:

make install

Med namestitvijo modulov jedra lahko pride do napake, podobne naslednji:

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

Ta situacija nastane zaradi nezmožnosti podpisovanja modulov jedra, ker nič za podpisati. To težavo lahko rešite z nekaj ukazi:

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 jedra je nameščen, vendar ga sistem ne zazna. Prosimo sistem, naj ustvari zemljevid odvisnosti ob upoštevanju novega modula in ga nato naložimo:

depmod -a

modprobe xt_geoip

Prepričajmo se, da je xt_geoip naložen v sistem:

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

Poleg tega se prepričajte, da je razširitev naložena v iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Z vsem smo zadovoljni in ostane le še, da dodamo ime modula / etc / moduletako da modul deluje po ponovnem zagonu OS. Od zdaj naprej iptables razume ukaze geoip, vendar nima dovolj podatkov za delo. Začnimo nalagati bazo geoip.

Pridobivanje baze podatkov GeoIP

Ustvarimo imenik, v katerem bodo shranjene informacije, razumljive razširitvi iptables:

mkdir /usr/share/xt_geoip

Na začetku članka smo omenili, da obstajajo razlike med različico iz izvorne kode in različico iz upravitelja paketov. Najbolj opazna razlika je sprememba prodajalca baze podatkov in skripta xt_geoip_dl, ki prenaša najnovejše podatke.

Različica upravitelja paketov

Skript se nahaja na poti /usr/lib/xtables-addons, vendar ko ga poskusite zagnati, boste videli ne zelo informativno napako:

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

Prej je bil izdelek GeoLite, zdaj znan kot GeoLite Legacy, distribuiran pod licenco, uporabljen kot zbirka podatkov Creative Commons ASA 4.0 podjetje MaxMind. S tem izdelkom sta se naenkrat zgodila dva dogodka, ki sta "prekinila" združljivost z razširitvijo iptables.

Prvič, januarja 2018 napovedal o ukinitvi podpore za produkt, 2019. januarja 2 pa so bile z uradne spletne strani odstranjene vse povezave do prenosa stare verzije baze podatkov. Novim uporabnikom priporočamo uporabo produkta GeoLite2 ali njegove plačljive različice GeoIPXNUMX.

Drugič, od decembra 2019 MaxMind Dejal je, o pomembni spremembi dostopa do njihovih baz podatkov. Za uskladitev s kalifornijskim zakonom o zasebnosti potrošnikov se je MaxMind odločil distribucijo GeoLite2 "pokriti" z registracijo.

Ker želimo uporabljati njihov izdelek, se bomo registrirali na tej strani.

xtables-addons: filtrirajte pakete po državah
Nato boste prejeli e-poštno sporočilo s prošnjo, da nastavite geslo. Zdaj, ko smo ustvarili račun, moramo ustvariti licenčni ključ. V vašem osebnem računu najdemo predmet Moji licenčni ključi, in nato kliknite na gumb Ustvarite nov licenčni ključ.

Pri ustvarjanju ključa se nam bo postavilo samo eno vprašanje: ali bomo ta ključ uporabili v programu GeoIP Update? Odgovorimo nikalno in pritisnemo gumb Potrdi. Ključ bo prikazan v pojavnem oknu. Ta ključ shranite na varno mesto, saj ko zaprete pojavno okno, ne boste več mogli videti celotnega ključa.

xtables-addons: filtrirajte pakete po državah
Podatkovne baze GeoLite2 lahko prenesemo ročno, vendar njihov format ni združljiv s formatom, ki ga pričakuje skript xt_geoip_build. Tukaj priskočijo na pomoč skripti GeoLite2xtables. Za zagon skriptov namestite modul NetAddr::IP perl:

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

Nato kloniramo repozitorij s skripti in predhodno pridobljen licenčni ključ zapišemo v datoteko:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Zaženimo 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 nalaga omejitev 2000 prenosov na dan in z velikim številom strežnikov ponuja predpomnilnik posodobitve na proxy strežniku.

Upoštevajte, da je treba klicati izhodno datoteko dbip-country-lite.csv... Na žalost 20_pretvori_geolit2 ne ustvari popolne datoteke. Skripta xt_geoip_build pričakuje tri stolpce:

  • začetek območja naslovov;
  • konec obsega naslovov;
  • koda države v iso-3166-alpha2.

In izhodna datoteka vsebuje šest stolpcev:

  • začetek območja naslovov (predstavitev niza);
  • konec obsega naslovov (predstavitev niza);
  • začetek območja naslovov (številska predstavitev);
  • konec obsega naslovov (številska predstavitev);
  • kodo države;
  • ime države.

To neskladje je kritično in ga je mogoče popraviti na enega od dveh načinov:

  1. Uredi 20_pretvori_geolit2;
  2. Uredi xt_geoip_build.

V prvem primeru zmanjšamo printf v zahtevani format, v drugem pa spremenimo dodelitev spremenljivki $cc o $row->[4]. Po tem lahko zgradite:

/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

Upoštevajte, da avtor GeoLite2xtables ne meni, da so njegovi scenariji pripravljeni za izdelavo in ponuja skladbo za razvoj izvirnih skriptov xt_geoip_*. Zato preidimo na sestavljanje iz izvornih kod, v katerih so bili ti skripti že posodobljeni.

Izvorna različica

Pri namestitvi iz skriptov izvorne kode xt_geoip_* se nahajajo v katalogu /usr/local/libexec/xtables-addons. Ta različica skripta uporablja bazo podatkov IP v Country Lite. Licenca je Creative Commons Attribution License, od razpoložljivih podatkov pa so zelo potrebni trije stolpci. Prenesite in sestavite bazo podatkov:

cd /usr/share/xt_geoip/

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

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

Po teh korakih je iptables pripravljen za delo.

Uporaba geoip v iptables

Modul xt_geoip doda 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 ustvarjanje pravil za iptables na splošno ostajajo nespremenjene. Če želite uporabiti ključe iz dodatnih modulov, morate izrecno podati ime modula s stikalom -m. Na primer, pravilo za blokiranje dohodnih povezav TCP na vratih 443, ki niso iz ZDA, na vseh vmesnikih:

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

Datoteke, ustvarjene z xt_geoip_build, se uporabljajo samo pri ustvarjanju pravil, vendar se ne upoštevajo pri filtriranju. Če želite pravilno posodobiti bazo podatkov geoip, morate najprej posodobiti datoteke iv* in nato znova ustvariti vsa pravila, ki uporabljajo geoip v iptables.

Zaključek

Filtriranje paketov glede na države je strategija, ki jo je čas nekoliko pozabil. Kljub temu se razvijajo programska orodja za takšno filtriranje in morda se bo kmalu v upraviteljih paketov pojavila nova različica xt_geoip z novim ponudnikom podatkov geoip, kar bo močno poenostavilo življenje sistemskih skrbnikov.

xtables-addons: filtrirajte pakete po državah

V anketi lahko sodelujejo samo registrirani uporabniki. Prijaviti se, prosim.

Ste že kdaj uporabili filtriranje po državah?

  • 59,1%Da13

  • 40,9%št.9

Glasovali so 22 uporabniki. 3 uporabniki so se vzdržali.

Vir: www.habr.com

Dodaj komentar