xtables-addons: filtrer pakker efter land

xtables-addons: filtrer pakker efter land
Opgaven med at blokere trafik fra visse lande virker simpel, men førstehåndsindtryk kan være vildledende. I dag vil vi fortælle dig, hvordan dette kan implementeres.

forhistorie

Resultaterne af en Google-søgning om dette emne er skuffende: de fleste af løsningerne har længe været "rådne", og nogle gange ser det ud til, at dette emne er blevet skrinlagt og glemt for evigt. Vi har gennemgået en masse gamle optegnelser og er klar til at dele en moderne version af instruktionerne.

Vi anbefaler, at du læser hele artiklen, før du udfører disse kommandoer.

Klargøring af operativsystem

Filtrering vil blive konfigureret ved hjælp af hjælpeprogrammet iptables, som kræver en udvidelse for at arbejde med GeoIP-data. Denne udvidelse kan findes i xtables-tilføjelser. xtables-addons installerer udvidelser til iptables som uafhængige kernemoduler, så der er ingen grund til at omkompilere OS-kernen.

I skrivende stund er den aktuelle version af xtables-addons 3.9. Dog kan kun 20.04 findes i standard Ubuntu 3.8 LTS repositories og 18.04 i Ubuntu 3.0 repositories. Du kan installere udvidelsen fra pakkehåndteringen med følgende kommando:

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

Bemærk, at der er små, men vigtige forskelle mellem version 3.9 og den aktuelle tilstand af projektet, som vi vil diskutere senere. For at bygge fra kildekode skal du installere alle de 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 indeholder mange udvidelser, men vi er kun interesserede i xt_geoip. Hvis du ikke vil trække unødvendige udvidelser ind i systemet, kan du ekskludere dem fra buildet. For at gøre dette skal du redigere filen mconfig. For alle ønskede moduler, installer y, og marker alle unødvendige n. Vi indsamler:

./autogen.sh

./configure

make

Og installer med superbrugerrettigheder:

make install

Under installationen af ​​kernemoduler kan der opstå en fejl svarende til 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 situation opstår på grund af umuligheden af ​​at signere kernemoduler, fordi intet at skrive under på. Du kan løse dette problem 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

Det kompilerede kernemodul er installeret, men systemet registrerer det ikke. Lad os bede systemet om at oprette et afhængighedskort under hensyntagen til det nye modul og derefter indlæse det:

depmod -a

modprobe xt_geoip

Lad os sørge for, at xt_geoip er indlæst i systemet:

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

Sørg desuden for, at udvidelsen er indlæst i iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Vi er glade for alt, og der er kun tilbage at tilføje modulnavnet / etc / modulerså modulet virker efter genstart af OS. Fra nu af forstår iptables geoip-kommandoer, men det har ikke nok data til at arbejde med. Lad os begynde at indlæse geoip-databasen.

Hent GeoIP-databasen

Vi opretter en mappe, hvori oplysninger, der er forståelige for iptables-udvidelsen, vil blive gemt:

mkdir /usr/share/xt_geoip

I begyndelsen af ​​artiklen nævnte vi, at der er forskelle mellem versionen fra kildekoden og versionen fra pakkehåndteringen. Den mest bemærkelsesværdige forskel er ændringen i databaseleverandør og script xt_geoip_dl, som downloader de seneste data.

Pakkeadministrator version

Scriptet er placeret i stien /usr/lib/xtables-addons, men når du prøver at køre det, vil du se en ikke særlig informativ fejl:

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

Tidligere blev GeoLite-produktet, nu kendt som GeoLite Legacy, distribueret under licens, brugt som en database Creative Commons ASA 4.0 selskab MaxMind. To begivenheder skete med dette produkt på én gang, der "brød" kompatibiliteten med iptables-udvidelsen.

For det første i januar 2018 annonceret om opsigelse af support til produktet, og den 2019. januar 2 blev alle links til at downloade den gamle version af databasen fjernet fra den officielle hjemmeside. Nye brugere anbefales at bruge GeoLite2-produktet eller dets betalte version GeoIPXNUMX.

For det andet siden december 2019 MaxMind Han udtalte om en væsentlig ændring i adgangen til deres databaser. For at overholde California Consumer Privacy Act besluttede MaxMind at "dække" distributionen af ​​GeoLite2 med registrering.

Da vi ønsker at bruge deres produkt, tilmelder vi os på denne side.

