xtables-addons: пакеттерді ел бойынша сүзу

xtables-addons: пакеттерді ел бойынша сүзу
Белгілі бір елдерден келетін трафикті блоктау міндеті қарапайым болып көрінеді, бірақ алғашқы әсер алдамшы болуы мүмкін. Бүгін біз мұны қалай жүзеге асыруға болатынын айтамыз.

тарихын

Осы тақырып бойынша Google іздеуінің нәтижелері көңіл көншітпейді: шешімдердің көпшілігі бұрыннан «шірік» болды, кейде бұл тақырып сөреде қалып, мәңгілікке ұмытылған сияқты. Біз көптеген ескі жазбаларды талдадық және нұсқаулардың заманауи нұсқасын бөлісуге дайынбыз.

Осы пәрмендерді орындамас бұрын мақаланы толығымен оқып шығуды ұсынамыз.

Операциялық жүйені дайындау

Сүзгілеу қызметтік бағдарлама арқылы конфигурацияланады iptables, ол GeoIP деректерімен жұмыс істеу үшін кеңейтуді қажет етеді. Бұл кеңейтімді мына жерден табуға болады xtables-қосымшалар. xtables-addons тәуелсіз ядро ​​модульдері ретінде iptables кеңейтімдерін орнатады, сондықтан ОЖ ядросын қайта құрастырудың қажеті жоқ.

Жазу кезінде 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 дерекқорын алу

Біз 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 мұрасы ретінде белгілі GeoLite өнімі дерекқор ретінде пайдаланылды. Creative Commons ASA 4.0 компания бойынша MaxMind. Бұл өніммен бірден екі оқиға болды, ол iptables кеңейтімімен үйлесімділікті «бұзды».

Біріншіден, 2018 жылдың қаңтарында жариялады өнімге қолдау көрсетуді тоқтату туралы және 2019 жылдың 2 қаңтарында дерекқордың ескі нұсқасын жүктеп алуға барлық сілтемелер ресми веб-сайттан жойылды. Жаңа пайдаланушыларға GeoLite2 өнімін немесе оның GeoIPXNUMX ақылы нұсқасын пайдалану ұсынылады.

Екіншіден, 2019 жылдың желтоқсанынан бастап MaxMind деп мәлімдеді олардың дерекқорларына қол жеткізудегі елеулі өзгерістер туралы. Калифорниядағы тұтынушылардың құпиялылығы туралы заңға сәйкес болу үшін MaxMind GeoLite2 таратуды тіркеумен «жабуға» шешім қабылдады.

Біз олардың өнімін пайдаланғымыз келгендіктен, біз осы бетте тіркелеміз.

xtables-addons: пакеттерді ел бойынша сүзу
Содан кейін құпия сөзді орнатуды сұрайтын электрондық хат аласыз. Енді біз тіркелгіні жасадық, лицензия кілтін жасауымыз керек. Сіздің жеке кабинетіңізде біз элементті табамыз Менің лицензиялық кілттерім, содан кейін түймені басыңыз Жаңа лицензия кілтін жасаңыз.

Кілтті жасау кезінде бізге бір ғана сұрақ қойылады: бұл кілтті GeoIP Update бағдарламасында пайдаланамыз ба? Теріс жауап беріп, түймені басамыз растау. Кілт қалқымалы терезеде көрсетіледі. Бұл кілтті қауіпсіз жерде сақтаңыз, өйткені қалқымалы терезені жапқаннан кейін, сіз енді барлық кілтті көре алмайсыз.

xtables-addons: пакеттерді ел бойынша сүзу
Бізде 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_convert_geolite2 мінсіз файлды шығармайды. Сценарий xt_geoip_build үш баған күтеді:

  • мекенжай диапазонының басталуы;
  • мекенжай диапазонының соңы;
  • ел коды iso-3166-alpha2.

Ал шығыс файлында алты баған бар:

  • адрестер диапазонының басталуы (жолды көрсету);
  • мекенжай диапазонының соңы (жолды көрсету);
  • мекен-жай диапазонының басталуы (сандық бейнелеу);
  • мекенжай диапазонының соңы (сандық көрсету);
  • елдің коды;
  • елдің аты.

Бұл сәйкессіздік өте маңызды және оны екі жолдың бірімен түзетуге болады:

  1. билік құрды 20_convert_geolite2;
  2. билік құрды xt_geoip_build.

Бірінші жағдайда біз азайтамыз printf қажетті пішімге, ал екіншісінде – айнымалыға тағайындауды өзгертеміз $cc туралы $жол->[4]. Осыдан кейін сіз құрастыра аласыз:

/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

Автор екенін ескеріңіз GeoLite2xtables өз сценарийлерін өндіріске және ұсыныстарға дайын деп санамайды қадағалаңыз түпнұсқа xt_geoip_* сценарийлерін әзірлеу үшін. Сондықтан, осы сценарийлер жаңартылған бастапқы кодтардан құрастыруға көшейік.

Бастапқы нұсқа

Бастапқы код сценарийлерінен орнату кезінде xt_geoip_* каталогта орналасқан /usr/local/libexec/xtables-addons. Сценарийдің бұл нұсқасы дерекқорды пайдаланады IP to Country Lite. Лицензия Creative Commons Attribution License болып табылады және қол жетімді деректерден өте қажетті үш баған бар. Дерекқорды жүктеп алыңыз және жинаңыз:

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 пайдаланатын барлық ережелерді қайта жасау керек.

қорытынды

Елдер бойынша пакеттерді сүзу - уақыт өте ұмытылған стратегия. Осыған қарамастан, мұндай сүзгілеуге арналған бағдарламалық құралдар әзірленуде және, мүмкін, жақын арада пакет менеджерлерінде жаңа геоип деректер провайдері бар xt_geoip жаңа нұсқасы пайда болады, бұл жүйелік әкімшілердің өмірін айтарлықтай жеңілдетеді.

xtables-addons: пакеттерді ел бойынша сүзу

Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. Кіру, өтінемін.

Сіз ел бойынша сүзуді қолдандыңыз ба?

  • 59,1%Иә13

  • 40,9%№9

22 пайдаланушы дауыс берді. 3 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру