xtables-addons: filtrējiet pakotnes pēc valsts

xtables-addons: filtrējiet pakotnes pēc valsts
Uzdevums bloķēt satiksmi no noteiktām valstÄ«m Ŕķiet vienkārÅ”s, taču pirmais iespaids var bÅ«t maldinoÅ”s. Å odien mēs jums pateiksim, kā to var Ä«stenot.

Aizvēsture

Google meklÄ“Å”anas rezultāti par Å”o tēmu sagādā vilÅ”anos: lielākā daļa risinājumu jau sen ir ā€œsapuvuÅ”iā€ un brīžiem Ŕķiet, ka Ŕī tēma ir nolikta plauktā un aizmirsta uz visiem laikiem. Mēs esam izgājuÅ”i cauri daudziem veciem ierakstiem un esam gatavi dalÄ«ties ar modernu instrukciju versiju.

Pirms Ŕo komandu izpildes iesakām izlasīt visu rakstu.

Operētājsistēmas sagatavoÅ”ana

FiltrÄ“Å”ana tiks konfigurēta, izmantojot utilÄ«tu iptables, kam nepiecieÅ”ams paplaÅ”inājums, lai strādātu ar GeoIP datiem. Å o paplaÅ”inājumu var atrast xtables-addons. xtables-addons instalē iptables paplaÅ”inājumus kā neatkarÄ«gus kodola moduļus, tāpēc nav nepiecieÅ”ams atkārtoti kompilēt OS kodolu.

RakstÄ«Å”anas laikā paÅ”reizējā xtables-addons versija ir 3.9. Tomēr tikai 20.04 var atrast standarta Ubuntu 3.8 LTS krātuvēs un 18.04 Ubuntu 3.0 krātuvēs. PaplaÅ”inājumu var instalēt no pakotņu pārvaldnieka, izmantojot Ŕādu komandu:

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

Ņemiet vērā, ka starp versiju 3.9 un paÅ”reizējo projekta stāvokli pastāv nelielas, bet bÅ«tiskas atŔķirÄ«bas, par kurām mēs runāsim vēlāk. Lai izveidotu no pirmkoda, instalējiet visas nepiecieÅ”amās pakotnes:

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

Klonēt repozitoriju:

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

cd xtables-addons-xtables-addons

xtables-addons satur daudz paplaÅ”inājumu, taču mÅ«s interesē tikai tie xt_geoip. Ja nevēlaties vilkt sistēmā nevajadzÄ«gus paplaÅ”inājumus, varat tos izslēgt no bÅ«vējuma. Lai to izdarÄ«tu, fails ir jārediģē mconfig. Visiem vajadzÄ«gajiem moduļiem instalējiet y, un atzÄ«mējiet visus nevajadzÄ«gos n. Mēs savācam:

./autogen.sh

./configure

make

Un instalējiet ar superlietotāja tiesībām:

make install

Kodola moduļu instalÄ“Å”anas laikā var rasties Ŕāda kļūda:

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

Šī situācija rodas tāpēc, ka nav iespējams parakstīt kodola moduļus, jo nav ko parakstīt. Šo problēmu var atrisināt ar pāris komandām:

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

Kompilētais kodola modulis ir instalēts, bet sistēma to neatklāj. Lūgsim sistēmai izveidot atkarības karti, ņemot vērā jauno moduli, un pēc tam to ielādēt:

depmod -a

modprobe xt_geoip

Pārliecināsimies, ka xt_geoip ir ielādēts sistēmā:

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

Turklāt pārliecinieties, vai paplaÅ”inājums ir ielādēts iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Esam apmierināti ar visu, un atliek tikai pievienot moduļa nosaukumu / etc / moduļilai modulis darbotos pēc OS pārstartÄ“Å”anas. No Ŕī brīža iptables saprot geoip komandas, taču tai nav pietiekami daudz datu, ar kuriem strādāt. Sāksim ielādēt geoip datubāzi.

