GeoLite2 та обмеження доступу лише для України
GeoLite2 — це безкоштовна база даних від MaxMind, яка надає базову інформацію про геолокацію IP‑адрес (країна, регіон, місто, ASN). Вона ідеальна для тестових проєктів, невеликих сайтів та аналітики, але має обмежену точність у порівнянні з комерційними GeoIP‑продуктами.
Основні можливості GeoLite2
- Безкоштовна база даних (Country, City, ASN)
- Формати: MMDB, CSV, Web Service
- Оновлення через ліцензійний ключ MaxMind
- Creative Commons ліцензія з атрибуцією
Порівняння GeoLite2 та GeoIP
| GeoLite2 | GeoIP |
|---|---|
| Безкоштовна | Платна (підписка) |
| Дані: країна, місто, ASN | Розширені дані: ISP, проксі, тип з’єднання, користувач |
| Обмежена точність | Вища точність, менший радіус похибки |
| Ліміти на завантаження та запити | Відсутність лімітів |
| Підходить для демо, невеликих проєктів | Підходить для комерційних застосунків (реклама, фінтех, безпека) |
Приклад налаштування на Apache2 (Debian)
Встановити модуль
mod_maxminddb:sudo apt update sudo apt install libmaxminddb0 libmaxminddb-dev mmdb-bin apache2-dev sudo pecl install maxminddbЗавантажити базу GeoLite2 Country:
wget "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=YOUR_KEY&suffix=tar.gz" -O GeoLite2-Country.tar.gz tar -xvzf GeoLite2-Country.tar.gz sudo mkdir -p /usr/share/GeoIP sudo cp GeoLite2-Country.mmdb /usr/share/GeoIP/Додати у VirtualHost:
<IfModule mod_maxminddb.c> MaxMindDBFile COUNTRYDB /usr/share/GeoIP/GeoLite2-Country.mmdb MaxMindDBEnv COUNTRYDB/Country/iso_code MM_COUNTRY_CODE </IfModule> <VirtualHost *:80> ServerName example.com <Location /> SetEnvIf MM_COUNTRY_CODE UA AllowedCountry Order Deny,Allow Deny from all Allow from env=AllowedCountry </Location> </VirtualHost>Перезапустити Apache:
sudo systemctl restart apache2
Налаштування firewalld
Встановити ipset:
sudo apt install ipsetЗавантажити список українських IP‑діапазонів:
wget https://www.ipdeny.com/ipblocks/data/countries/ua.zone -O ua.zone sudo ipset create ukraine hash:net for ip in $(cat ua.zone); do sudo ipset add ukraine $ip; doneДодати правила у firewalld:
sudo firewall-cmd --permanent --new-ipset=ukraine --type=hash:net sudo firewall-cmd --permanent --ipset=ukraine --add-entries-from-file=ua.zone sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source ipset="ukraine" accept' sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source not ipset="ukraine" drop' sudo firewall-cmd --reload
Автоматичний bash‑скрипт
Для регулярного оновлення українських IP‑діапазонів можна використати наступний скрипт:
#!/bin/bash
UA_ZONE_URL="https://www.ipdeny.com/ipblocks/data/countries/ua.zone"
UA_ZONE_FILE="/tmp/ua.zone"
wget -q $UA_ZONE_URL -O $UA_ZONE_FILE
sudo ipset list ukraine >/dev/null 2>&1
if [ $? -ne 0 ]; then
sudo ipset create ukraine hash:net
fi
sudo ipset flush ukraine
for ip in $(cat $UA_ZONE_FILE); do
sudo ipset add ukraine $ip
done
sudo firewall-cmd --permanent --delete-ipset=ukraine >/dev/null 2>&1
sudo firewall-cmd --permanent --new-ipset=ukraine --type=hash:net
sudo firewall-cmd --permanent --ipset=ukraine --add-entries-from-file=$UA_ZONE_FILE
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source ipset="ukraine" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source not ipset="ukraine" drop'
sudo firewall-cmd --reload
echo "✅ Доступ дозволено лише для українських IP-діапазонів"Висновок
GeoLite2 дозволяє інтегрувати геолокаційні обмеження у веб‑проєкти. У поєднанні з Apache2 та firewalld можна створити ефективний захист, який пропускає лише користувачів з України.


Коментувати