La tasko bloki trafikon de certaj landoj ŝajnas simpla, sed unuaj impresoj povas esti trompaj. Hodiaŭ ni rakontos al vi kiel ĉi tio povas esti efektivigita.
antaŭhistorio
La rezultoj de Guglo-serĉo pri ĉi tiu temo estas seniluziigaj: la plej multaj el la solvoj jam delonge estas "putraj" kaj foje ŝajnas, ke ĉi tiu temo estas arkivita kaj forgesita por ĉiam. Ni kombis multajn malnovajn rekordojn kaj pretas dividi modernan version de la instrukcioj.
Ni rekomendas, ke vi legu la tutan artikolon antaŭ ol ekzekuti ĉi tiujn komandojn.
Preparado de la operaciumo
Filtrado estos agordita per la ilo iptables, kiu postulas etendon por labori kun GeoIP-datumoj. Ĉi tiu etendo troveblas en
En la momento de skribado, la nuna versio de xtables-addons estas 3.9. Tamen, nur 20.04 troveblas en la normaj Ubuntu 3.8 LTS-deponejoj, kaj 18.04 en la Ubuntu 3.0-deponejoj. Vi povas instali la etendon de la pakadministranto per la jena komando:
apt install xtables-addons-common libtext-csv-xs-perl
Notu, ke estas malgrandaj sed gravaj diferencoj inter versio 3.9 kaj la nuna stato de la projekto, pri kiuj ni diskutos poste. Por konstrui el fontkodo, instalu ĉiujn necesajn pakaĵojn:
apt install git build-essential autoconf make libtool iptables-dev libxtables-dev pkg-config libnet-cidr-lite-perl libtext-csv-xs-perl
Klonu la deponejon:
git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons
cd xtables-addons-xtables-addons
xtables-addons enhavas multajn etendaĵojn, sed ni nur interesiĝas xt_geoip. Se vi ne volas treni nenecesajn etendaĵojn en la sistemon, vi povas ekskludi ilin de la konstruo. Por fari tion vi devas redakti la dosieron mconfig. Por ĉiuj dezirataj moduloj, instalu y, kaj marku ĉiujn nenecesajn n. Ni kolektas:
./autogen.sh
./configure
make
Kaj instalu kun superuzantrajtoj:
make install
Dum la instalado de kernaj moduloj, eraro simila al la sekvanta povas okazi:
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
Ĉi tiu situacio estiĝas pro la malebleco subskribi kernajn modulojn, ĉar nenio por subskribi. Vi povas solvi ĉi tiun problemon per kelkaj komandoj:
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
La kompilita kernomodulo estas instalita, sed la sistemo ne detektas ĝin. Ni petu la sistemon krei dependecan mapon konsiderante la novan modulon, kaj poste ŝarĝu ĝin:
depmod -a
modprobe xt_geoip
Ni certigu, ke xt_geoip estas ŝarĝita en la sistemon:
# lsmod | grep xt_geoip
xt_geoip 16384 0
x_tables 40960 2 xt_geoip,ip_tables
Aldone, certigu, ke la etendaĵo estas ŝarĝita en iptables:
# cat /proc/net/ip_tables_matches
geoip
icmp
Ni estas feliĉaj pri ĉio kaj restas nur aldoni la modulan nomon al / etc / modulespor ke la modulo funkciu post rekomenco de la OS. De nun, iptables komprenas geoip-komandojn, sed ĝi ne havas sufiĉajn datumojn por labori. Ni komencu ŝargi la geoip-datumbazon.
Akirante la GeoIP-Datumbazon
Ni kreas dosierujon, en kiu estos konservitaj informoj kompreneblaj por la etendo iptables:
mkdir /usr/share/xt_geoip
Komence de la artikolo, ni menciis, ke estas diferencoj inter la versio de la fontkodo kaj la versio de la pakaĵa administranto. La plej rimarkinda diferenco estas la ŝanĝo en datumbaza vendisto kaj skripto xt_geoip_dl, kiu elŝutas la plej novajn datumojn.
Pakaĵmanaĝera versio
La skripto troviĝas en la vojo /usr/lib/xtables-addons, sed kiam vi provos ruli ĝin, vi vidos ne tre informan eraron:
# ./xt_geoip_dl
unzip: cannot find or open GeoLite2-Country-CSV.zip, GeoLite2-Country-CSV.zip.zip or GeoLite2-Country-CSV.zip.ZIP.
Antaŭe, la produkto GeoLite, nun konata kiel GeoLite Legacy, distribuita sub licenco, estis utiligita kiel datumbazo
Unue, en januaro 2018
Due, ekde decembro 2019 MaxMind
Ĉar ni volas uzi ilian produkton, ni registriĝos sur ĉi tiu paĝo.
Vi tiam ricevos retpoŝton petante vin agordi pasvorton. Nun kiam ni kreis konton, ni devas krei permesilon-ŝlosilon. En via persona konto ni trovas la objekton Miaj Licencaj Ŝlosiloj, kaj poste alklaku la butonon Generu novan Licencan Ŝlosilon.
Kreante ŝlosilon, ni demandos nur unu demandon: ĉu ni uzos ĉi tiun ŝlosilon en la programo GeoIP Update? Ni respondas negative kaj premas la butonon konfirmi. La ŝlosilo estos montrata en ŝprucfenestro. Konservu ĉi tiun ŝlosilon en sekura loko, ĉar post kiam vi fermos la ŝprucfenestron, vi ne plu povos vidi la tutan ŝlosilon.
Ni havas la kapablon elŝuti GeoLite2 datumbazoj permane, sed ilia formato ne estas kongrua kun la formato atendita de la xt_geoip_build skripto. Jen kie GeoLite2xtables-skriptoj venas al la savo. Por ruli skriptojn, instalu la NetAddr::IP perl-modulon:
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
Poste, ni klonas la deponejon per skriptoj kaj skribas la antaŭe akiritan permesilan ŝlosilon al dosiero:
git clone https://github.com/mschmitt/GeoLite2xtables.git
cd GeoLite2xtables
echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license
Ni rulu la skriptojn:
# Скачиваем данные 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 trudas limon de 2000 elŝutoj tage kaj, kun granda nombro da serviloj, ofertas konservi la ĝisdatigon en prokura servilo.
Bonvolu noti, ke la eligodosiero devas esti nomita dbip-country-lite.csv... Bedaŭrinde, 20_konverti_geolito2 ne produktas perfektan dosieron. Skripto xt_geoip_build atendas tri kolumnojn:
- komenco de adresaro;
- fino de adresaro;
- landokodo en iso-3166-alpha2.
Kaj la eligdosiero enhavas ses kolumnojn:
- komenco de adresamplekso (ŝnureprezento);
- fino de adresamplekso (ŝnureprezento);
- komenco de adresaro (numera prezento);
- fino de adresaro (numera prezento);
- kodo de la lando;
- la nomo de la lando.
Tiu diferenco estas kritika kaj povas esti korektita en unu el du manieroj:
- reĝado 20_konverti_geolito2;
- reĝado xt_geoip_build.
En la unua kazo, ni reduktas
/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
Notu ke la aŭtoro
Fontversio
Kiam oni instalas el fontkodaj skriptoj xt_geoip_* troviĝas en la katalogo /usr/local/libexec/xtables-addons. Ĉi tiu versio de la skripto uzas datumbazon
cd /usr/share/xt_geoip/
/usr/local/libexec/xtables-addons/xt_geoip_dl
/usr/local/libexec/xtables-addons/xt_geoip_build
Post ĉi tiuj paŝoj, iptables estas preta funkcii.
Uzante geoip en iptables
Modulo xt_geoip aldonas nur du ŝlosilojn:
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.
La metodoj por krei regulojn por iptables, ĝenerale, restas senŝanĝaj. Por uzi klavojn de pliaj moduloj, vi devas eksplicite specifi la nomon de la modulo per la -m ŝaltilo. Ekzemple, regulo por bloki envenantajn TCP-konegojn sur haveno 443 ne de Usono sur ĉiuj interfacoj:
iptables -I INPUT ! -i lo -p tcp --dport 443 -m geoip ! --src-cc US -j DROP
Dosieroj kreitaj de xt_geoip_build estas uzataj nur dum kreado de reguloj, sed ne estas konsiderataj dum filtrado. Tiel, por ĝuste ĝisdatigi la geoip-datumbazon, vi unue devas ĝisdatigi la iv*-dosierojn, kaj poste rekrei ĉiujn regulojn, kiuj uzas geoip en iptables.
konkludo
Filtri pakojn bazitajn sur landoj estas strategio iom forgesita de tempo. Malgraŭ tio, oni ellaboras programajn ilojn por tia filtrado kaj, eble, baldaŭ nova versio de xt_geoip kun nova geoip-datumprovizanto aperos en pakaĵadministriloj, kio multe simpligos la vivon de sistemaj administrantoj.
Nur registritaj uzantoj povas partopreni la enketon.
Ĉu vi iam uzis filtradon laŭ lando?
-
59,1%Jes13
-
40,9%No9
22 uzantoj voĉdonis. 3 uzantoj sindetenis.
fonto: www.habr.com