• Форум посвящен самостоятельной (бесплатной) защите от ддос атак.
    Есть мануалы по настройке сервера от Ddos для сисадминов и готовые инструменты от ддос-атак для вебмастеров.

    Простое, эффективное, точное и проверенное бесплатное решение от мощных ддос-атак: PHP скрипт + Cloudflare, с панелью управления.

Быстрый php-скрипт для защиты от мощных ддос атак

L

LoliShawty

New Member
PHP-скрипт для защиты от ддос, способный противостоять даже сильным ддос-атакам, благодаря связке с iptables или Cloudflare.
Информация по обновлениям внизу темы.

Внимание! Любые вопросы по работе и установке скрипта пишите в теме! Оперативно отвечаю.
Приватные консультации только после платной установки скрипта.


Алгоритм работы скрипта с iptables
  • IP проверяется на принадлежность к поисковому боту. Если это поисковой бот, то добавляем в исключения и пускаем на сайт (больше не проверяем).
    update: добавлена возможность проверки поисковых ботов на подлинность, на случай, если ддос-боты будут притворяться поисковыми ботами.

  • Если IP обращается к странице слишком часто (кол-во обращений в минуту регулируется в настройках), то показывается капча (при желании, можно прикрутить гугл капчу).

  • Если каптча не пройдена, последующие обращения к сайту блокируются.

Алгоритм работы скрипта с Cloudflare
  • Проверка ip на бота и на подлинность.

  • Если IP обращается к странице слишком часто (кол-во обращений в минуту регулируется в настройках), то IP добавляется в файрвол Cloudflare. В соответствии с настройками, выставляется капча (challenge) или блок. В зависимости от настроек: IP больше не сможет попасть на сайт или сможет, после прохождения капчи Cloudflare.

В админке встроена возможность удалять IP из файрвола Cloudflare, напрямую или по крону.

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

В чем преимущество php-скрипта над bash скриптом?
  • bash скрипт будет выполняться не чаще раза в минуту, а php скрипт обновляет счетчик при каждом обращении. Таким образом, бот будет забанен сразу, как только исчерпает разрешенный лимит, хоть через 5 секунд.
  • bash скрипту приходится анализировать лог, что очень ресурсоемкая операция, а php скрипт только обновляет счетчик в файле, который создается по хешу запроса md5($_SERVER['REMOTE_ADDR'].$_SERVER['REQUEST_URI'].$_SERVER['HTTP_USER_AGENT'].date("mdhi"))
  • При работе через Cloudflare в заголовках передается страна и вы сможете задать для нужных стран лимиты помягче, а для не целевых стран, наоборот, жестче. При этом поисковые боты не попадут в бан. В случае bash-скрипта такое реализовать практически нереально.
  • Можно выставлять разные сроки и режимы блокировки в зависимости от страны.
  • Удобная админка, где можно проанализировать работу скрипта, посмотреть браузеры и страны ботов, даты атаки и т.д.

Скрипт неоднократно испытан на практике - форум атакуют регулярно.

Результат работы скрипта в связке с Cloudflare, с разными настройками режима блокировки по странам.

Посмотреть вложение 244

Страна целевого трафика (в моем случае Россия) банится точечно, по IP, страны СНГ по маске 24, все прочие - по стране. То есть, если на ваш сайт резко пошел трафик из каких-нибудь Филлипин, то скрипт выставляет заглушку на всю страну (реальный пользователь пройдет капчу), а если боты российские - банит точечно. Это очень экономит ресурсы сервера, поскольку 80-90% ботов - зарубежные. Российские боты дороже, их меньше и они хорошо абузятся (можно их собрать и сделать рассылку провайдерам). На моем опыте, при самой мощной атаке, было не больше 1000 российских ботов или 1% от общего ботнета.

Теперь в админку добавлена функция, позвляющая удалить из Cloudflare забаненые в ходе атаки сайты.
update
Cloudflare отключили возможность выставлять блок по странам, доступен только challenge. Боты не умеют обходить challenge, но ддосер может пройти капчу вручную. Решение этой проблемы в процессе.

Файл настроек скрипта.
PHP:
// Время блокировки
$config=[ 'bantime'=>604800 /*неделя*/ ];

$config['limit']=5; // Количество заходов в минуту на страницу. Убедитесь, что нет никаких ajax скриптов, которые обращаются чаще (чат, например).
$config['counter']='url'; // Счетчик для каждой страницы. Если убрать, то счетчик будет работать для всего сайта и нужно выставить больше значение limit. Не рекомендуется, если картинки подгружаются через скрипт, где размещен код антиддоса (как у форумов, например).

$config['referer']=[$_SERVER['HTTP_HOST'], 'yandex.ru', 'google.com', 'google.ru']; // Рефереры для исключения (ддос боты обычно шлют пустые реферы)
// $config['referer']=false;

$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] // страны целевого трафика, для этих стран будет применяться более мягкая блокировка
];

----
Ссылка для скачивания и инструкция по установке: [Скрытый контент]Для просмотра содержимого, просто зарегистрируйтесь на форуме и отпишитесь в теме, зачем вам нужен скрипт.

Требования: 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
tysm
 
C

cleo666

New Member
Версия без связки с Cloudflare. Устаревшая версия
Пишите в теме, если нужен скрипт именно под iptables.

Буду признателен за версию для ipt
 
Сверху