
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 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-perlVi 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-perlVi klonar arkivet:
git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons
cd xtables-addons-xtables-addonsxtables-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./configuremakeOch installerar med superanvÀndarrÀttigheter:
make installUnder 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 directoryEn 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/certscat < 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
EOFopenssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pemDen 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 -amodprobe xt_geoipVi kontrollerar att xt_geoip har laddats in i systemet:
# lsmod | grep xt_geoip
xt_geoip 16384 0
x_tables 40960 2 xt_geoip,ip_tablesDessutom kontrollerar vi att tillÀgget har laddats in i iptables:
# cat /proc/net/ip_tables_matches
geoip
icmpVi À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_geoipI 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 av företaget . 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 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 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.

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.

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.gztar xvf NetAddr-IP-4.079.tar.gzcd NetAddr-IP-4.079perl Makefile.PLmakemake installDÀrefter klonar vi arkivet med skripten och skriver den tidigare erhÄllna licensnyckeln i en fil:
git clone https://github.com/mschmitt/GeoLite2xtables.gitcd GeoLite2xtablesecho YOUR_LICENSE_KEY=â123ertyui123' > geolite2.licenseVi 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.csvMaxMind 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:
- reda ut 20_convert_geolite2;
- reda ut xt_geoip_build.
I det första fallet förkortar vi 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 ZWVi noterar att författaren inte anser att sina skript Àr redo för produktion och föreslÄr 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 . 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_buildEfter 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 DROPFiler 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.
Endast registrerade anvÀndare kan delta i omröstningen. , 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