xtables-addons: filtrer pakker efter land
Du vil derefter modtage en e-mail, hvor du bliver bedt om at angive en adgangskode. Nu hvor vi har oprettet en konto, skal vi oprette en licensnøgle. På din personlige konto finder vi varen Mine licensnøgler, og klik derefter på knappen Generer ny licensnøgle.

Når vi opretter en nøgle, bliver vi kun stillet ét spørgsmål: vil vi bruge denne nøgle i GeoIP Update-programmet? Vi svarer negativt og trykker på knappen Bekræfte. Nøglen vil blive vist i et pop op-vindue. Gem denne nøgle et sikkert sted, da du ikke længere vil kunne se hele nøglen, når du lukker pop op-vinduet.

xtables-addons: filtrer pakker efter land
Vi har mulighed for at downloade GeoLite2-databaser manuelt, men deres format er ikke kompatibelt med det format, der forventes af xt_geoip_build-scriptet. Det er her GeoLite2xtables scripts kommer til undsætning. For at køre scripts skal du installere NetAddr::IP perl-modulet:

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

Dernæst kloner vi lageret med scripts og skriver den tidligere opnåede licensnøgle til en fil:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Lad os køre scripts:

# Скачиваем данные 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ålægger en grænse på 2000 downloads om dagen og tilbyder med et stort antal servere at cache opdateringen på en proxyserver.

Bemærk venligst, at outputfilen skal kaldes dbip-country-lite.csv... Desværre, 20_convert_geolite2 producerer ikke en perfekt fil. Manuskript xt_geoip_build forventer tre kolonner:

  • start af adresseområde;
  • slutningen af ​​adresseområdet;
  • landekode i iso-3166-alpha2.

Og outputfilen indeholder seks kolonner:

  • start af adresseområde (strengrepræsentation);
  • slutningen af ​​adresseområdet (strengrepræsentation);
  • start af adresseområde (numerisk repræsentation);
  • slutningen af ​​adresseområdet (numerisk repræsentation);
  • landets kode;
  • landets navn.

Denne uoverensstemmelse er kritisk og kan korrigeres på en af ​​to måder:

  1. redigere 20_convert_geolite2;
  2. redigere xt_geoip_build.

I det første tilfælde reducerer vi printf til det krævede format, og i det andet - ændrer vi tildelingen til variablen $cc$row->[4]. Herefter 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

Bemærk at forfatteren GeoLite2xtables anser ikke sine manuskripter for klar til produktion og tilbyder spore til udvikling af originale xt_geoip_* scripts. Lad os derfor gå videre til samlingen fra kildekoder, hvor disse scripts allerede er blevet opdateret.

Kildeversion

Når du installerer fra kildekodescripts xt_geoip_* findes i kataloget /usr/local/libexec/xtables-addons. Denne version af scriptet bruger en database IP til Country Lite. Licensen er Creative Commons Attribution License, og ud fra de tilgængelige data er der de meget nødvendige tre kolonner. Download og saml databasen:

cd /usr/share/xt_geoip/

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

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

Efter disse trin er iptables klar til at fungere.

Bruger geoip i iptables

Modul xt_geoip tilføjer kun to nøgler:

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.

Metoderne til at oprette regler for iptables forbliver generelt uændrede. For at bruge nøgler fra yderligere moduler, skal du udtrykkeligt angive navnet på modulet med -m switchen. For eksempel en regel for at blokere indgående TCP-forbindelser på port 443, ikke fra USA på alle grænseflader:

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

Filer oprettet af xt_geoip_build bruges kun ved oprettelse af regler, men tages ikke i betragtning ved filtrering. For at opdatere geoip-databasen korrekt, skal du først opdatere iv*-filerne og derefter genskabe alle de regler, der bruger geoip i iptables.

Konklusion

Filtrering af pakker baseret på lande er en strategi, der er lidt glemt af tiden. På trods af dette udvikles softwareværktøjer til sådan filtrering, og måske snart vil en ny version af xt_geoip med en ny geoip-dataudbyder dukke op i pakkeadministratorer, hvilket i høj grad vil forenkle livet for systemadministratorer.

xtables-addons: filtrer pakker efter land

Kun registrerede brugere kan deltage i undersøgelsen. Log ind, Vær venlig.

Har du nogensinde brugt filtrering efter land?

  • 59,1 %Ja 13

  • 40,9 %Nr 9

22 brugere stemte. 3 brugere undlod at stemme.

Kilde: www.habr.com

Tilføj en kommentar