Как работает защита
Отдельного файрвола или WAF перед сайтами в WardPane нет. На портах 80 и 443 отвечает сам WardPane, поэтому все правила защиты срабатывают внутри него, до того как запустится хоть одна строка кода на PHP или Node.js. Запрос заблокированного бота до приложения не доходит вовсе: соединение с базой под него не открывается, и в журналах приложения его нет.
Защита настраивается для каждого сайта отдельно, на вкладке Дополнительно в настройках сайта: «Защита от DDoS», «Bot Fight Mode», «Гео-блокировка», «Разрешённые устройства», «Обязательные параметры ссылки», «Защита паролем», «Защита от хотлинка» и «Заголовки безопасности». Общее для всей панели (общий список заблокированных IP, диапазоны IP краулеров, публичные списки блокировки и проверка IP) вынесено в раздел Дополнительно > Безопасность главного меню.
Порядок проверок
Каждый запрос к сайту проходит одни и те же шаги. Если какой-то шаг отклонил запрос, на нём всё и заканчивается, следующие не выполняются.
- Проверки Let’s Encrypt. На запросы к
/.well-known/acme-challenge/отвечают в первую очередь, поэтому выпуск сертификатов работает при любых настройках защиты. - Cloudflare. Если сайт отмечен как За Cloudflare, реальный IP посетителя берётся из
CF-Connecting-IP(только если соединение действительно пришло с адреса Cloudflare). При включённом параметре «Пропускать трафик только через Cloudflare» запрос, пришедший не через Cloudflare, получает здесь 404. - Защита запросов, в таком порядке:
- общий чёрный список (действует на все сайты, даже когда вся защита выключена);
- белый список сайта: адрес из списка пропускает всё, что ниже, вплоть до фильтра устройств;
- действующие баны: забаненный посетитель сразу получает 404;
- лимит запросов (защита от DDoS);
- Bot Fight Mode: публичные списки IP, путь-ловушка, методы запросов, атаки в URL, правила по User-Agent (ваш собственный список, проверка краулеров по IP, диапазоны IP краулеров, категории ботов, строгая проверка браузера) и, наконец, поиск файлов вроде
/.envили/wp-login.php.
- Гео-блокировка: язык браузера, сети хостингов и облаков, ваши номера AS, затем страны и группы стран.
- Разрешённые устройства.
- К ответу добавляются заголовки безопасности, затем проверяется защита от хотлинка.
- Обязательные параметры ссылки («Только по ссылке»).
- Защита паролем (HTTP Basic).
- Сгенерированный
robots.txt, перенаправление с HTTP на HTTPS, правила.htaccessсайта (если включены, см. .htaccess) и, наконец, обработчик: статические файлы, PHP или Node.js.
Обнаружение сканирования смотрит с другой стороны, на ответы: оно считает, сколько ответов 404 сайт отдал каждому посетителю, и банит того, кто набрал слишком много.
Пароль проверяется после фильтров. Боты и заблокированные посетители окна ввода пароля не получают и не могут нагрузить процессор проверкой паролей.
Что получает заблокированный посетитель
По умолчанию любой отказ выглядит одинаково: простой 404 Not Found, отправленный с Cache-Control: no-store. Сканер не отличит такой 404 от отсутствующей страницы, так что о блокировке он ничего не узнает и стараться сильнее ему незачем.
Для Bot Fight Mode, гео-блокировки, разрешённых устройств и обязательных параметров ссылки можно вместо этого показывать свою страницу со статусом 404, 403 или 200. См. Страницы блокировки. Кто превысил лимит запросов или забанен, всегда получает простой 404, который почти ничего не стоит серверу, и соединение закрывается.
Баны только за явные атаки
Бан означает временную блокировку одного посетителя на одном сайте. WardPane банит только тогда, когда атака очевидна:
- посетитель превысил лимит запросов (если время бана не 0);
- он запросил путь, который запрашивает только сканер уязвимостей (и такого файла на вашем сайте нет);
- он отправил в URL несомненную атаку, например
<script>,${jndi:или../../../; - он использовал имя известного краулера (Googlebot, GPTBot, …) с адреса, который не принадлежит владельцу этого краулера;
- он запросил путь-ловушку;
- он запросил много несуществующих путей за короткое время (сканирование).
Всё, что только выглядит странно, например поиск {{7*7}} или ссылка с ?next=../page, отклоняется только в этом запросе, без бана. Человек, который ввёл что-то необычное, может спокойно работать с сайтом дальше.
Баны и счётчики хранятся в памяти и сбрасываются при перезапуске панели. Для постоянной блокировки есть общий чёрный список.
Посетители IPv6 считаются по /64
Посетитель IPv4 учитывается и банится по своему адресу. Посетитель IPv6 учитывается и банится по своей сети /64: домашний или мобильный абонент обычно получает целую /64 и без этого обходил бы бан, переключаясь на другой адрес из неё. В списке забаненных посетителей такие записи выглядят как 2001:db8:1:2::/64.
Чего защита не может
WardPane защищает от флуда с ограниченного числа адресов, от сканеров, парсеров и автоматических атак. От объёмной DDoS-атаки он не спасёт: сотни мегабит в секунду или большой ботнет забивают сетевой канал сервера раньше, чем любая программа на сервере увидит запрос. Против этого помогает только ваш хостинг-провайдер или CDN перед сервером, например Cloudflare.
Фильтры по заголовкам (User-Agent, язык браузера, устройство) легко обмануть: клиент может прислать любой заголовок. Обычных ботов и случайных нежелательных посетителей они отсекают, а настойчивый злоумышленник их обойдёт.
Статистика и журнал
Вверху вкладки Дополнительно сайт показывает, что его защита заблокировала с момента запуска панели: запросы сверх лимита, боты, поиск уязвимостей, гео-блокировка, обязательные параметры ссылки, сканирование путей, адреса из чёрного списка, запросы от забаненных посетителей и сколько посетителей забанено прямо сейчас. Оттуда можно открыть список забаненных IP (с причиной и временем окончания каждого бана) и снять все баны сайта кнопкой Разбанить всех.
В журнал записывается сводка по каждому сайту, например «example.com: за последние 1 ч заблокировано запросов: 240 (боты 200, атаки и пробы 40), заблокировано IP: 3». Сводка по сайту пишется не чаще раза в час, чтобы обычный фон от ботов не вытеснял из журнала остальные записи. Раньше она появляется, если кого-то забанили или заблокировано 200 запросов и больше.
Готовые наборы
Готовые наборы защиты запланированы на версию 2.3 (см. план развития). Это комплекты настроек от «без защиты» до строгого, плюс отдельный набор для лендинга, который должен открываться только по вашим рекламным ссылкам. В 2.0 новые сайты получают безопасные значения по умолчанию, а каждую проверку можно настроить на вкладке Дополнительно сайта.
Простой и экспертный режим
Простой и экспертный режимы появятся в версии 2.3. В 2.0 панель показывает все параметры, описанные на этих страницах; подробные настройки (пороги, время бана, страницы блокировки, правила для атак в URL) находятся на вкладке Дополнительно сайта. См. Простой и экспертный режим.