Как заблокировать все запросы из некоторых нежелательных стран только в одном месте (nginx)

Я использую nginx и установил пакет geoip-database-contrib, чтобы заблокировать доступ к расположению /wp-admin из всех стран, кроме некоторых предпочитаемых.

location /wp-admin {
  if ($allowed_country = no) {
    return 403;
  }
}

Работает нормально при попытке открыть эту страницу в браузере. Но все же я вижу в access.log много POST-запросов и в журналах worpdress неудачных запросов на вход из отклоненных стран. Можно ли использовать модуль geoip-database-contrib также для POST-запросов?

Я старался:

location /wp-admin {
  if ($allowed_country = no) {
    deny all;
  }
}

но после перезагрузки nginx вообще не запускается. У вас есть идеи, как заблокировать все запросы только для location /wp-admin? Я не хочу блокировать трафик на уровне брандмауэра, потому что все страны должны иметь доступ к сети, но я хочу ограничить запросы администратора.

Я знаю, что могу разрешить запрос только для некоторых IP-адресов, но мне нужно получить доступ к администратору из большего количества мест, где у меня есть Dyn. назначенный IP.

Большое спасибо за ваши идеи.

0 ответов

sudo apt-get install geoip-database libgeoip1

Вам нужен этот дополнительный блок, поместите его в блок http{} над блоком server{}

# Whitelist Country to access Web admin
geoip_country /usr/share/GeoIP/GeoIP.dat; #Please download database and put the correct path here
    map $geoip_country_code $allowed_country {
        default no;
        PH yes;

}

Затем внутри блока сервера {} вы можете поместить это

location /wp-admin {
  if ($allowed_country = no) {
    return 444;
  }
}

Он работает с папкой (например, http://domain/folder_name), но когда я пытаюсь запретить определенный файл.php ( http://domain/folder_name_2/filename.php), он не работает, браузер принудительно загружает php файл!!! Я пытаюсь найти решение

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