xtables-addons: filtrer pakker etter land

xtables-addons: filtrer pakker etter land
Oppgaven med å blokkere trafikk fra enkelte land virker enkel, men førsteinntrykket kan være villedende. I dag vil vi fortelle deg hvordan dette kan implementeres.

forhistorie

Resultatene av et Google-søk på dette emnet er skuffende: de fleste av løsningene har lenge vært "råtne", og noen ganger ser det ut til at dette emnet har blitt skrinlagt og glemt for alltid. Vi har finkjemmet mange gamle plater og er klare til å dele en moderne versjon av instruksjonene.

Vi anbefaler at du leser hele artikkelen før du utfører disse kommandoene.

Klargjøring av operativsystemet

Filtrering vil bli konfigurert ved hjelp av verktøyet iptables, som krever en utvidelse for å fungere med GeoIP-data. Denne utvidelsen finner du i xtables-tillegg. xtables-addons installerer utvidelser for iptables som uavhengige kjernemoduler, så det er ikke nødvendig å rekompilere OS-kjernen.

I skrivende stund er den gjeldende versjonen av xtables-addons 3.9. Imidlertid kan bare 20.04 finnes i standard Ubuntu 3.8 LTS-repositoriene, og 18.04 i Ubuntu 3.0-repositoriene. Du kan installere utvidelsen fra pakkebehandlingen med følgende kommando:

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

Merk at det er små, men viktige forskjeller mellom versjon 3.9 og den nåværende tilstanden til prosjektet, som vi vil diskutere senere. For å bygge fra kildekoden, installer alle nødvendige pakker:

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

Klon depotet:

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

cd xtables-addons-xtables-addons

xtables-addons inneholder mange utvidelser, men vi er kun interessert i xt_geoip. Hvis du ikke vil dra unødvendige utvidelser inn i systemet, kan du ekskludere dem fra bygget. For å gjøre dette må du redigere filen mconfig. For alle ønskede moduler, installer y, og merk alle unødvendige n. Vi samler inn:

./autogen.sh

./configure

make

Og installer med superbrukerrettigheter:

make install

Under installasjonen av kjernemoduler kan det oppstå en feil som ligner på følgende:

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

Denne situasjonen oppstår på grunn av umuligheten av å signere kjernemoduler, fordi ingenting å signere. Du kan løse dette problemet med et par kommandoer:

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

Den kompilerte kjernemodulen er installert, men systemet oppdager den ikke. La oss be systemet lage et avhengighetskart som tar hensyn til den nye modulen, og deretter laste den:

depmod -a

modprobe xt_geoip

La oss sørge for at xt_geoip er lastet inn i systemet:

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

Sørg i tillegg for at utvidelsen er lastet inn i iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Vi er fornøyd med alt og det gjenstår bare å legge til modulnavnet / etc / modulerslik at modulen fungerer etter omstart av OS. Fra nå av forstår iptables geoip-kommandoer, men den har ikke nok data å jobbe med. La oss begynne å laste geoip-databasen.

Få GeoIP-databasen

Vi oppretter en katalog der informasjon som er forståelig for iptables-utvidelsen vil bli lagret:

mkdir /usr/share/xt_geoip

I begynnelsen av artikkelen nevnte vi at det er forskjeller mellom versjonen fra kildekoden og versjonen fra pakkebehandlingen. Den mest merkbare forskjellen er endringen i databaseleverandør og skript xt_geoip_dl, som laster ned de nyeste dataene.

Pakkebehandlingsversjon

Skriptet ligger i banen /usr/lib/xtables-addons, men når du prøver å kjøre det, vil du se en lite informativ feil:

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

Tidligere ble GeoLite-produktet, nå kjent som GeoLite Legacy, distribuert under lisens, brukt som en database Creative Commons ASA 4.0 selskap MaxMind. To hendelser skjedde med dette produktet på en gang som "brøt" kompatibiliteten med iptables-utvidelsen.

For det første i januar 2018 kunngjort om oppsigelse av støtte for produktet, og 2019. januar 2 ble alle lenker til nedlasting av den gamle versjonen av databasen fjernet fra det offisielle nettstedet. Nye brukere anbefales å bruke GeoLite2-produktet eller dets betalte versjon GeoIPXNUMX.

For det andre, siden desember 2019 MaxMind han uttalte om en betydelig endring i tilgangen til databasene deres. For å overholde California Consumer Privacy Act, bestemte MaxMind seg for å "dekke" distribusjonen av GeoLite2 med registrering.

