Блокируем referrer spam с Nginx

Защищаем домен и отбиваем атаку рефспама с помощью Nginx.




Самым простым способом защиты будет перечисление проблемных реферов, и отдача 444 ошибки соединениям с ними:




if ($http_referer ~* "(domain1.com|domain2.com|domain3.com)") {
return 444;




Используем map.




C помощью map, мы можем пометить нежелательный рефер:




map $http_referer $bad_referer {
default 0;
"~domain1.com" 1;
"~domain2.com" 1;
"~domain3.com" 1;
#...
"~domainN.com" 1;
}




А затем отдать таким соединениям код 444:




if ($bad_referer) {
return 444;
}




Используем valid_referers.




Параметр valid_referers задаёт значения поля Referer, при которых
переменная invalid_referer будет пустой. В остальных случаях
invalid_referer получит значение 1.




valid_referers none blocked server_names
               *.domain.com domain.* www.domain.ru/path/
               ~.google. ~.yandex.;




Далее, просто выполняем проверку, и если invalid_referer оказывается не пустой, отдаём ответ 444.




if ($invalid_referer) {
 return 444;
}




Используем готовые списки с GitHub.




Энтузиасты на Github предлагают уже готовые решения в виде списков
или заранее заготовленных конфигов для Nginx (и других веб-серверов на
самом деле), в которых собраны домены, продвигаемые рефспамом. Пример
такого репозитория — referrer-spam-blocker.
Использовать такие решения или нет, каждый администратор для себя
решает сам. Как минимум, при использовании такого списка стоит
проверить, нет ли чего-то лишнего в нём, и только потом применять его на
своём сервере.



[endtxt]



2019-09-16T18:18:33
Nginx