xtables-addons: filtrerar paket efter lÀnder

xtables-addons: filtrerar paket efter lÀnder
Uppgiften att blockera trafik frÄn vissa lÀnder verkar enkel, men första intrycket Àr missvisande. Idag ska vi berÀtta hur detta kan genomföras.

Bakgrund

Sökresultaten pÄ Google kring detta Àmne Àr nedslÄende: de flesta lösningar Àr sedan lÀnge "förÄldrade" och det verkar ibland som att detta Àmne har lagts Ät sidan för gott. Vi har "genomgÄtt" mÄnga gamla inlÀgg och Àr redo att dela med oss av en modern version av instruktionerna.

Vi rekommenderar att lÀsa hela artikeln innan du utför de angivna kommandona.

Förberedelse av operativsystemet

Filtrering kommer att konfigureras med hjÀlp av verktyget iptables, vilket krÀver en tillÀgg för att arbeta med GeoIP-data. SÄdana tillÀgg kan hittas i xtables-addons. xtables-addons installerar tillÀgg för iptables i form av fristÄende kÀrnmoduler, vilket gör att det inte behövs att kompilera om operativsystemets kÀrna.

Vid tidpunkten för artikelns skrivande var den aktuella versionen av xtables-addons — 3.9. Dock kan man endast hitta version 3.8 i de standardarkiven för Ubuntu 20.04 LTS, och i arkiven för Ubuntu 18.04 — 3.0. För att installera tillĂ€gget frĂ„n paketförvaltaren kan man anvĂ€nda följande kommando:

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

Vi noterar att det finns smÄ men viktiga skillnader mellan version 3.9 och det nuvarande tillstÄndet för projektet, som vi kommer att diskutera senare. För att bygga frÄn kÀllkoden installerar vi alla nödvÀndiga paket:

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

Vi klonar arkivet:

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

cd xtables-addons-xtables-addons

xtables-addons innehÄller mÄnga tillÀgg, men vi Àr intresserade av enbart xt_geoip. Om du inte vill ta in onödiga tillÀgg i systemet kan de exkluderas frÄn bygget. För detta mÄste filen mconfigredigeras. För alla önskade moduler sÀtter du y, och alla onödiga markerar du som n. Vi bygger:

./autogen.sh

./configure

make

Och installerar med superanvÀndarrÀttigheter:

make install

Under installationen av kÀrnmoduler kan ett fel av följande art uppstÄ:

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

En sÄdan situation uppstÄr pÄ grund av oförmÄgan att signera kÀrnmoduler, eftersom det saknas ett medel för att signera. Det gÄr att lösa detta problem med ett par kommandon:

cd /lib/modules/(uname -r)/build/certs

cat < 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 kompilerade kÀrnmodulen Àr installerad, men systemet kÀnner inte igen den. LÄt oss be systemet att skapa en beroendekarta som tar hÀnsyn till den nya modulen och sedan ladda den:

depmod -a

modprobe xt_geoip

Vi kontrollerar att xt_geoip har laddats in i systemet:

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

Dessutom kontrollerar vi att tillÀgget har laddats in i iptables:

# cat /proc/net/ip_tables_matches 
geoip
icmp

Vi Àr nöjda och det ÄterstÄr bara att lÀgga till modulens namn i /etc/modules, sÄ att modulen aktiveras efter omstart av operativsystemet. FrÄn och med nu förstÄr iptables geoip-kommandon, men det saknas data för att fungera. Vi börjar ladda ner geoip-databasen.

HĂ€mtar GeoIP-databasen

Vi skapar en katalog dÀr informationen, som tillÀgget iptables kan förstÄ, kommer att lagras:

mkdir /usr/share/xt_geoip

I början av artikeln nÀmnde vi att det finns skillnader mellan versionen frÄn kÀllkoden och versionen frÄn paketförvaltaren. Den mest mÀrkbara skillnaden Àr bytet av databasutgivare och skriptet xt_geoip_dl, som hÀmtar aktuella data.

Versionen frÄn paketförvaltaren

Skripten ligger pÄ vÀgen /usr/lib/xtables-addons, men vid ett försök att köra det kan man se ett mindre informativt felmeddelande:

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

Tidigare anvÀndes GeoLite-produktens databas, numera kÀnd som GeoLite Legacy, som distribuerades under licensen Creative Commons ASA 4.0 av företaget MaxMind. Med denna produkt intrÀffade tvÄ hÀndelser som "bröt" kompatibiliteten med tillÀgget för iptables.

För det första, i januari 2018 400 företag. Bland dessa finns bÄde smÄ startups och stora IT-företag. upphörde produkten att stödjas, och den andra januari 2019 togs alla lÀnkar till nedladdning av den gamla versionen bort frÄn den officiella webbplatsen. Nya anvÀndare rekommenderas att anvÀnda produkten GeoLite2 eller dess betalda version GeoIP2.

För det andra, frÄn och med december 2019 meddelade MaxMind att en betydande förÀndring i tillgÄngen till deras databaser. För att följa Kaliforniens lag om konsumentskydd beslutade MaxMind att "stÀnga" distributionen av GeoLite2 genom registrering.

Eftersom vi vill anvÀnda deras produkt, kommer vi att registrera oss pÄ denna sida.

xtables-addons: filtrerar paket efter lÀnder
EfterÄt kommer ett meddelande till din e-post med en begÀran om att stÀlla in ditt lösenord. Nu nÀr vi har skapat ett konto mÄste vi skapa en licensnyckel. I ditt personliga konto hittar du avsnittet Mina licensnycklar, och sedan klickar vi pÄ knappen Skapa ny licensnyckel.

