Nginx гео-блокировка и разрешение локальных IP-адресов
Я бы хотел заблокировать IP-адреса с помощью geoip, за исключением стран из белого списка и локальной сети. Первая часть работает безупречно, вторая нет. Где-то в интернете я нашел коды LH (локальный хост) и LN (локальная сеть), но они оба не работают.
Я использую стандартный код Howto для блокировки.
Соответствующая часть http {} в nginx.conf:
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default no;
US yes;
}
Соответствующая серверная часть {} в sites-available/default:
block countries
if ($allowed_country = no) {
return 444;
}
Любые предложения будут высоко ценится!
Обновить:
Переменная $geoip_country_code возвращает "-" при доступе по IP-адресу локальной сети, но добавляет "- да;" в блок geoip_county тоже не работает.
2 ответа
Я нашел решение - не знаю, "чистое" ли оно. Просто перезапишите переменную $ allow_country, если ранее было найдено условие LAN IP.
geo $ lan-ip {
по умолчанию нет;
192.168.1.0/24 да;
}
и этот блок перед частью "#block стран"
if ($lan-ip = yes) {
установите $ enabled_country yes;
}
Вы также можете сделать следующее:
map $geoip_country_code $allowed_country {
default no;
'' yes;
US yes;
}
Хотя это относится не только к IP-адресам локальной / частной сети, но и ко всем адресам, которые не обрабатываются вашей базой данных GeoIP.