myhand

Рейтинг
278
Регистрация
16.09.2009

тыц: http://www.php.net/manual/en/session.configuration.php - session.gc_probability > 0

читайте документацию уже

Andreyka:
С DDOS по IP не встречался?

Моя не понимать что вы эдак заковыристо обозвали. А право гадать что Вы имели в виду - оставлю madoff. От тут часто в телепатии тренируется. Правда, без особого успеха.

PS: С последним замечанием madoff согласен - я тоже не припомню атак, от которых не получилось в итоге отбиться на уровне вебсервера (плюс отправка особо ретивых на файервол по error.log).

zexis:
Отдать временно ошибку 503 подозрительному клиенту можно настроив limit_zone и limit_req_zone в конфигурации NGINX для каждого типа файлов. Тут и изобретать нечего не надо, лишь вставить 4-6 строк в файл конфигурации NGINX.

Я бы поостерегся делать это "для каждого типа файлов". И, к сожалению, есть еще клиенты, для которых таки нельзя это делать. Так что логика на порядок сложнее - но вы идете в нужную сторону.

zexis:
Информация какие запросы обрабатываются в одно и то же время как раз есть в логе, так как у каждой строки лога указана дата запроса.

"Садись, два" (с)

Ну какое это отношение имеет к тому "какие еще сейчас запросы вебсервер обрабатывает"? Сейчас, не "третьево дни".

zexis:
Во вторых программа анализатор логов получается более универсальной, чем модуль для вебсаервера, так как анализатор логов можно запускать как во время атаки по крону, так и после атаки для анализа HTTP-флуда администратором.

Анализ логов никто не отменял. Но это больше уже для обновления списков IP, формирования статистических критериев и т.п.

Начнем с того, что "взаимодействия" с "клиентом" нету. Как класса. Бан - и все. Или не бан.

zexis:
Вы показали сравнение со скриптом, находящим топ быстрых IP.

Я показывал сравнение со случаем, когда Ваша программа строит этот самый топ.

zexis:
myhand, вы уже написали модуль для вебсервера, принимающий решения кто бот, а кто нет?

- но зачем делать очередной велосипед? Есть решения и для nginx, и для апача. Их тут цитировали. Интересно - поучаствуйте в разработке.

zexis:
анализатором логов, который у меня уже написан, протестирован и активно мной используется на практике.

Вы только не обижайтесь, но таких "анализаторов, которые анализируют" - у каждого администратора есть в заначке. Присутствующие, уверяю, не исключение. Делиться здесь особо нечем - т.к. все подобное пишется/писалось на коленке за полчаса.

netwind:
обычно веб-сервер ничего не знает о php-приложении.

Обычный вебсервер и не досят. Досят конкретные приложения - просто используйте информацию о их работе при защите. Это и есть задача администратора.

netwind:
Ну и где взять такое решение? опять писать на C ?
Тут вам предлагают одновременно и просто и безопасно.

Да что Вы к C-то привязались? На чем хотите - на том и пишите. Хоть на perl.

Еще раз - то, что Вы предлагаете далеко не так просто. Вспомните хоть, что изменение формата логов потребует reload'а веб-сервера + плюс всего, что парсит эти ваши логи. А тут все просто: на входе запрос - на выходе разрешение/запрет на его дальнейшую обработку. А в промежутке "черный ящик", ваш обработчик, которому всегда доступны параметры запроса - меняйте его логику как и когда удобно.

netwind:
myhand, проще блокировать. Думаю, мало кто этим заморачивается. Генерировать капчу это немало ресурсов нужно.

То, что "проще" - никто и не спорит. Во-вторых, и с капчей есть варианты.

А в-третьих, иногда лучше временно просто дать 503 для подозрительных клиентов.

netwind:
Я, например, для vbulletin могу ид пользователя на форуме определить только из логов. Причем, не важно сохранял ли он пароль в кукисах.

А что мешает это делать на уровне веб-сервера?

netwind:
Буду. Чего именно существенного нету в CustomLog http://httpd.apache.org/docs/2.0/mod/mod_log_config.html#formats ?

Ну, например, какие еще сейчас запросы вебсервер обрабатывает.

netwind:
И С-джедай долбанется изучать библиотеки взаимодействия и обязательно что-нибудь не освободит. А, что хуже всего, может неаккуратным программированием завалить процесс вебсервера и тогда вообще все перестанет работать.

Это применимо для расширения вебсервера, написанного на любом языке. Как минимум, в части "завалить".

Собственно, тут уже писали, что не нужно все пихать непосредственно в веб сервер. Можно поставить отдельный обработчик (например, cgi-скрипт), который будет принимать решение о пропуске/отклонении конкретного запроса.

zexis:
В чем сложность анализировать логи постфактумно раз в минуту?

Медленно. (Да и логи далеко не всегда оправданно вести.)

Вполне годится как костыль. Конечно, "чудо" на C ради этого городить не стоит.

zexis:
Моим анализатором 10 000 строк анализируется около секунды, 80 000 строк около 8 секунд.

Вам бенчмарк показали. Простейшие утилиты уделывают Ваш "анализатор" чуть ли не на порядок.

r0mik:
зы: это я еще как-то забыл упомянуть Кнута, старею видать...

Кнут - это уже не совсем технические книжки. Это больше прикладная математика, а тут мне объяснили, что такое знать нинада 🚬

netwind:
еще одна причина - тут не нужна обратная связь с nginx. программа отдает команды файрволу.

Нужна. Блокировать сразу на файерволе - это для джедаев (или для простого over 9000: GET /). Почему не отдать подозрительному клиенту сперва 503 или что-то подобное в сомнительном случае?

netwind:
И не понятно с чего это парсинг лога - куцый ? в лог довольно много можно информации записывать.

Ну, в данном примере - куцый.

А в более общем случае (когда аффтар таки осилит возможности логгирования запросов веб-сервером) - Вы, надеюсь, не будете спорить, что у самого веб сервера информации о запросе чуть поболее, чем он в принципе готов писать в логи?

SyCraft:
Так можно, но хотелось бы в реальном времени

Не очень понятно зачем, но помимо того как Вам объяснили ранее (/ru/forum/comment/8369646) - можно сделать буквально то, что вы просите в реальном времени.

tail -f /var/www/123/data/logs/123.access.log | awk '{ if (n>100) { print k; k=0; n=0 } else n++ } /\/123\/123\.php/ { k++ }'
alexey_nsk:
Может я чего не понимаю, но 49577 с одного IP? При чем запросы до сих пор идут:

Это, извините, прежде всего не "один IP", а просто незнание кем-то матчасти. Идти учить что значит 87.119.229.2*0 для grep :-)

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

vandamme:
так все равно запросы будут идти

В DROP?

netwind:
myhand, ну так не ведь perl не только для костылей. Не обязательно по крону запускать.
Можно нормального демона сделать и читающего access.log и с быстрым временем реакции.

Да меня несколько другое настораживает. Зачем это решать кого блокировать на куцом уровне парсинга лог файлов, когда самое логичное и простое - делать это с точки зрения приложения, на кое и направлен DDOS. Как нормальные люди и делают.

А уж по крону костыли там или не по крону - дело десятое.

Всего: 4890