Роберт
Аналитик
Быстрая обработка при DoS-атаке
Пару недель назад на один из моих проектиков была проведена DoS-атака (более 200 заходов в секунду с различных адресов). Вначале мой сервер загнулся от такой нагрузки , но уже через час подправив код и настройки сервера удалось привести его в состояние что он без особой проблемы стал выдерживать такую нагрузку и уже две недели работает под атакой (впрочем уже атакой и не назвать - так как через неделю количество заходов сократилось до 50 в секунду , а сейчас их всего около 5 в секунду).
По этому задумался о том что бы сделать свой небольшой универсальный модуль который бы стоял в самом начале загрузки страницы на проектах и смотрел - если пользователь зашёл больше 5 раз в секунду или более 30 раз за пол минуты - то он блокируется на 1 час. Всё вроде просто. Алгоритм простенький - где-то хранятся все IP-адреса зашедшие за последнюю минуту. Если адрес не заходил больше минуты - он выкидывается. Если превысил одно из ограничений - блокируется. Вопрос только в чём более удобно хранить список при нагрузке более 200 заходов в секунду?
У меня пока два варианта:
1) в простом текстовом файле
2) в HEAP таблице на MySQL (поскольку эта таблица хранится в виртуальной памяти)
В общем-то выбрать по какому пути идти , легко - проверив что происходит быстрей: обращение к дисковому файлу или установление соединения с базой MySQL?
Хотя есть и третий , как мне кажется - самый быстрый вариант: создать виртуальный диск из оперативной памяти , и работать с файлом на нём (помнится это ещё в DOS'е можно было сделать через ramdrive.sys). Однако тут появляется ряд неудобств: создаётся диск только при старте операционки (ну или сторонними программками) , потом перед глазами будет мешаться отдельный пустой диск на несколько десятков килобайт , короче не совсем универсально...
А может у кого есть другая идея не использующая сторонние разработки?
Может PHP уже может сам держать файлы в области виртуальной памяти? (в чём я сомневаюсь)
Пару недель назад на один из моих проектиков была проведена DoS-атака (более 200 заходов в секунду с различных адресов). Вначале мой сервер загнулся от такой нагрузки , но уже через час подправив код и настройки сервера удалось привести его в состояние что он без особой проблемы стал выдерживать такую нагрузку и уже две недели работает под атакой (впрочем уже атакой и не назвать - так как через неделю количество заходов сократилось до 50 в секунду , а сейчас их всего около 5 в секунду).
По этому задумался о том что бы сделать свой небольшой универсальный модуль который бы стоял в самом начале загрузки страницы на проектах и смотрел - если пользователь зашёл больше 5 раз в секунду или более 30 раз за пол минуты - то он блокируется на 1 час. Всё вроде просто. Алгоритм простенький - где-то хранятся все IP-адреса зашедшие за последнюю минуту. Если адрес не заходил больше минуты - он выкидывается. Если превысил одно из ограничений - блокируется. Вопрос только в чём более удобно хранить список при нагрузке более 200 заходов в секунду?
У меня пока два варианта:
1) в простом текстовом файле
2) в HEAP таблице на MySQL (поскольку эта таблица хранится в виртуальной памяти)
В общем-то выбрать по какому пути идти , легко - проверив что происходит быстрей: обращение к дисковому файлу или установление соединения с базой MySQL?
Хотя есть и третий , как мне кажется - самый быстрый вариант: создать виртуальный диск из оперативной памяти , и работать с файлом на нём (помнится это ещё в DOS'е можно было сделать через ramdrive.sys). Однако тут появляется ряд неудобств: создаётся диск только при старте операционки (ну или сторонними программками) , потом перед глазами будет мешаться отдельный пустой диск на несколько десятков килобайт , короче не совсем универсально...
А может у кого есть другая идея не использующая сторонние разработки?
Может PHP уже может сам держать файлы в области виртуальной памяти? (в чём я сомневаюсь)