PHP-скрипт для защиты от ддос, способный противостоять даже сильным ддос-атакам, благодаря связке с iptables или Cloudflare.
Информация по обновлениям внизу темы.
Внимание данная версия скрипта больше не поддерживается. Доступна для скачивания здесь https://github.com/Roscenzura-com/antiddos-old
По ссылке https://github.com/Roscenzura-com/antiddos выложена новая версия скрипта, тема поддержки: https://ddosforum.com/threads/1045/
Внимание! Любые вопросы по работе и установке скрипта пишите в теме! Оперативно отвечаю.
Приватные консультации только после платной установки скрипта.
Алгоритм работы скрипта с iptables
Алгоритм работы скрипта с Cloudflare
В версии от 31.05.2022 добавлена функция автоматической приостановки работы сайта в случае ддос атаки (режим "Под атакой"). Как только боты будут заблокированы и нагрузка спадет, работа сайта автоматически восстановится.
Алгоритм работы режима "Под атакой" (включается в настройках)
Режим "Под атакой" был добавлен для борьбы с "умным ддосом", когда боты стараются имитировать поведение обычного пользователя.
В чем преимущество php-скрипта над bash скриптом?
Скрипт неоднократно испытан на практике - форум атакуют регулярно.
Результат работы скрипта в связке с Cloudflare, с разными настройками режима блокировки по странам.
Страна целевого трафика (в моем случае Россия) банится точечно, по IP, страны СНГ по маске 24, все прочие - по стране. То есть, если на ваш сайт резко пошел трафик из страны нецелевой аудитории, то скрипт выставляет заглушку на всю страну (реальный пользователь пройдет капчу), а если боты из страны целевой аудитории - банит точечно. Это очень экономит ресурсы сервера. Российские боты дороже, их меньше и они хорошо абузятся (можно их собрать и сделать рассылку провайдерам). На моем опыте, при самой мощной атаке, было не больше 1000 российских ботов или около 10% от общего ботнета.
Теперь в админку добавлена функция, позвляющая удалить из Cloudflare забаненые в ходе атаки сайты.
Файл настроек скрипта.
----
Ссылка для скачивания и инструкция по установке:
Для просмотра содержимого, просто зарегистрируйтесь на форуме и отпишитесь в теме, зачем вам нужен скрипт.
Внимание: по ссылке
выложена новая версия скрипта, тема поддержки здесь: https://ddosforum.com/threads/1045/
Требования: PHP 5.4 и выше, модуль curl
Узнать о наличии модуля curl можно через phpinfo();
----
Если не можете настроить скрипт самостоятельно пишите мне в ЛС или [email protected]. Помогу защитить сайты любой тематики (ну кроме совсем чернухи детского порно и т.п.).
Предложения по улучшению или свои доработки присылайте на Email или выкладывайте здесь. Если доработки будут интересными, добавлю ваше имя в число авторов на Гитхабе и ссылку на ваш сайт.
Если скрипт не помог - пишите в теме.
-----
Важное обновление от 23.01.2020.
Добавлена возможность менять конфигурацию хэша счетчика запросов.
Если url установить в 0, то счетчик на IP будет работать для всего сайта, а не на каждую отдельную страницу. Это пригодится в случае, если ддос-боты атакуют несколько внутренних страниц одновременно. На моей практике такого еще не бывало - ддосят либо главную, либо внутренние по-очереди, - в таком случае настройку менять не нужно.
Если user_agent установить в 1, то будет учитываться браузер для конфигурации хэша счетчика. Это пригодится в случае, если пользователи вашего сайта используют популярные прокси: ускорители трафика, бесплатные VPN для обхода блокировок и т.п. Теоретически, ддосер может менять User Agent при каждом обращении бота, поэтому включайте User Agent с осторожностью.
-----
Ссылка для тестирования: https://antiddos.ddosforum.com
-----
Обновления 23.01.2020
Обновления 31.05.2022
Информация по обновлениям внизу темы.
Внимание данная версия скрипта больше не поддерживается. Доступна для скачивания здесь https://github.com/Roscenzura-com/antiddos-old
По ссылке https://github.com/Roscenzura-com/antiddos выложена новая версия скрипта, тема поддержки: https://ddosforum.com/threads/1045/
Внимание! Любые вопросы по работе и установке скрипта пишите в теме! Оперативно отвечаю.
Приватные консультации только после платной установки скрипта.
Алгоритм работы скрипта с iptables
- IP проверяется на принадлежность к поисковому боту. Если это поисковой бот, то добавляем в исключения и пускаем на сайт (больше не проверяем).
- Если IP обращается к странице слишком часто (кол-во обращений в минуту регулируется в настройках), то показывается капча (при желании, можно прикрутить гугл капчу).
- Если каптча не пройдена, последующие обращения к сайту блокируются.
Алгоритм работы скрипта с Cloudflare
- Проверка ip на бота и на подлинность.
- Если IP обращается к странице слишком часто (кол-во обращений в минуту регулируется в настройках), то IP добавляется в файрвол Cloudflare. В соответствии с настройками, выставляется капча (challenge) или блок. В зависимости от настроек: IP больше не сможет попасть на сайт или сможет, после прохождения капчи Cloudflare.
В версии от 31.05.2022 добавлена функция автоматической приостановки работы сайта в случае ддос атаки (режим "Под атакой"). Как только боты будут заблокированы и нагрузка спадет, работа сайта автоматически восстановится.
Алгоритм работы режима "Под атакой" (включается в настройках)
- В случае превышения лимита общего числа обращений к сайту (за минуту), показывается заглушка "сайт под ддос атакой, зайдите попозже".
- Все IP, превысившие лимит, попадают в бан. В отличии от обычного режима, лимит считается для всех обращений каждого IP к сайту, а не для каждой отдельной страницы (обычный пользователь не будет перемещаться по разным страницам сайта, пока сайт отключен, таким образом, можно установить лимит обращений небольшой).
- Как только общее число обращений к сайту станет ниже установленного лимита, работа сайта восстанавливается.
Режим "Под атакой" был добавлен для борьбы с "умным ддосом", когда боты стараются имитировать поведение обычного пользователя.
В чем преимущество php-скрипта над bash скриптом?
- bash скрипт будет выполняться не чаще раза в минуту, а php скрипт обновляет счетчик при каждом обращении. Таким образом, бот будет забанен сразу, как только исчерпает разрешенный лимит, хоть через 5 секунд.
- bash скрипту приходится анализировать лог, что ресурсоемкая операция, а php скрипт только обновляет счетчик в файле, который создается по хешу запроса:
md5($_SERVER['REMOTE_ADDR'].$_SERVER['REQUEST_URI'].$_SERVER['HTTP_USER_AGENT'].date("mdhi"))
- При работе через Cloudflare в заголовках передается страна и вы сможете задать для нужных стран лимиты помягче, а для не целевых стран, наоборот, жестче. При этом поисковые боты не попадут в бан. В случае bash-скрипта такое реализовать сложно.
- Можно выставлять разные сроки и режимы блокировки в зависимости от страны.
- Удобная админка, где можно проанализировать работу скрипта, посмотреть браузеры и страны ботов, даты атаки и т.д.
Скрипт неоднократно испытан на практике - форум атакуют регулярно.
Результат работы скрипта в связке с Cloudflare, с разными настройками режима блокировки по странам.
Страна целевого трафика (в моем случае Россия) банится точечно, по IP, страны СНГ по маске 24, все прочие - по стране. То есть, если на ваш сайт резко пошел трафик из страны нецелевой аудитории, то скрипт выставляет заглушку на всю страну (реальный пользователь пройдет капчу), а если боты из страны целевой аудитории - банит точечно. Это очень экономит ресурсы сервера. Российские боты дороже, их меньше и они хорошо абузятся (можно их собрать и сделать рассылку провайдерам). На моем опыте, при самой мощной атаке, было не больше 1000 российских ботов или около 10% от общего ботнета.
Теперь в админку добавлена функция, позвляющая удалить из Cloudflare забаненые в ходе атаки сайты.
Файл настроек скрипта.
PHP:
$config=['whitetime'=>31536000, /*месяц*/ 'bantime'=>604800, /*неделя*/ 'proactivetime'=>3600, /*час*/ 'referertime'=>604800];
$config['limit']=5; // Количество заходов в минуту, после превышения появляется капча. Убедитесь, что нет никаких ajax скриптов, которые обращаются чаще (чат, например).
/*
Количество заходов со всех IP в минуту при которых включается режим "под атакой".
Режим "под аттакой" предназначен для противодействия "умному"/медленному ддосу, желательно не включать, если срабатывает обычная защита.
Добавьте исключения на кешируемые данные, если используете Cloudflare, для избежания ложного срабатывания счетчика. Пример есть в инструкции.
*/
$config['limit_attack_mode']=88; // Рекомендуемое значение примерно 1/24 от среднего числа просмотров в сутки во избежании ложных срабатываний. Установите 0 для отключения срабатывания режима "под аттакой".
$config['limit_attack_mode_ban']=3; // Количество заходов в минуту для срабатывания бана в режиме "под атакой". Если выставить 1, то будут залетать все IP, кроме поисковых ботов.
// Настройки счетчика, если url=1 то считает заходы для каждой страницы сайта, если 0, то для всего сайта. Если user_agent=1, то учитывает браузер.
$config['counter']=['url'=>1, 'user_agent'=>0];
//$config['referer']=[$_SERVER['HTTP_HOST'], 'yandex.ru', 'google.com', 'google.ru'];
$config['referer']=false; // Рефереры для исключения, ддос боты обычно шлют пустые реферы
$config['adminEmail']=''; // Емейл для связи (ошибочня блокировка)
$config['search_bots']=['Googlebot'=>'Google', 'yandex.com/bots'=>'Yandex', 'mail.ru'=>'mail.ru']; // 'msn.com','bing.com'
$config['search_hosts']=['Google'=>['.googlebot.com', '.google.com'], 'Yandex'=>['.yandex.com', '.yandex.ru', '.yandex.net'], 'mail.ru'=>['.mail.ru'], 'msn.com'=>['.msn.com'], 'bing.com'=>['.msn.com'] ];
//Cloudflare
$configCF=
[
'email'=>'', // email вашего аккаунта в Cloudflare
'key'=>'', // Узнать можно на странице dash.cloudflare.com/profile, Global API Key
'zone'=>'', // ID домена в Cloudflare, есть во вкладке Overview
'countries'=>['RU'=>1, 'UA'=>1, 'BY'=>1, 'KZ'=>1, 'LV'=>1], // страны целевого трафика
'limit'=>15 // Лимит в минуту для IP, прошедших капчу Cloudflare. При превышении лимита, IP банится полностью
];
$config['admin']['pass']=''; // Пароль админки
----
Ссылка для скачивания и инструкция по установке:
Для просмотра содержимого вам необходимо авторизоваться.
Внимание: по ссылке
Для просмотра содержимого вам необходимо авторизоваться.
Требования: PHP 5.4 и выше, модуль curl
Узнать о наличии модуля curl можно через phpinfo();
----
Если не можете настроить скрипт самостоятельно пишите мне в ЛС или [email protected]. Помогу защитить сайты любой тематики (ну кроме совсем чернухи детского порно и т.п.).
Предложения по улучшению или свои доработки присылайте на Email или выкладывайте здесь. Если доработки будут интересными, добавлю ваше имя в число авторов на Гитхабе и ссылку на ваш сайт.
Если скрипт не помог - пишите в теме.
-----
Важное обновление от 23.01.2020.
Добавлена возможность менять конфигурацию хэша счетчика запросов.
$config['counter']=['url'=>1, 'user_agent'=>0];
Если url установить в 0, то счетчик на IP будет работать для всего сайта, а не на каждую отдельную страницу. Это пригодится в случае, если ддос-боты атакуют несколько внутренних страниц одновременно. На моей практике такого еще не бывало - ддосят либо главную, либо внутренние по-очереди, - в таком случае настройку менять не нужно.
Если user_agent установить в 1, то будет учитываться браузер для конфигурации хэша счетчика. Это пригодится в случае, если пользователи вашего сайта используют популярные прокси: ускорители трафика, бесплатные VPN для обхода блокировок и т.п. Теоретически, ддосер может менять User Agent при каждом обращении бота, поэтому включайте User Agent с осторожностью.
-----
Ссылка для тестирования: https://antiddos.ddosforum.com
-----
Обновления 23.01.2020
- Добавлена возможность менять конфигурацию хэша в config.php
- Добавлена возможность блокировки ботов даже в случае ручного прохождения капчи ддосером
- В админке добавлен подраздел "География ботов" к разделу Cloudflare
Обновления 31.05.2022
- Добавлен режим "Под атакой".
- Добавлен подраздел меню "Фейковые поисковые боты".
Последнее редактирование: