Защита сайта на 1С-Битрикс от DDoS и спама
Задача
Чтобы положить сайт на Битриксе, взламывать его не обязательно. Достаточно открывать страницы быстрее, чем сайт успевает их собирать. Каждая страница — это работа процессора и запросы к базе данных. Где-то на сотне запросов в секунду сайт перестаёт отвечать живым людям. Обычно от этого прячутся за облачными фильтрами вроде Cloudflare. Я хотел решение проще: модуль, который ставится на любой Битрикс за несколько минут и не зависит от внешних сервисов.
Что сделано
Написал модуль защиты. Он отсеивает ботов ещё до того, как Битрикс начнёт собирать для них страницу. Сам замечает атаку и сам снимает защиту, когда она закончилась. Заодно закрывает формы от спама. Проверил учебной атакой на живом сайте.
Фейсконтроль на входе
Представьте ночной клуб. Если проверять гостей у барной стойки, толпа успеет занять все столики. Поэтому фейсконтроль стоит у двери. Модуль работает так же: он срабатывает первым, раньше ядра Битрикса и базы данных. На бота, которого развернули на пороге, сайт не тратит ничего.
Проверка, которую почти не замечаешь
Во время атаки посетитель видит экран «Проверяем браузер» и через секунду-две попадает на сайт. За это время браузер решает небольшую математическую задачку. Человеку она ничего не стоит. Боту, который шлёт тысячи запросов, приходится решать её тысячи раз, и атака становится дорогой. Кто прошёл проверку, получает пропуск на сутки и больше её не видит. Вместо задачки можно включить привычную галочку Яндекса «Я не робот».

Сам понимает, что началась атака
Каждые десять секунд модуль смотрит на трафик: сколько запросов, откуда они, похожи ли друг на друга. Толпа покупателей и флешмоб, который вбежал в магазин по команде, ведут себя по-разному, и модуль это различает. Заметил подозрительное — включает проверку. Всё стихло — выключает. В спокойное время посетители проверку не видят вообще.

Что умеет модуль
- срабатывает раньше Битрикса и базы данных;
- проверка на выбор: своя задачка или галочка Яндекса;
- включается и выключается сам, вручную тоже можно;
- не мешает поисковикам, платёжным системам и обмену с 1С;
- защищает формы от спама: ловушка для роботов и лимит заявок с одного адреса;
- блокирует тех, кто прошёл проверку и продолжает заваливать сайт запросами;
- страница проверки подстраивается под дизайн сайта;
- если во время атаки не открывается админка, защиту можно включить одним файлом через хостинг;
- если в самом модуле что-то сломается, сайт продолжит работать, просто без защиты.


Испытание
Я устроил учебную атаку на этот сайт: около двадцати запросов в секунду. Через сорок секунд модуль включил защиту. Боты стали получать страницу проверки за сотые доли секунды и до базы больше не доходили. Обычный посетитель в это время пользовался сайтом как ни в чём не бывало. Через пару минут после конца атаки защита выключилась сама.

Чего модуль не умеет
Он охраняет дверь клуба, но не дорогу к нему. Если атакуют не сайт, а сам сервер или канал связи, поможет только хостинг или облачный фильтр. Большинство атак на сайты всё же идёт через дверь, и с ними модуль справляется.
Попробовать
Если модуль интересен, пишите, поставлю и настрою его на вашем сайте.