Skip to content
EN

Как заблокировать страну в 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

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

Чтобы заблокировать доступ к вашему сайту из определенной страны в 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 для блокировки стран

Модуль 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 для определения страны пользователя.

Пример блокировки страны в конфигурации nginx

Теперь, когда вы настроили 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

Чтобы заблокировать доступ к вашему серверу из определенной страны в nginx, вам необходимо использовать модуль GeoIP. Это можно сделать с помощью настройки конфигурации nginx, которая позволяет фильтровать запросы по IP-адресам. Для этого установите пакет GeoIP и добавьте соответствующие директивы в конфигурационный файл nginx.

Настройка 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

Теперь доступ из указанной страны будет заблокирован.

Заголовки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.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.