GeoIP datu bāzes iegūŔana

Mēs izveidojam direktoriju, kurā tiks saglabāta iptables paplaÅ”inājumam saprotamā informācija:

mkdir /usr/share/xt_geoip

Raksta sākumā mēs minējām, ka pastāv atŔķirÄ«bas starp versiju no avota koda un versiju no pakotņu pārvaldnieka. Visievērojamākā atŔķirÄ«ba ir datu bāzes piegādātāja un skripta izmaiņas xt_geoip_dl, kas lejupielādē jaunākos datus.

PakeŔu pārvaldnieka versija

Skripts atrodas ceļā /usr/lib/xtables-addons, taču, mēģinot to palaist, jūs redzēsit ne pārāk informatīvu kļūdu:

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

IepriekÅ” GeoLite produkts, tagad pazÄ«stams kā GeoLite Legacy, izplatÄ«ts saskaņā ar licenci, tika izmantots kā datubāze Creative Commons ASA 4.0 uzņēmums MaxMind. Ar Å”o produktu uzreiz notika divi notikumi, kas ā€œizjaucaā€ saderÄ«bu ar iptables paplaÅ”inājumu.

Pirmkārt, 2018. gada janvārÄ« paziņoja par produkta atbalsta pārtraukÅ”anu, un 2019. gada 2. janvārÄ« no oficiālās vietnes tika noņemtas visas saites uz datu bāzes vecās versijas lejupielādi. Jaunajiem lietotājiem ieteicams izmantot GeoLite2 produktu vai tā maksas versiju GeoIPXNUMX.

Otrkārt, kopÅ” 2019. gada decembra MaxMind teica par bÅ«tiskām izmaiņām piekļuvē viņu datubāzēm. Lai ievērotu Kalifornijas Patērētāju privātuma likumu, MaxMind nolēma GeoLite2 izplatÄ«Å”anu "pārsegt" ar reÄ£istrāciju.

Tā kā mēs vēlamies izmantot viņu produktu, mēs reÄ£istrējamies Å”ajā lapā.

xtables-addons: filtrējiet pakotnes pēc valsts
Pēc tam jÅ«s saņemsit e-pastu ar lÅ«gumu iestatÄ«t paroli. Tagad, kad esam izveidojuÅ”i kontu, mums ir jāizveido licences atslēga. JÅ«su personÄ«gajā kontā mēs atrodam preci Manas licences atslēgasun pēc tam noklikŔķiniet uz pogas Ä¢enerējiet jaunu licences atslēgu.

Veidojot atslēgu, mums tiks uzdots tikai viens jautājums: vai mēs izmantosim Å”o atslēgu GeoIP Update programmā? Atbildam noraidoÅ”i un nospiežam pogu Apstiprināt. Atslēga tiks parādÄ«ta uznirstoÅ”ajā logā. Saglabājiet Å”o atslēgu droŔā vietā, jo, aizverot uznirstoÅ”o logu, vairs nevarēsit skatÄ«t visu atslēgu.

xtables-addons: filtrējiet pakotnes pēc valsts
Mums ir iespēja manuāli lejupielādēt GeoLite2 datu bāzes, taču to formāts nav saderīgs ar xt_geoip_build skripta paredzēto formātu. Šeit palīgā nāk GeoLite2xtables skripti. Lai palaistu skriptus, instalējiet NetAddr::IP perl moduli:

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

Tālāk mēs klonējam repozitoriju ar skriptiem un failā ierakstām iepriekÅ” iegÅ«to licences atslēgu:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=ā€™123ertyui123' > geolite2.license

Palaidīsim skriptus:

# Š”ŠŗŠ°Ń‡ŠøŠ²Š°ŠµŠ¼ Š“Š°Š½Š½Ń‹Šµ 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 nosaka ierobežojumu 2000 lejupielāžu dienā un ar lielu serveru skaitu piedāvā keÅ”atmiņā saglabāt atjauninājumu starpniekserverÄ«.

