Как заблокировать реферальный спам с помощью Nginx?
-
19-08-2019 - |
Вопрос
Я запускаю двух дворняг под сервером Nginx.Я продолжаю получать запросы на несуществующий файл.IP-адреса часто меняются, но ссылающийся URL-адрес остается прежним.Я хотел бы решить эту проблему.
Решение
https://calomel.org/nginx.html
Блокируйте большую часть «спама от рефереров» — «скорее раздражение, чем проблема».
nginx.conf
## Deny certain Referers (case insensitive)
## The ~* makes it case insensitive as opposed to just a ~
if ($http_referer ~* (babes|click|diamond|forsale|girl|jewelry|love|nudit|organic|poker|porn|poweroversoftware|sex|teen|video|webcam|zippo))
{ return 403; }
Другие советы
Использование Nginx модуль карты несколько эффективнее и проще в управлении, поскольку список становится длиннее. р>
Поместите это в свой блок http {}:
map $http_referer $bad_referer {
hostnames;
default 0;
# Put regexes for undesired referers here
"~social-buttons.com" 1;
"~semalt.com" 1;
"~kambasoft.com" 1;
"~savetubevideo.com" 1;
"~descargar-musica-gratis.net" 1;
"~7makemoneyonline.com" 1;
"~baixar-musicas-gratis.com" 1;
"~iloveitaly.com" 1;
"~ilovevitaly.ru" 1;
"~fbdownloader.com" 1;
"~econom.co" 1;
"~buttons-for-website.com" 1;
"~buttons-for-your-website.com" 1;
"~srecorder.co" 1;
"~darodar.com" 1;
"~priceg.com" 1;
"~blackhatworth.com" 1;
"~adviceforum.info" 1;
"~hulfingtonpost.com" 1;
"~best-seo-solution.com" 1;
"~googlsucks.com" 1;
"~theguardlan.com" 1;
"~i-x.wiki" 1;
"~buy-cheap-online.info" 1;
"~Get-Free-Traffic-Now.com" 1;
}
Поместите это в свой блок {} сервера:
if ($bad_referer) {
return 444; # emtpy response
}
Это сработало для меня. Р>
Получил это из http://fadeit.dk/blog/post/nginx-referer-spam- черный список р>
Раньше я сталкивался с похожей ситуацией, когда мне нужно было блокировать людей на основе поведения, а не других произвольных правил, которые брандмауэр мог определить самостоятельно.
Я решил проблему, заставив мою логику (в вашем случае Rails) выполнять блокировку...Но в обход:
- Пусть ваша логика поддерживает черный список в виде открытого текстового файла, разделенного новой строкой.
- Создайте сценарий bash (или другой) от имени пользователя root, чтобы прочитать этот файл и добавить его участников в черный список вашего брандмауэра.
- Создайте задание cron для вызова сценария снова от имени пользователя root.
Причина, по которой я делаю это именно так (а не просто даю Django разрешения на изменение конфигурации брандмауэра), проста:безопасность.Если бы мое приложение взломали, я бы не хотел, чтобы это еще кому-то навредило.
Bash-скрипт выглядит примерно так:
exec < /path/to/my/djago-maintained/block-list
while read line
do
iptables -A INPUT --source $line/32 -j DROP
done
Я создал модуль для проверки входящего IP в черных списках https://github.com/oneumyvakin/ngx_http_blacklist_lookup_module< а> р>
он использует черные списки от projecthoneypot.org, blocklist.de и uceprotect.net