Конфигурация nginx для maxmind geoip2 для ограничения IP-адресов по стране и городу при прохождении локальной сети

Близко, но не сигара!

Попытка настроить сервер Ubuntu 20.04 nginx с geoip2 для ограничения IP-адресов по стране и городу при разрешении доступа к локальной сети. Ниже приведен мой файл nginx.conf для maxmind geoip2.

Ссылки на установленные базы данных maxmind

/etc/nginx/nginx.conf

      http {geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
$geoip2_data_country_iso_code country iso_code;
}  
geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
    $geoip2_data_city_name city names en;
    }

Этот блок вставляет ограничения IP-кода с использованием трех переменных: $lan, $allowed_country и $allowed_city. В этой конкретной попытке разрешить страну, но ограничить город в этой стране. Например, страна США разрешена, однако для этого теста любой IP-адрес из города Буффало, США, должен быть ограничен.

/etc/nginx/nginx.conf

      # permit LAN access
geo $lan {
    default  0;
    192.168.0.0/24  1;
    }
# exclude all countries except the ones listed
map $geoip2_data_country_iso_code $allowed_country {
    default 0;
    CA 1;
    US 1;
    SZ 1;
    AU 1;
    }
#include all cities except the one's excluded
map $geoip2_data_city_name $allowed_city {
    default 1;
    Buffalo 0;
    Ottawa 0;
       }
#combine the results and determine if the ip should be blocked
map $lan$allowed_country$allowed_city $deny_ip {
    default 0;
    000 1;
    001 1;
    010 1;
    }
}

Последний блок сравнивает настройки $lan, $allowed_country и $allowed_city и определяет, следует ли блокировать IP-адрес на основе их объединенных значений. Насколько я понимаю, картографический сервис nginx можно использовать для объединения трех переменных гео-IP и сравнения их объединенных значений, чтобы затем установить другую переменную deny_ip:

  1. "000" = означает, что локальная сеть, страна и город НЕ разрешены, поэтому deny_ip = 1 (ограничить)
  2. "001" = если страна ограничена, но город в порядке, то deny_ip = 1 (ограничение)
  3. "010" = если страна в порядке, но город ограничен, то deny_ip = 1 (ограничение)

Следующий код добавляется в файл виртуальной конфигурации nginx для ограничения доступа к веб-сайту, если $deny_ip = 1

/etc/nginx/сайты-доступны/website_configuration

      location / {
    if ($deny_ip = 1) {
return 403;
}
try_files $uri $uri/ /index.php?$args;
}

Код работает в основном, но не совсем. Для сценария страна РАЗРЕШЕНА, но город в этой стране ограничен, IP-адрес все еще проходит. При написании этой статьи подтвердил, что страна США РАЗРЕШЕНА, но город Буффало США ограничен, однако в логах по-прежнему видны IP-адреса из Буффало, и я не знаю, что я делаю неправильно.

Буффало, США IP-адрес, которому должен был быть отказано в доступе к веб-сайту, но все же дозвонился?

      104.144.66.114 - - [06/Mar/2022:11:46:55 -0700] "GET /picture.php?/1206 HTTP/1.1" 200 4476 

Эта настройка действительно добавляет большую гибкость для контроля и ограничения доступа к веб-сайту, и, надеюсь, кто-то в этом сообществе сможет предложить решение, чтобы заставить его работать на 100%

0 ответов

Другие вопросы по тегам