Lūdzu, ņemiet vērā, ka izvades fails ir jāizsauc dbip-country-lite.csv... Diemžēl 20_convert_geolite2 nerada perfektu failu. Skripts xt_geoip_build sagaida trīs kolonnas:

  • adreses diapazona sākums;
  • adreses diapazona beigas;
  • valsts kods ISO-3166-alpha2.

Un izvades failā ir seŔas kolonnas:

  • adreses diapazona sākums (virknes attēlojums);
  • adreÅ”u diapazona beigas (virknes attēlojums);
  • adreses diapazona sākums (ciparu attēlojums);
  • adreÅ”u diapazona beigas (ciparu attēlojums);
  • valsts kods;
  • valsts nosaukums.

Šī neatbilstība ir kritiska, un to var labot vienā no diviem veidiem:

  1. rediģēt 20_convert_geolite2;
  2. rediģēt xt_geoip_build.

Pirmajā gadÄ«jumā mēs samazinām printf vajadzÄ«gajā formātā, bet otrajā - mainām pieŔķirÅ”anu mainÄ«gajam $cc par $rinda->[4]. Pēc tam jÅ«s varat izveidot:

/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

Ņemiet vērā, ka autors GeoLite2xtables neuzskata savus skriptus par gataviem ražoÅ”anai un piedāvājumiem trase oriÄ£inālo xt_geoip_* skriptu izstrādei. Tāpēc pāriesim pie montāžas no pirmkodiem, kuros Å”ie skripti jau ir atjaunināti.

Avota versija

Instalējot no pirmkoda skriptiem xt_geoip_* atrodas katalogā /usr/local/libexec/xtables-addons. Å Ä« skripta versija izmanto datu bāzi IP uz Country Lite. Licence ir Creative Commons Attribution License, un no pieejamajiem datiem ir ļoti nepiecieÅ”amās trÄ«s kolonnas. Lejupielādējiet un apkopojiet datu bāzi:

cd /usr/share/xt_geoip/

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

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

Pēc Ŕīm darbÄ«bām iptables ir gatavs darbam.

Geoip izmantoŔana programmā iptables

Modulis xt_geoip pievieno tikai divas atslēgas:

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.

Iptables noteikumu izveides metodes kopumā paliek nemainÄ«gas. Lai izmantotu atslēgas no papildu moduļiem, ar slēdzi -m ir skaidri jānorāda moduļa nosaukums. Piemēram, noteikums, lai visās saskarnēs bloķētu ienākoÅ”os TCP savienojumus 443. portā, nevis no ASV:

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

Faili, kas izveidoti ar xt_geoip_build, tiek izmantoti tikai, veidojot noteikumus, bet netiek ņemti vērā filtrējot. Tādējādi, lai pareizi atjauninātu geoip datu bāzi, vispirms ir jāatjaunina iv* faili un pēc tam atkārtoti jāizveido visi kārtulas, kas izmanto geoip iptables.

Secinājums

PakeÅ”u filtrÄ“Å”ana, pamatojoties uz valstÄ«m, ir laika gaitā nedaudz aizmirsta stratēģija. Neskatoties uz to, programmatÅ«ras rÄ«ki Ŕādai filtrÄ“Å”anai tiek izstrādāti un, iespējams, drÄ«zumā pakotņu pārvaldniekos parādÄ«sies jauna xt_geoip versija ar jaunu geoip datu nodroÅ”inātāju, kas ievērojami vienkārÅ”os sistēmu administratoru dzÄ«vi.

xtables-addons: filtrējiet pakotnes pēc valsts

Aptaujā var piedalīties tikai reģistrēti lietotāji. Ielogoties, lūdzu.

Vai esat kādreiz izmantojis filtrÄ“Å”anu pēc valsts?

  • 59,1%Jā 13

  • 40,9%Nr.9

Balsoja 22 lietotāji. 3 lietotāji atturējās.

Avots: www.habr.com

Pievieno komentāru