Skip to content

Как заблокировать страну в nginx

Коротко:

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.

Пошаговая настройка

  1. Register free MaxMind account → download GeoLite2-Country.mmdb
  2. Установите nginx module: apt install libnginx-mod-http-geoip2
  3. В nginx.conf http context: geoip2 /path/GeoLite2-Country.mmdb { $geoip_country_code country iso_code; }
  4. Map country → action: map $geoip_country_code $blocked { default 0; CN 1; RU 1; }
  5. В server block: if ($blocked) { return 403; }
  6. Auto-update GeoLite2 через geoipupdate daemon (monthly)
  7. Test: 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 для blockedlocation = /blocked.html { internal; root /var/www/static; } if ($blocked) { error_page 403 /blocked.html; return 403; }
Allow admin IP bypassset $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

Типичные ошибки

  • VPN + Tor обходят любую geo-blocking легко
  • Legitimate travellers блокируются (business user в отпуске)
  • Cloudflare перед nginx → $remote_addr = Cloudflare IP, не client. Используйте $http_cf_ipcountry или real_ip_header
  • GeoLite2 точность country-level 99%, city-level 70% — не полагайтесь на city
  • Compliance: legal risk блокировать целую страну (discrimination). Consult legal
ЗаголовкиCSP, HSTS, X-Frame-Options и др.
SSL/TLSШифрование и сертификат
КонфигурацияСерверные настройки и утечки
Оценка A-FОбщий балл безопасности

Почему нам доверяют

OWASP
рекомендации
15+
заголовков безопасности
<2с
результат
A–F
оценка безопасности

Как это работает

1

Введите URL сайта

2

Анализ заголовков безопасности

3

Получите оценку A–F

Что проверяет анализ безопасности?

Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.

Анализ заголовков

Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.

Проверка SSL

Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.

Обнаружение утечек

Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.

Отчёт с рекомендациями

Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.

Кому это нужно

Специалисты по безопасности

аудит HTTP-заголовков

DevOps

проверка конфигурации

Разработчики

CSP и HSTS настройка

Аудиторы

соответствие стандартам

Частые ошибки

Нет Content-Security-PolicyCSP — главная защита от XSS. Без него инъекция скриптов значительно проще.
Нет заголовка HSTSБез HSTS возможна downgrade-атака с HTTPS на HTTP. Включите Strict-Transport-Security.
Server header раскрывает версиюServer: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.
X-Frame-Options не установленСайт можно встроить в iframe для clickjacking-атаки. Установите DENY или SAMEORIGIN.
Нет X-Content-Type-OptionsБез nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).

Лучшие практики

Начните с базовых заголовковМинимум: HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy. Займёт 5 минут.
Внедрите CSP постепенноНачните с Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.
Скройте серверные заголовкиУдалите Server, X-Powered-By, X-AspNet-Version из ответов.
Настройте Permissions-PolicyОграничьте доступ к камере, микрофону, геолокации — только то, что реально используется.
Проверяйте после каждого деплояЗаголовки безопасности могут быть перезаписаны при обновлении конфигурации сервера.

Получите больше с бесплатным аккаунтом

История security-проверок и мониторинг HTTP-заголовков безопасности.

Зарегистрироваться (FREE)

Больше по теме

Часто задаваемые вопросы

Cloudflare geo-blocking vs nginx?

Cloudflare: simple dashboard toggle, работает до вашего origin. nginx: гибче, нет зависимости от CDN. Для критичных security layer — оба.

MaxMind vs IP2Location?

MaxMind GeoLite2 — free, good accuracy, standard. IP2Location — commercial, больше деталей (proxy/VPN detection).

Как unblock admin из заблокированной страны?

Whitelist его IP ДО country check. Или отдельный admin.example.com без geo-block.

Какие страны часто блокируются?

Compliance sanctions: CU, IR, KP, SY. Security: countries с высокой bot activity. Business: где у вас нет support.