Придумал прикольную защиту от ботов (или слабого DDOS)

Тема в разделе "Защита от DDOS своими силами", создана пользователем X-Shar, 6 янв 2015.

↑ ↓
  1. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.813
    Симпатии:
    433
    Пол:
    Мужской
    Репа:
    +969 / 153 / -29
    Jabber:
    Telegram:
    Вообще это было придумано уже, но до кое-чего я додумался, в любом случае хотел как-то интересно назвать тему, дабы подогреть интерес, кстати создал подраздел "Защита от ддос своими силами" .

    [​IMG]

    Понятно что от профессионального ддоса с тысячами ботами это не спасёт, зато может помочь если разозлившийся школьник решил "отомстить", ну или какой-то бот например поисковый или рейтинговый или ещё какой, ну ОЧЕНЬ сильно нагружает сайт запросами, что невозможно вообще, можно конечно это всё мониторить вручную, но лучше автоматизировать !WinkSmile

    Итак в чём идея этого способа, как-то я создавал тему про fail2ban способ в той теме ОЧЕНЬ вредный и плохой, объясню почему:

    1)Если натравить fail2ban на лог апача, то при большой посещалке лог разрастётся и сервак упадёт т.к. fail2ban съест все ресурсы;
    2)При ддосе аналогично, к тому-же там нужно ставить фильтры, что-бы неучитывался коннект к картинкам и прочее...
    Короче тот способ нуждается всё-же в серьёзной доработке...

    В чём-же заключается способ в этой теме:

    Предполагаем что у нас связка apache+nginx ну либо только nginx, в принципе неважно...

    Итак допустим, есть некий сайт, который активно пытаются положить или спарсить боты. Нужно ограничить частоту запросов с отдельных IP-адресов и автоматически банить тех, кто попал под ограничение.

    У nginx есть две неплохие функции, их и будем использовать:

    Добавим в /etc/nginx/nginx.conf (в секцию http) строчку:

    limit_req_zone $binary_remote_addr zone=mysitelimit:10m rate=4r/s;

    Так мы ограничим число запросов до 4 в секунду с одного ип. Учтите, что вам, возможно, потребуется другое значение rate.

    Теперь идем в конфигурационный файл виртуального хоста, например /etc/nginx/sites-enabled/example.com:

    limit_req zone=mysitelimit burst=6 nodelay;


    ВАЖНО у вас обязательно должна быть отдельная локация под статику, иначе лимит будет распространяться и на нее (т.е. картинки, хтмл и прочие прелести), а это нам совсем не нужно.

    Должно-быть примерно так:

    Код:
    ...

    listen some_ip:80;
    server_name example.com www.example.com;
    root   /var/www/example.com/;
    ...
        
    location / {
            
    #ваша конфигурация
            
    limit_req  zone=mysitelimit burst=6 nodelay;
            }

    #СТАТИКА ОТДЕЛЬНО:
        
    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|ico)$ {
            
    root /var/www/example.com/;
            
    access_log off;
            
    error_log off;
            ...
        }
    Таким образом мы ограничили частоту запросов до 4 в секунду с всплесками до 6.


    Что это означает, если объяснить по простому, если Вы откроете 4-ре вкладки подрят, то сработает счётчик "всплеска" +1, если вы и дальше будете открывать вкладки, т.е. делать более 4-х запросов в секунду, то счётчик "всплеска" также будет увеличиваться +1, и как достигнет 6, произойдёт отлуп, ошибка 503...

    Величину berst и rate нужно подобрать самим, berst слишком маленькое значение ставить ненужно, т.к. можно побанить тех-кто за натом, да и поисковых ботов тоже, те-что в примере, взято просто от балды, так-что подбирайте сами...Думки думаю!!!

    Итак если кто-то не попадает в наш лимит nginx будет давать отлуп, при этом в логах будет что-то такое:

    Ели лог nginx:/var/log/nginx/error.log

    То как-то:
    Код:
    limiting requestsexcess бла-бла-бла
    Если лог апача,
    /var/httpd-logs/site.ru.error.log:
    Код:
    бла-бла-бла by zone "mysitelimit"client бла-бла-бла
    Рассмотрим оба варианта, на эти логи и натравим fail2ban, они разрастаться не должны, особенно если есть ротация, fail2ban должен работать шустро и быстро !sm181818

    Установка типична: aptitude install fail2ban
    Дальше создадим правило для nginx. В /etc/fail2ban/filter.d/nginx-conn-limit.conf

    Правило для лога nginx:
    Код:
    [Definition]
    failregex limiting requestsexcess.*by zone.*client: <HOST>
    Правило если связка nginx+apache, ошибки могут писаться в лог апача, а не nginx:
    Код:
    [Definition]
    failregex by zone "mysitelimit"client: <HOST>
    Ну и последний штрих в конце /etc/fail2ban/jail.conf включим правило:
    Код:
    [nginx-conn-limit]
    enabled true
    filter 
    nginx-conn-limit
    action 
    iptables-multiport[name=ConnLimitport="http,https"protocol=tcp]
                      
    sendmail-buffered[name=ConnLimitlines=5dest=mail@mail.ru]
    logpath = /var/log/nginx/error.log
    findtime 
    300
    bantime 
    7200
    maxretry 
    10


    logpath - Путь к нашему логу;
    findtime - За какой промежуток будет поиск;
    bantime - Время на сколько будем банить;
    maxretry - Число повторений (Наших ошибок 503) после которых будет бан

    sendmail-buffered[name=ConnLimit, lines=5, dest=mail@mail.ru] - нужно вписать свой маил для пересылки пяти последних заблокированных айпишников !

    Эти лимиты нужно тоже подобрать самим, самое сложное в этом способе это подобрать все лимиты, если ддоса нет то можно лимиты и по больше сделать, а потом уменьшить...WinkSmile

    Вроде всё !

    Высказываем что ещё можно добавить, можно использовать кстати в комплексе с этим:https://ru-sf.ru/threads/boremsja-s-ddos-pri-pomoschi-d-dos-deflate.1910/
     
    • Информативный пост Информативный пост x 2
    • Мне нравится Мне нравится x 1
  2. Nedovirus Уважаемый пользователь
    Nedovirus
    Ответить в чате

    Форумчанин

    Регистрация:
    14.05.2014
    Сообщения:
    478
    Симпатии:
    821
    Пол:
    Мужской
    Репа:
    +845 / 14 / -5
    все хорошо, но не понял к чему картинка)
     
  3. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.813
    Симпатии:
    433
    Пол:
    Мужской
    Репа:
    +969 / 153 / -29
    Jabber:
    Telegram:
    Да что-то так и несмог нормальной про ддос найти...смех-смех!!!

    Можно ещё дополнить, про вот-эту запись если кому нужно вдруг:
    Код:
    limit_req  zone=mysitelimit burst=6 nodelay;
    nodelay; - если убрать то запросы будут задерживаться, т.е. если выставить максимальный лимит запросов в два запроса в секунду, то остальные будут задерживаться пока не выполнятся предыдущие, в принципе при сильной атаке может-даже и помочь, если лимиты просчитать...Не въехал!!!
     
  4. Пузырик Пользователь
    Пузырик
    Ответить в чате

    Первый уровень

    Регистрация:
    22.04.2015
    Сообщения:
    13
    Симпатии:
    14
    Репа:
    +14 / 0 / -0
    От ддоса это не защитит, а вот проблемы в случае отсутствия ддоса может добавить. Совет если не атакуют то и не парься.;)
     
    • Мне нравится Мне нравится x 1
  5. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.813
    Симпатии:
    433
    Пол:
    Мужской
    Репа:
    +969 / 153 / -29
    Jabber:
    Telegram:
    А что посоветуете ?

    Так-то согласен, я сейчас только DDOS Deflare поставил, думаю достаточно, хотя и его пробивают !

    А всякие-там CloudFlare так вообще лучше не ставить, от них-то точно могут-быть проблемы у пользователей...Отдыхай!!!
     
    • Мне нравится Мне нравится x 2
  6. Пузырик Пользователь
    Пузырик
    Ответить в чате

    Первый уровень

    Регистрация:
    22.04.2015
    Сообщения:
    13
    Симпатии:
    14
    Репа:
    +14 / 0 / -0
    Ну таких универсальных решений нет, всё зависит от конкретной атаки. Если забивание канала, то нужны одни методы. Если через уязвимости в скриптах, то другие. Я поэтому и говорю, если не атакуют то и не парься, а-так уже во время атаки и нужно какие-то меры принимать в зависимости от силы и типа атаки ! ;)
     
    • Мне нравится Мне нравится x 2
  7. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.813
    Симпатии:
    433
    Пол:
    Мужской
    Репа:
    +969 / 153 / -29
    Jabber:
    Telegram:
    Ога, как-бы поздно уже не было... Но так конечно-да, склонен согласится, но всё-равно не плохо изучить методы защиты, а-то потом что-бы не получилось, что сайты в дауне и всё и трындец...HELP!!!
     
    • Мне нравится Мне нравится x 2
  8. Flopy Пользователь
    Flopy
    Ответить в чате

    Первый уровень

    Регистрация:
    23.09.2015
    Сообщения:
    9
    Симпатии:
    6
    Репа:
    +7 / 1 / -0
    О защите от ДДОС атак лучше подумать заранее, ибо потом может быть очень поздно.
     
    • Мне нравится Мне нравится x 1
  9. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.813
    Симпатии:
    433
    Пол:
    Мужской
    Репа:
    +969 / 153 / -29
    Jabber:
    Telegram:
    С одной стороны-да, а с другой есть ресурсы которые и ддосить-то никто не будет, я если-бы не провоцировал атаки, может-быть бы и не ддосили...

    Сейчас может устаканится всё и опять никто ддосить не будет, ибо смысла нет, какого-то провокационного контента здесь нет, поэтому ддос если говорить про этот ресурс, это-либо для теста, либо что-бы лично навредить как-то так...

    Я это к тому, что нужно знать как защитится, НО если никто не ддосит и в перспективе не будут, то можно просто забить и всё... (ИМХО !)
     

Поделиться этой страницей