Siden vi ønsker å bruke deres produkt, vil vi registrere oss på denne siden.

xtables-addons: filtrer pakker etter land
Du vil da motta en e-post som ber deg angi et passord. Nå som vi har opprettet en konto, må vi opprette en lisensnøkkel. På din personlige konto finner vi varen Mine lisensnøkler, og klikk deretter på knappen Generer ny lisensnøkkel.

Når vi oppretter en nøkkel, blir vi bare stilt ett spørsmål: vil vi bruke denne nøkkelen i GeoIP Update-programmet? Vi svarer negativt og trykker på knappen Bekrefte. Nøkkelen vises i et popup-vindu. Lagre denne nøkkelen på et trygt sted, siden når du lukker popup-vinduet, vil du ikke lenger kunne se hele nøkkelen.

xtables-addons: filtrer pakker etter land
Vi har muligheten til å laste ned GeoLite2-databaser manuelt, men formatet deres er ikke kompatibelt med formatet som forventes av xt_geoip_build-skriptet. Det er her GeoLite2xtables-skriptene kommer til unnsetning. For å kjøre skript, installer NetAddr::IP perl-modulen:

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

Deretter kloner vi depotet med skript og skriver den tidligere oppnådde lisensnøkkelen til en fil:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

La oss kjøre skriptene:

# Скачиваем данные 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 pålegger en grense på 2000 nedlastinger per dag og tilbyr, med et stort antall servere, å cache oppdateringen på en proxy-server.

Vær oppmerksom på at utdatafilen må kalles dbip-country-lite.csv... Dessverre, 20_convert_geolite2 produserer ikke en perfekt fil. Manus xt_geoip_build forventer tre kolonner:

  • start av adresseområde;
  • slutten av adresseområdet;
  • landskode i iso-3166-alpha2.

Og utdatafilen inneholder seks kolonner:

  • start av adresseområde (strengrepresentasjon);
  • slutten av adresseområdet (strengrepresentasjon);
  • start av adresseområde (numerisk representasjon);
  • slutten av adresseområdet (numerisk representasjon);
  • landskode;
  • navnet på landet.

Dette avviket er kritisk og kan korrigeres på en av to måter:

  1. redigere 20_convert_geolite2;
  2. redigere xt_geoip_build.

I det første tilfellet reduserer vi printf til ønsket format, og i det andre - endrer vi tildelingen til variabelen $cc$row->[4]. Etter dette kan du bygge:

/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

Merk at forfatteren GeoLite2xtables anser ikke manusene som klare for produksjon og tilbyr spor for utvikling av originale xt_geoip_*-skript. La oss derfor gå videre til sammenstillingen fra kildekodene, der disse skriptene allerede er oppdatert.

Kildeversjon

Når du installerer fra kildekodeskript xt_geoip_* finnes i katalogen /usr/local/libexec/xtables-addons. Denne versjonen av skriptet bruker en database IP til Country Lite. Lisensen er Creative Commons Attribution License, og fra de tilgjengelige dataene er det de svært nødvendige tre kolonnene. Last ned og sett sammen databasen:

cd /usr/share/xt_geoip/

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

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

Etter disse trinnene er iptables klar til å fungere.

Bruker geoip i iptables

Modul xt_geoip legger bare til to nøkler:

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.

Metodene for å lage regler for iptables forblir generelt uendret. For å bruke nøkler fra tilleggsmoduler, må du eksplisitt spesifisere navnet på modulen med -m-bryteren. For eksempel en regel for å blokkere innkommende TCP-tilkoblinger på port 443 ikke fra USA på alle grensesnitt:

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

Filer opprettet av xt_geoip_build brukes kun ved opprettelse av regler, men tas ikke i betraktning ved filtrering. For å oppdatere geoip-databasen riktig, må du derfor først oppdatere iv*-filene, og deretter gjenskape alle reglene som bruker geoip i iptables.

Konklusjon

Filtrering av pakker basert på land er en strategi som er litt glemt av tiden. Til tross for dette utvikles programvareverktøy for slik filtrering, og kanskje snart vil en ny versjon av xt_geoip med en ny geoip-dataleverandør dukke opp i pakkeadministratorer, noe som vil forenkle livet til systemadministratorer.

xtables-addons: filtrer pakker etter land

Kun registrerte brukere kan delta i undersøkelsen. Logg inn, vær så snill.

Har du noen gang brukt filtrering etter land?

  • 59,1%Ja 13

  • 40,9%No9

22 brukere stemte. 3 brukere avsto.

Kilde: www.habr.com

Legg til en kommentar