Белгілі бір елдерден келетін трафикті блоктау міндеті қарапайым болып көрінеді, бірақ алғашқы әсер алдамшы болуы мүмкін. Бүгін біз мұны қалай жүзеге асыруға болатынын айтамыз.
тарихын
Осы тақырып бойынша 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 дерекқорын алу
Біз 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 өнімі дерекқор ретінде пайдаланылды.
Біріншіден, 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_convert_geolite2 мінсіз файлды шығармайды. Сценарий xt_geoip_build үш баған күтеді:
- мекенжай диапазонының басталуы;
- мекенжай диапазонының соңы;
- ел коды iso-3166-alpha2.
Ал шығыс файлында алты баған бар:
- адрестер диапазонының басталуы (жолды көрсету);
- мекенжай диапазонының соңы (жолды көрсету);
- мекен-жай диапазонының басталуы (сандық бейнелеу);
- мекенжай диапазонының соңы (сандық көрсету);
- елдің коды;
- елдің аты.
Бұл сәйкессіздік өте маңызды және оны екі жолдың бірімен түзетуге болады:
- билік құрды 20_convert_geolite2;
- билік құрды 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 пайдаланатын барлық ережелерді қайта жасау керек.
қорытынды
Елдер бойынша пакеттерді сүзу - уақыт өте ұмытылған стратегия. Осыған қарамастан, мұндай сүзгілеуге арналған бағдарламалық құралдар әзірленуде және, мүмкін, жақын арада пакет менеджерлерінде жаңа геоип деректер провайдері бар xt_geoip жаңа нұсқасы пайда болады, бұл жүйелік әкімшілердің өмірін айтарлықтай жеңілдетеді.
Сауалнамаға тек тіркелген пайдаланушылар қатыса алады.
Сіз ел бойынша сүзуді қолдандыңыз ба?
-
59,1%Иә13
-
40,9%№9
22 пайдаланушы дауыс берді. 3 пайдаланушы қалыс қалды.
Ақпарат көзі: www.habr.com