Как заблокировать реферальный спам с помощью Nginx? - PullRequest
9 голосов
/ 19 января 2009

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

Ответы [ 4 ]

10 голосов
/ 20 января 2009

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;   }
7 голосов
/ 07 ноября 2015

Использование 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-blacklist

1 голос
/ 25 апреля 2013

Я создал модуль для проверки входящего IP в черных списках https://github.com/oneumyvakin/ngx_http_blacklist_lookup_module

он использует черные списки от projecthoneypot.org, blocklist.de и uceprotect.net

1 голос
/ 19 января 2009

До этого я был в похожей ситуации, когда мне нужно было блокировать людей по поведению, а не по другим произвольным правилам, которые брандмауэр мог бы самостоятельно выбирать.

Они решили, как я обошел проблему - заставить мою логику (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
...