запрет фальшивых Googlebot

Autopilot nginx-forum на nginx.us
Пт Окт 9 10:36:48 UTC 2015


Недавно подопечные сервера начали перегружаться по DDoS, как правило, с
одного ip из примерно 3000 шел один запрос на произвольную страницу одного
из сайтов сервера с user agent Googlebot. IP не принадлежал сетям Google. 
Появилась идея опознать бота и разрешить доступ только для сетей google.
Конструкция вида if ($http_user_agent ~* googlebot ) { deny all; allow
GOOGLENETS;} не разрешается. На основе ветки
http://forum.nginx.org/read.php?2,202715,202715#msg-202715 и статьи хабра
был составлен рецепт 

http {
#...
geo $bot_ip {
    default 0;
    216.239.32.0/19     1;
    64.233.160.0/19     1;
    66.249.80.0/20      1;
    66.249.64.0/19      1;
    72.14.192.0/18      1;
    209.85.128.0/17     1;
    66.102.0.0/20       1;
    74.125.0.0/16       1;
    64.18.0.0/20        1;
    207.126.144.0/20    1;
    173.194.0.0/16      1;
}

map $http_user_agent $is_bot {
    default 0;
    ~Googlebot          1;
}

map "$is_bot:$bot_ip" $fake_bot {
    default     0;
    "1:0"       1;
}
# ...
server {
#...
        if ($fake_bot) {
            return 418;
        }
#...
}
#...
}

Код ошибки выбран для парсинга логов на предмет новых ip гугла. 

Привел тут как пример решения задачи и для поиска более оптимальных решений

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,262080,262080#msg-262080



Подробная информация о списке рассылки nginx-ru