Die taak om verkeer uit sekere lande te blokkeer, lyk eenvoudig, maar eerste indrukke kan bedrieglik wees. Vandag sal ons jou vertel hoe dit geïmplementeer kan word.
voorgeskiedenis
Die resultate van 'n Google-soektog oor hierdie onderwerp is teleurstellend: die meeste van die oplossings is lankal "vrot" en soms lyk dit of hierdie onderwerp vir altyd afgeskaf is en van vergeet is. Ons het deur baie ou rekords gefynkam en is gereed om 'n moderne weergawe van die instruksies te deel.
Ons beveel aan dat u die hele artikel lees voordat u hierdie opdragte uitvoer.
Berei die bedryfstelsel voor
Filtrering sal gekonfigureer word met die hulpprogram iptables, wat 'n uitbreiding vereis om met GeoIP-data te werk. Hierdie uitbreiding kan gevind word in
Met die skryf hiervan is die huidige weergawe van xtables-addons 3.9. Slegs 20.04 kan egter in die standaard Ubuntu 3.8 LTS-bewaarplekke gevind word, en 18.04 in die Ubuntu 3.0-bewaarplekke. U kan die uitbreiding vanaf die pakketbestuurder installeer met die volgende opdrag:
apt install xtables-addons-common libtext-csv-xs-perl
Let daarop dat daar klein maar belangrike verskille is tussen weergawe 3.9 en die huidige stand van die projek, wat ons later sal bespreek. Om van bronkode te bou, installeer al die nodige pakkette:
apt install git build-essential autoconf make libtool iptables-dev libxtables-dev pkg-config libnet-cidr-lite-perl libtext-csv-xs-perl
Kloon die bewaarplek:
git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons
cd xtables-addons-xtables-addons
xtables-addons bevat baie uitbreidings, maar ons stel net belang in xt_geoip. As jy nie onnodige uitbreidings na die stelsel wil sleep nie, kan jy dit uitsluit van die bou. Om dit te doen, moet jy die lêer wysig mconfig. Vir alle gewenste modules, installeer y, en merk alle onnodiges n. Ons versamel:
./autogen.sh
./configure
make
En installeer met supergebruikersregte:
make install
Tydens die installering van kernmodules kan 'n fout soortgelyk aan die volgende voorkom:
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
Hierdie situasie ontstaan as gevolg van die onmoontlikheid om kernmodules te onderteken, omdat niks om te teken nie. U kan hierdie probleem oplos met 'n paar opdragte:
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
Die saamgestelde kernmodule is geïnstalleer, maar die stelsel bespeur dit nie. Kom ons vra die stelsel om 'n afhanklikheidskaart te skep met inagneming van die nuwe module, en laai dit dan:
depmod -a
modprobe xt_geoip
Kom ons maak seker dat xt_geoip in die stelsel gelaai is:
# lsmod | grep xt_geoip
xt_geoip 16384 0
x_tables 40960 2 xt_geoip,ip_tables
Maak ook seker dat die uitbreiding in iptables gelaai is:
# cat /proc/net/ip_tables_matches
geoip
icmp
Ons is tevrede met alles en al wat oorbly is om die modulenaam by te voeg / ens / modulessodat die module werk nadat die bedryfstelsel herlaai is. Van nou af verstaan iptables geoip-opdragte, maar dit het nie genoeg data om mee te werk nie. Kom ons begin die geoip-databasis laai.
Kry die GeoIP-databasis
Ons skep 'n gids waarin inligting wat verstaanbaar is vir die iptables-uitbreiding gestoor sal word:
mkdir /usr/share/xt_geoip
Aan die begin van die artikel het ons genoem dat daar verskille is tussen die weergawe van die bronkode en die weergawe van die pakketbestuurder. Die opvallendste verskil is die verandering in databasisverskaffer en skrif xt_geoip_dl, wat die nuutste data aflaai.
Pakketbestuurder weergawe
Die skrip is geleë in die pad /usr/lib/xtables-addons, maar wanneer jy probeer om dit uit te voer, sal jy 'n nie baie insiggewende fout sien nie:
# ./xt_geoip_dl
unzip: cannot find or open GeoLite2-Country-CSV.zip, GeoLite2-Country-CSV.zip.zip or GeoLite2-Country-CSV.zip.ZIP.
Voorheen is die GeoLite-produk, nou bekend as GeoLite Legacy, onder lisensie versprei, as 'n databasis gebruik
Eerstens, in Januarie 2018
Tweedens, sedert Desember 2019 MaxMind
Aangesien ons hul produk wil gebruik, sal ons op hierdie bladsy registreer.
Jy sal dan 'n e-pos ontvang wat jou vra om 'n wagwoord in te stel. Noudat ons 'n rekening geskep het, moet ons 'n lisensiesleutel skep. In jou persoonlike rekening vind ons die item My lisensiesleutels, en klik dan op die knoppie Genereer nuwe lisensiesleutel.
Wanneer 'n sleutel geskep word, sal ons net een vraag gevra word: sal ons hierdie sleutel in die GeoIP Update-program gebruik? Ons antwoord negatief en druk die knoppie Bevestig. Die sleutel sal in 'n opspringvenster vertoon word. Stoor hierdie sleutel op 'n veilige plek, want sodra jy die opspringvenster toemaak, sal jy nie meer die hele sleutel kan sien nie.
Ons het die vermoë om GeoLite2-databasisse met die hand af te laai, maar hul formaat is nie versoenbaar met die formaat wat deur die xt_geoip_build-skrip verwag word nie. Dit is waar GeoLite2xtables-skrifte tot die redding kom. Om skrifte uit te voer, installeer die NetAddr::IP perl-module:
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
Vervolgens kloon ons die bewaarplek met skrifte en skryf die voorheen verkrygde lisensiesleutel na 'n lêer:
git clone https://github.com/mschmitt/GeoLite2xtables.git
cd GeoLite2xtables
echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license
Kom ons voer die skrifte uit:
# Скачиваем данные 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 stel 'n limiet van 2000 aflaaie per dag op en bied met 'n groot aantal bedieners aan om die opdatering op 'n instaanbediener te kas.
Neem asseblief kennis dat die uitvoerlêer geroep moet word dbip-country-lite.csv... Ongelukkig, 20_convert_geolite2 produseer nie 'n perfekte lêer nie. Skripsie xt_geoip_build verwag drie kolomme:
- begin van adresreeks;
- einde van adresreeks;
- landkode in iso-3166-alpha2.
En die uitvoerlêer bevat ses kolomme:
- begin van adresreeks (stringvoorstelling);
- einde van adresreeks (stringvoorstelling);
- begin van adresreeks (numeriese voorstelling);
- einde van adresreeks (numeriese voorstelling);
- land kode;
- die naam van die land.
Hierdie teenstrydigheid is krities en kan op een van twee maniere reggestel word:
- reël 20_convert_geolite2;
- reël xt_geoip_build.
In die eerste geval verminder ons
/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
Let daarop dat die skrywer
Bron weergawe
Wanneer u vanaf bronkode-skrifte installeer xt_geoip_* is in die katalogus geleë /usr/local/libexec/xtables-addons. Hierdie weergawe van die skrif gebruik 'n databasis
cd /usr/share/xt_geoip/
/usr/local/libexec/xtables-addons/xt_geoip_dl
/usr/local/libexec/xtables-addons/xt_geoip_build
Na hierdie stappe is iptables gereed om te werk.
Gebruik geoip in iptables
Module xt_geoip voeg slegs twee sleutels by:
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.
Die metodes om reëls vir iptables te skep, bly in die algemeen onveranderd. Om sleutels van bykomende modules te gebruik, moet jy die naam van die module uitdruklik spesifiseer met die -m skakelaar. Byvoorbeeld, 'n reël om inkomende TCP-verbindings op poort 443 nie van die VSA op alle koppelvlakke te blokkeer nie:
iptables -I INPUT ! -i lo -p tcp --dport 443 -m geoip ! --src-cc US -j DROP
Lêers wat deur xt_geoip_build geskep is, word slegs gebruik wanneer reëls geskep word, maar word nie in ag geneem wanneer dit gefiltreer word nie. Dus, om die geoip-databasis korrek op te dateer, moet jy eers die iv*-lêers bywerk, en dan al die reëls wat geoip in iptables gebruik, herskep.
Gevolgtrekking
Filtering van pakkies gebaseer op lande is 'n strategie wat ietwat deur die tyd vergeet is. Ten spyte hiervan word sagteware-instrumente vir sulke filtering ontwikkel en, miskien, binnekort sal 'n nuwe weergawe van xt_geoip met 'n nuwe geoip-dataverskaffer in pakketbestuurders verskyn, wat die lewe van stelseladministrateurs aansienlik sal vereenvoudig.
Slegs geregistreerde gebruikers kan aan die opname deelneem.
Het jy al ooit filter volgens land gebruik?
-
59,1%Ja 13
-
40,9%No9
22 gebruikers het gestem. 3 gebruikers het buite stemming gebly.
Bron: will.com