Geo-blocking в nginx через ngx_http_geoip2_module + MaxMind GeoLite2 database. Lookup IP → country code → allow/deny через map или if. Полезно для compliance (GDPR, sanctions), reducing bot traffic. Минусы: VPN легко обходит, legitimate travellers блокируются, MaxMind требует регистрации (free tier OK).
Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.
Бесплатный онлайн-инструмент — сканер безопасности сайта: результат мгновенно, без регистрации.
apt install libnginx-mod-http-geoip2geoip2 /path/GeoLite2-Country.mmdb { $geoip_country_code country iso_code; }map $geoip_country_code $blocked { default 0; CN 1; RU 1; }if ($blocked) { return 403; }geoipupdate daemon (monthly)curl -H "X-Forwarded-For: 1.2.3.4" https://example.com| Сценарий | Конфиг |
|---|---|
| Basic country blocking | # nginx.conf http:
geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
$geoip_country_code country iso_code;
}
map $geoip_country_code $blocked {
default 0;
CN 1;
KP 1;
}
# server:
if ($blocked) { return 403; } |
| Whitelist only (allow only some) | map $geoip_country_code $allowed {
default 0;
US 1;
CA 1;
GB 1;
DE 1;
}
if ($allowed = 0) { return 403; } |
| Custom page для blocked | location = /blocked.html {
internal;
root /var/www/static;
}
if ($blocked) { error_page 403 /blocked.html; return 403; } |
| Allow admin IP bypass | set $skip 0;
if ($remote_addr = "1.2.3.4") { set $skip 1; }
if ($blocked = 1) { set $skip "${skip}1"; }
if ($skip = 1) { return 403; } |
| geoipupdate daemon | # /etc/GeoIP.conf
AccountID XXX
LicenseKey YYY
EditionIDs GeoLite2-Country
# Cron: 0 3 1 * * /usr/bin/geoipupdate |
$http_cf_ipcountry или real_ip_headerЧтобы заблокировать доступ к вашему сайту из определенной страны в nginx, вы можете использовать модули GeoIP или GeoIP2. Например, с помощью GeoIP2 вы можете добавить следующие строки в ваш конфигурационный файл:
geoip2 /path/to/GeoLite2-Country.mmdb { auto_reload 5m;
$geoip2_data_country_code country iso_code;}
Затем используйте директиву deny для блокировки определенных стран:
if ($geoip2_data_country_code = 'RU') { return 403;
}Это заблокирует доступ для пользователей из России.
Модуль GeoIP позволяет идентифицировать местоположение пользователя по его IP-адресу. Для начала вам необходимо установить модуль GeoIP, если он еще не установлен. Это можно сделать с помощью менеджера пакетов, например, для Ubuntu:
sudo apt-get install libgeoip-devПосле установки вам нужно загрузить базу данных GeoIP. Наиболее распространенной является GeoLite2, которую можно скачать и установить.
Сначала создайте директорию для базы данных:
sudo mkdir -p /usr/share/GeoIPЗатем переместите загруженный файл в эту директорию:
sudo mv GeoLite2-Country.mmdb /usr/share/GeoIP/Теперь откройте конфигурационный файл nginx:
sudo nano /etc/nginx/nginx.confДобавьте в него следующее:
http { geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
auto_reload 5m;
$geoip2_data_country_code country iso_code;
}
}
Теперь вы можете использовать переменную $geoip2_data_country_code для определения страны пользователя.
Теперь, когда вы настроили GeoIP, давайте рассмотрим, как заблокировать доступ для пользователей из конкретной страны. Предположим, вы хотите заблокировать доступ из Беларуси (код страны: BY). Для этого добавьте следующий код в ваш конфигурационный файл nginx:
server { listen 80;
server_name example.com;
location / {
if ($geoip2_data_country_code = 'BY') {
return 403;
}
# Остальная конфигурация
}
}
После добавления этой конфигурации, перезапустите nginx:
sudo systemctl restart nginxТеперь пользователи из Беларуси будут получать ошибку 403 (доступ запрещен) при попытке доступа к вашему сайту.
Также можно использовать несколько условий для блокировки нескольких стран. Например:
if ($geoip2_data_country_code ~* 'BY|RU') { return 403;
}Этот код заблокирует доступ для пользователей из Беларуси и России.
Чтобы заблокировать доступ к вашему серверу из определенной страны в nginx, вам необходимо использовать модуль GeoIP. Это можно сделать с помощью настройки конфигурации nginx, которая позволяет фильтровать запросы по IP-адресам. Для этого установите пакет GeoIP и добавьте соответствующие директивы в конфигурационный файл nginx.
Для начала вам нужно установить модуль GeoIP. В большинстве дистрибутивов Linux это можно сделать с помощью пакетного менеджера. Например, для Ubuntu выполните следующую команду:
sudo apt-get install libgeoip-dev geoip-binПосле установки вам нужно загрузить базы данных GeoIP. Вы можете использовать бесплатные базы данных от MaxMind. Скачайте их и разархивируйте в каталог, например, /usr/share/GeoIP.
Теперь откройте файл конфигурации nginx, обычно это /etc/nginx/nginx.conf, и добавьте следующие строки:
http {
geoip_country /usr/share/GeoIP/GeoIP.dat;
...
}Эта директива загрузит базу данных GeoIP для определения страны по IP-адресу.
Далее, чтобы заблокировать страну, добавьте директиву if в блок server:
server {
if ($geoip_country_code = XX) {
return 403;
}
}Замените XX на код страны, которую вы хотите заблокировать (например, RU для России).
После внесения изменений проверьте конфигурацию командой:
sudo nginx -tЕсли ошибок нет, перезапустите nginx:
sudo systemctl restart nginxТеперь доступ из указанной страны будет заблокирован.
Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.
Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.
Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.
Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.
Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.
аудит HTTP-заголовков
проверка конфигурации
CSP и HSTS настройка
соответствие стандартам
Strict-Transport-Security.Server: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.DENY или SAMEORIGIN.nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.Server, X-Powered-By, X-AspNet-Version из ответов.История security-проверок и мониторинг HTTP-заголовков безопасности.
Зарегистрироваться (FREE)Cloudflare: simple dashboard toggle, работает до вашего origin. nginx: гибче, нет зависимости от CDN. Для критичных security layer — оба.
MaxMind GeoLite2 — free, good accuracy, standard. IP2Location — commercial, больше деталей (proxy/VPN detection).
Whitelist его IP ДО country check. Или отдельный admin.example.com без geo-block.
Compliance sanctions: CU, IR, KP, SY. Security: countries с высокой bot activity. Business: где у вас нет support.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.