Nginx - если реферер, добавить (x-forwarded-for) ip в черный список - PullRequest
2 голосов
/ 26 мая 2020

Я написал базовый c редиректор http referer, который выглядит примерно так:

if ($http_referer ~* (google|yahoo|bing|duckduckgo)) {  return 301 https://altavista.com; }

Моя цель примерно такая

if ($http_referer ~* (google|yahoo|bing|duckduckgo)) {
    add $x-forwarded-for bad_ips.txt; <-- this line is the question (x-forwarded-for because it's behind cloudflare)
    return 301 https://altavista.com; 
}
if ($bad_ip) { 
    return 301 https://altavista.com; 
}

Есть ли способ сделать этот? По сути, цель состоит в том, что если вас перенаправили с веб-сайта из черного списка, я хотел бы добавить ваш IP-адрес в список перенаправления.

Примечание: это не нужно делать только в nginx; использование других технологий в дополнение к nginx допустимо, если они бесплатны.

Обратите внимание, что мой сайт использует cloudflare, поэтому вместо запрета простого IP-адреса он должен использовать адрес x-forwarded-for, иначе я просто запрещаю cloudflare.

Спасибо

1 Ответ

3 голосов
/ 01 июня 2020

Пока я не помню, прямого метода для этого не существует.

В качестве платного варианта можно использовать Nginx Plus в соответствии с этим блогом.

Кроме что есть 2 варианта, которые я вижу сейчас:

  1. Используйте OpenResty с модулем LUA. Что вам нужно сделать, это

    1. при каждом запросе записывать IP в файл
    2. при каждом запросе, прочитанном из файла, и если IP существует, то перенаправление 301.

    Если вы не хотите использовать OpenResty, вы также можете построить Nginx с LUA модулем .

    [На данном этапе меня беспокоит эффективность. Этот метод может увеличить производительность, поскольку файл должен анализироваться при каждом запросе.]

  2. Используйте Fail2Ban с Nginx.

I wanted to add this in the comment but I don't have enough reputation to comment.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...