Зарим улсаас ирж буй замын хөдөлгөөнийг хаах ажил нь энгийн мэт боловч анхны сэтгэгдэл нь хууран мэхлэх болно. Өнөөдөр бид үүнийг хэрхэн хэрэгжүүлэх талаар танд хэлэх болно.
Эрьт урьдын түүх
Энэ сэдвээр Google хайлтын үр дүн сэтгэл дундуур байна: ихэнх шийдлүүд удаан хугацаанд "ялзарсан" байсан бөгөөд заримдаа энэ сэдвийг хааж, үүрд мартсан мэт санагддаг. Бид олон тооны хуучин бичлэгүүдийг самнасан бөгөөд зааврын орчин үеийн хувилбарыг хуваалцахад бэлэн байна.
Эдгээр тушаалуудыг гүйцэтгэхийн өмнө нийтлэлийг бүхэлд нь уншихыг зөвлөж байна.
Үйлдлийн системийг бэлтгэж байна
Хэрэгслийг ашиглан шүүлтүүрийг тохируулах болно iptables, энэ нь GeoIP өгөгдөлтэй ажиллахын тулд өргөтгөл шаарддаг. Энэ өргөтгөлийг эндээс олж болно
Үүнийг бичиж байх үед xtables-addons-ийн одоогийн хувилбар нь 3.9 юм. Гэсэн хэдий ч, Ubuntu 20.04 LTS стандарт хадгалах сангаас зөвхөн 3.8, Ubuntu 18.04 хадгалах сангаас 3.0-ыг л олж болно. Та дараах тушаалыг ашиглан багц менежерээс өргөтгөлийг суулгаж болно.
apt install xtables-addons-common libtext-csv-xs-perl
3.9 хувилбар болон төслийн одоогийн төлөвийн хооронд жижиг боловч чухал ялгаа байгааг анхаарна уу, бид үүнийг дараа хэлэлцэх болно. Эх кодоос бүтээхийн тулд шаардлагатай бүх багцыг суулгана уу:
apt install git build-essential autoconf make libtool iptables-dev libxtables-dev pkg-config libnet-cidr-lite-perl libtext-csv-xs-perl
Хадгалах газрыг клон хийх:
git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons
cd xtables-addons-xtables-addons
xtables-addons нь олон өргөтгөлүүдийг агуулдаг боловч бид зөвхөн сонирхдог xt_geoip. Хэрэв та шаардлагагүй өргөтгөлүүдийг систем рүү татахыг хүсэхгүй байгаа бол тэдгээрийг бүтээхээс хасаж болно. Үүнийг хийхийн тулд та файлыг засах хэрэгтэй mconfig. Хүссэн бүх модулиудын хувьд суулгана уу y, мөн шаардлагагүй бүх зүйлийг тэмдэглэ n. Бид цуглуулдаг:
./autogen.sh
./configure
make
Мөн супер хэрэглэгчийн эрхээр суулгана уу:
make install
Цөмийн модулиудыг суулгах явцад дараахтай төстэй алдаа гарч болно.
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
Энэ нөхцөл байдал нь цөмийн модулиудад гарын үсэг зурах боломжгүйгээс үүсдэг, учир нь гарын үсэг зурах зүйл алга. Та энэ асуудлыг хэд хэдэн тушаалаар шийдэж болно:
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
Эмхэтгэсэн цөмийн модулийг суулгасан боловч систем үүнийг илрүүлдэггүй. Системээс шинэ модулийг харгалзан хараат байдлын газрын зураг үүсгэхийг хүсч, дараа нь ачаалъя:
depmod -a
modprobe xt_geoip
xt_geoip системд ачаалагдсан эсэхийг шалгацгаая:
# lsmod | grep xt_geoip
xt_geoip 16384 0
x_tables 40960 2 xt_geoip,ip_tables
Нэмж хэлэхэд, өргөтгөл iptables-д ачаалагдсан эсэхийг шалгаарай:
# cat /proc/net/ip_tables_matches
geoip
icmp
Бид бүх зүйлд сэтгэл хангалуун байгаа бөгөөд модулийн нэрийг нэмэх л үлдлээ / etc / модулиудИнгэснээр модуль нь үйлдлийн системийг дахин ачаалсны дараа ажиллах болно. Одооноос iptables нь geoip командуудыг ойлгож байгаа ч ажиллахад хангалттай өгөгдөл байхгүй. Geoip мэдээллийн санг ачаалж эхэлцгээе.
GeoIP мэдээллийн санг авч байна
Бид iptables өргөтгөлд ойлгомжтой мэдээлэл хадгалагдах лавлах үүсгэнэ.
mkdir /usr/share/xt_geoip
Өгүүллийн эхэнд бид эх кодын хувилбар болон багц менежерийн хувилбаруудын хооронд ялгаа байгааг дурдсан. Хамгийн мэдэгдэхүйц ялгаа нь өгөгдлийн сангийн үйлдвэрлэгч болон скриптийн өөрчлөлт юм xt_geoip_dl, хамгийн сүүлийн үеийн өгөгдлийг татаж авдаг.
Багц менежерийн хувилбар
Скрипт нь /usr/lib/xtables-addons замд байрладаг боловч та үүнийг ажиллуулахыг оролдох үед та тийм ч мэдээлэлгүй алдааг харах болно:
# ./xt_geoip_dl
unzip: cannot find or open GeoLite2-Country-CSV.zip, GeoLite2-Country-CSV.zip.zip or GeoLite2-Country-CSV.zip.ZIP.
Өмнө нь лицензийн дагуу тараагдсан GeoLite Legacy гэгддэг GeoLite бүтээгдэхүүнийг мэдээллийн сан болгон ашигладаг байсан.
Нэгдүгээрт, 2018 оны нэгдүгээр сард
Хоёрдугаарт, 2019 оны арванхоёрдугаар сараас хойш MaxMind
Бид тэдний бүтээгдэхүүнийг ашиглахыг хүсч байгаа тул бид энэ хуудсанд бүртгүүлэх болно.
Дараа нь та нууц үгээ тохируулахыг хүссэн имэйл хүлээн авах болно. Одоо бид данс үүсгэсэн тул лицензийн түлхүүр үүсгэх хэрэгтэй. Таны хувийн дансанд бид тухайн зүйлийг олдог Миний лицензийн түлхүүрүүд, дараа нь товчлуур дээр дарна уу Шинэ лицензийн түлхүүр үүсгэх.
Түлхүүр үүсгэх үед бид зөвхөн нэг асуулт асуух болно: бид энэ түлхүүрийг GeoIP Update програмд ашиглах уу? Бид сөрөг хариулт өгч, товчлуурыг дарна баталгаажуул. Түлхүүрийг гарч ирэх цонхонд харуулах болно. Энэ түлхүүрийг аюулгүй газар хадгалаарай, учир нь та гарч ирэх цонхыг хаасны дараа та түлхүүрийг бүхэлд нь харах боломжгүй болно.
Бид GeoLite2 мэдээллийн санг гараар татаж авах боломжтой боловч тэдгээрийн формат нь xt_geoip_build скриптийн хүлээгдэж буй форматтай нийцэхгүй байна. Энд GeoLite2xtables скриптүүд аврах ажилд ирдэг. Скриптүүдийг ажиллуулахын тулд NetAddr::IP perl модулийг суулгана уу:
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
Дараа нь бид репозиторыг скриптээр клончилж, өмнө нь олж авсан лицензийн түлхүүрийг файлд бичнэ.
git clone https://github.com/mschmitt/GeoLite2xtables.git
cd GeoLite2xtables
echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license
Скриптүүдийг ажиллуулцгаая:
# Скачиваем данные 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 нь өдөрт 2000 татаж авах хязгаарлалт тавьдаг бөгөөд олон тооны серверүүд нь прокси сервер дээр шинэчлэлтийг кэш хийхийг санал болгодог.
Гаралтын файлыг дуудах ёстой гэдгийг анхаарна уу dbip-country-lite.csv... Харамсалтай нь 20_геолитыг_хувиргах2 төгс файл үүсгэдэггүй. Скрипт xt_geoip_build гурван багана хүлээж байна:
- хаягийн хүрээний эхлэл;
- хаягийн хүрээний төгсгөл;
- iso-3166-alpha2 дахь улсын код.
Мөн гаралтын файл нь зургаан багана агуулдаг:
- хаягийн хүрээний эхлэл (мөрт дүрслэл);
- хаягийн хүрээний төгсгөл (мөрт дүрслэл);
- хаягийн хүрээний эхлэл (тоон дүрслэл);
- хаягийн хүрээний төгсгөл (тоон дүрслэл);
- тухайн улсын код;
- улсын нэр.
Энэ зөрүү нь маш чухал бөгөөд хоёр аргын аль нэгээр засч залруулж болно.
- засварлах 20_геолитыг_хувиргах2;
- засварлах xt_geoip_build.
Эхний тохиолдолд бид багасгадаг
/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
Зохиогч гэдгийг анхаарна уу
Эх хувилбар
Эх кодын скриптүүдээс суулгах үед xt_geoip_* каталогт байрладаг /usr/local/libexec/xtables-addons. Скриптийн энэ хувилбар нь мэдээллийн санг ашигладаг
cd /usr/share/xt_geoip/
/usr/local/libexec/xtables-addons/xt_geoip_dl
/usr/local/libexec/xtables-addons/xt_geoip_build
Эдгээр алхмуудын дараа iptables ажиллахад бэлэн болно.
iptables дээр geoip ашиглах
Модуль xt_geoip зөвхөн хоёр түлхүүр нэмнэ:
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.
IPtables-д зориулсан дүрмийг бий болгох аргууд ерөнхийдөө өөрчлөгдөөгүй хэвээр байна. Нэмэлт модулиудын түлхүүрүүдийг ашиглахын тулд та модулийн нэрийг -m шилжүүлэгчээр тодорхой зааж өгөх ёстой. Жишээлбэл, бүх интерфейс дээр АНУ-аас биш 443 порт дээр ирж буй TCP холболтыг хаах дүрэм:
iptables -I INPUT ! -i lo -p tcp --dport 443 -m geoip ! --src-cc US -j DROP
Xt_geoip_build-ийн үүсгэсэн файлуудыг зөвхөн дүрэм үүсгэх үед ашигладаг боловч шүүж байхдаа харгалздаггүй. Тиймээс, geoip мэдээллийн санг зөв шинэчлэхийн тулд эхлээд iv* файлуудыг шинэчилж, дараа нь iptables дээр geoip ашигладаг бүх дүрмийг дахин үүсгэх хэрэгтэй.
дүгнэлт
Улс орнуудад үндэслэн пакетуудыг шүүх нь цаг хугацааны явцад мартагдсан стратеги юм. Гэсэн хэдий ч ийм шүүлтүүр хийх програм хангамжийн хэрэгслүүдийг боловсруулж байгаа бөгөөд магадгүй удахгүй багц менежерүүдэд шинэ geoip өгөгдөл нийлүүлэгчтэй xt_geoip-ийн шинэ хувилбар гарч ирэх бөгөөд энэ нь системийн администраторуудын амьдралыг ихээхэн хөнгөвчлөх болно.
Зөвхөн бүртгэлтэй хэрэглэгчид санал асуулгад оролцох боломжтой.
Та хэзээ нэгэн цагт улсаар нь шүүж үзсэн үү?
-
59,1%Тийм 13
-
40,9%Үгүй 9
22 хэрэглэгч санал өгсөн. 3 хэрэглэгч түдгэлзсэн.
Эх сурвалж: www.habr.com