Vid skapandet av nyckeln kommer vi att stÀllas en enda frÄga: kommer vi att anvÀnda denna nyckel i programmet GeoIP Update? Vi svarar nej och klickar pÄ knappen BekrÀfta. I popup-fönstret kommer nyckeln att visas. Spara denna nyckel pÄ en sÀker plats, eftersom du efter att popup-fönstret stÀngs inte lÀngre kan se nyckeln i sin helhet.

xtables-addons: filtrerar paket efter lÀnder
Vi har möjlighet att ladda ner GeoLite2-databaser manuellt, men deras format Àr inte kompatibelt med det format som skriptet xt_geoip_build förvÀntar sig. HÀr kommer skripten GeoLite2xtables till hjÀlp. För att fÄ skripten att fungera installerar vi perl-modulen NetAddr::IP:

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

DÀrefter klonar vi arkivet med skripten och skriver den tidigare erhÄllna licensnyckeln i en fil:

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

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

Vi kör skripten:

# ĐĄĐșачоĐČĐ°Đ”ĐŒ ĐŽĐ°ĐœĐœŃ‹Đ” 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 sÀtter en begrÀnsning pÄ 2000 nedladdningar per dag och vid ett stort antal servrar rekommenderar de att cacha uppdateringar pÄ en proxyserver.

Observera att utdatafilen mÄste heter dbip-country-lite.csv. TyvÀrr, 20_convert_geolite2 ger inte en perfekt fil. Skriptet xt_geoip_build förvÀntar sig tre kolumner:

  • början av adressintervallet;
  • slutet av adressintervallet;
  • lands kod i iso-3166-alpha2.

Och utdatafilen innehÄller sex kolumner:

  • början av adressintervallet (strĂ€ngrepresentation);
  • slutet av adressintervallet (strĂ€ngrepresentation);
  • början av adressintervallet (numerisk representation);
  • slutet av adressintervallet (numerisk representation);
  • lands kod;
  • landsnamn.

Denna inkonsekvens Àr kritisk och kan korrigeras pÄ ett av tvÄ sÀtt:

  1. reda ut 20_convert_geolite2;
  2. reda ut xt_geoip_build.

I det första fallet förkortar vi printf till rĂ€tt format, och i det andra — Ă€ndrar vi tilldelningen av variabeln $cc till $row->[4]. Efter det kan vi utföra sammanstĂ€llningen:

/usr/lib/xtables-addons/xt_geoip_build -S /usr/share/xt_geoip/ -D /usr/share/xt_geoip

. . .
 2239 IPv4-omrÄden för ZA
  348 IPv6-omrÄden för ZA
   56 IPv4-omrÄden för ZM
   12 IPv6-omrÄden för ZM
   56 IPv4-omrÄden för ZW
   15 IPv6-omrÄden för ZW

Vi noterar att författaren GeoLite2xtables inte anser att sina skript Àr redo för produktion och föreslÄr att hÄlla utkik för utvecklingen av originalskripten xt_geoip_*. SÄ vi gÄr vidare till att bygga frÄn kÀllkoden dÀr dessa skript redan har uppdaterats.

Version frÄn kÀllkoden

Vid installation frÄn kÀllkoden skripten xt_geoip_* finns i katalogen /usr/local/libexec/xtables-addons. I denna version av skriptet anvÀnds en databas IP to Country Lite. Licensen Àr Creative Commons Attribution License, och de tillgÀngliga data innehÄller just de tre nödvÀndiga kolumnerna. Ladda ner och samla databasen:

cd /usr/share/xt_geoip/

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

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

Efter dessa ÄtgÀrder Àr iptables redo för anvÀndning.

AnvÀnd geoip i iptables

Modul xt_geoip lÀgger till totalt tvÄ nycklar:

geoip matchalternativ:
[!] --src-cc, --source-country country[,country...]
	Matcha paket som kommer frÄn (en av) de angivna lÀnderna
[!] --dst-cc, --destination-country country[,country...]
	Matcha paket som gÄr till (ett av) de angivna lÀnderna

OBS: Landet anges med sin ISO3166-kod.

SÀtten att skapa regler för iptables förblir i stort sett oförÀndrade. För att anvÀnda nycklar frÄn ytterligare moduler mÄste namnet pÄ modulen anges tydligt med nyckeln -m. Till exempel, en regel för att blockera inkommande TCP-anslutningar pÄ port 443 frÄn icke-USA pÄ alla grÀnssnitt:

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

Filer skapade av xt_geoip_build anvÀnds endast vid skapandet av regler, men beaktas inte vid filtrering. SÄledes, för att korrekt uppdatera geoip-databasen, mÄste iv*-filerna uppdateras först, och sedan mÄste alla regler som anvÀnder geoip i iptables Äterskapas.

Slutsats

Filtrering av paket beroende pÄ landstillhörighet Àr en nÄgot bortglömd strategi. Trots detta utvecklas programvaruverktygen för sÄdan filtrering och inom kort kan det komma en ny version av xt_geoip med en ny leverantör av geoip-data i paketförvaltarna, vilket avsevÀrt skulle underlÀtta livet för systemadministratörer.

xtables-addons: filtrerar paket efter lÀnder

Endast registrerade anvÀndare kan delta i omröstningen. Logga in, tack.

Har du nÄgonsin anvÀnt filtrering baserat pÄ lÀnder?

  • 59,1%Ja13

  • 40,9%Nej9

22 anvÀndare har röstat. 3 anvÀndare har avstÄtt.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster