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
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
For det første i januar 2018
For det andet siden december 2019 MaxMind
Da vi ønsker at bruge deres produkt, tilmelder vi os på denne side.
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.
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:
- redigere 20_convert_geolite2;
- redigere xt_geoip_build.
I det første tilfælde reducerer vi
/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
Kildeversion
Når du installerer fra kildekodescripts xt_geoip_* findes i kataloget /usr/local/libexec/xtables-addons. Denne version af scriptet bruger en database
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.
Kun registrerede brugere kan deltage i undersøgelsen.
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