• Уменьшение отступа

    Обратная связь

    (info@ru-sfera.pw)

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


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 174
Вообще это было придумано уже, но до кое-чего я додумался, в любом случае хотел как-то интересно назвать тему, дабы подогреть интерес, кстати создал подраздел "Защита от ддос своими силами" .

174428_m.jpg


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

Если лог апача,
/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 requests, excess.*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=ConnLimit, port="http,https", protocol=tcp]
                  sendmail-buffered[name=ConnLimit, lines=5, dest=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=[email]mail@mail.ru[/email]] - нужно вписать свой маил для пересылки пяти последних заблокированных айпишников !

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

Вроде всё !

Высказываем что ещё можно добавить, можно использовать кстати в комплексе с этим:https://ru-sfera.pw/threads/boremsja-s-ddos-pri-pomoschi-d-dos-deflate.1910/
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 174
все хорошо, но не понял к чему картинка)
Да что-то так и несмог нормальной про ддос найти...смех-смех!!!

Можно ещё дополнить, про вот-эту запись если кому нужно вдруг:
Код:
limit_req  zone=mysitelimit burst=6 nodelay;

nodelay; - если убрать то запросы будут задерживаться, т.е. если выставить максимальный лимит запросов в два запроса в секунду, то остальные будут задерживаться пока не выполнятся предыдущие, в принципе при сильной атаке может-даже и помочь, если лимиты просчитать...Не въехал!!!
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 174
От ддоса это не защитит, а вот проблемы в случае отсутствия ддоса может добавить. Совет если не атакуют то и не парься.;)
А что посоветуете ?

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

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

Пузырик

Гость
А что посоветуете ?
Ну таких универсальных решений нет, всё зависит от конкретной атаки. Если забивание канала, то нужны одни методы. Если через уязвимости в скриптах, то другие. Я поэтому и говорю, если не атакуют то и не парься, а-так уже во время атаки и нужно какие-то меры принимать в зависимости от силы и типа атаки ! ;)
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 174
Я поэтому и говорю, если не атакуют то и не парься, а-так уже во время атаки и нужно какие-то меры принимать
Ога, как-бы поздно уже не было... Но так конечно-да, склонен согласится, но всё-равно не плохо изучить методы защиты, а-то потом что-бы не получилось, что сайты в дауне и всё и трындец...HELP!!!
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 174
О защите от ДДОС атак лучше подумать заранее, ибо потом может быть очень поздно.
С одной стороны-да, а с другой есть ресурсы которые и ддосить-то никто не будет, я если-бы не провоцировал атаки, может-быть бы и не ддосили...

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

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