GeoLite2 та обмеження доступу лише для України

GeoLite2 та обмеження доступу лише для України

GeoLite2 — це безкоштовна база даних від MaxMind, яка надає базову інформацію про геолокацію IP‑адрес (країна, регіон, місто, ASN). Вона ідеальна для тестових проєктів, невеликих сайтів та аналітики, але має обмежену точність у порівнянні з комерційними GeoIP‑продуктами.

Основні можливості GeoLite2

  • Безкоштовна база даних (Country, City, ASN)
  • Формати: MMDB, CSV, Web Service
  • Оновлення через ліцензійний ключ MaxMind
  • Creative Commons ліцензія з атрибуцією

Порівняння GeoLite2 та GeoIP

GeoLite2GeoIP
БезкоштовнаПлатна (підписка)
Дані: країна, місто, ASNРозширені дані: ISP, проксі, тип з’єднання, користувач
Обмежена точністьВища точність, менший радіус похибки
Ліміти на завантаження та запитиВідсутність лімітів
Підходить для демо, невеликих проєктівПідходить для комерційних застосунків (реклама, фінтех, безпека)

Приклад налаштування на Apache2 (Debian)

  1. Встановити модуль mod_maxminddb:

    sudo apt update
    sudo apt install libmaxminddb0 libmaxminddb-dev mmdb-bin apache2-dev
    sudo pecl install maxminddb
  2. Завантажити базу 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/
  3. Додати у 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>
  4. Перезапустити Apache:

    sudo systemctl restart apache2

Налаштування firewalld

  1. Встановити ipset:

    sudo apt install ipset
  2. Завантажити список українських 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
  3. Додати правила у 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 можна створити ефективний захист, який пропускає лише користувачів з України.

Коментувати

Простий текст

  • Не дозволено жодних HTML теґів.
  • Рядки й абзаци переносяться автоматично.
  • Адреси вебсторінок та адреси електронної пошти автоматично перетворюються у посилання.