DedalX
@DedalX
Web разработчик, IT бизнесмен

Как настроить сервер с WordPress под высокую нагрузку и DDOS?

Имеется выделенный сервер с Plesk Panel:
Intel Core i7-2600 Quad Core
32 ГБ DDR3 RAM
2x 3 ТБ SATA III HDD

На сервере стоит PHP 7.3, работающий на Apache+FPM+Nginx. Можно включить чистый NGINX, но очень не хочеться постоянно возиться с ручной конфигурацией для всех WordPress (на сервере установлено множество WordPress сайтов и нужно чтобы работало .htaccess и все плагины зависимые от них). В WordPress установлен и настроен W3TotalCache.

Суть проблемы: под обычной нагрузкой все летает, даже при большой посещаемости. Но на сайты переодически происходит DDOS атака от конкурентов, как я понимаю с бот-нет сетей контролируемая вручную - как только я нахожу способ заблокировать текущий вариант атаки, они меняют ее на другой.

На сервере настроен fail2ban правила в котором я переодически меняю, чтобы подстроиться под изменяющуюся атаку.

Сейчас сайты находятся на старом сервере с примерно таким же железом, но более старым софтом (Apache FCGI, PHP5, без Nginx):

Заблокировать обычные попытки "долбежки" с одних и тех же ip легко с помощью fail2ban, но атаки переходят во все более изощренные:
1) Начинает долбить рандомные запросы к несуществующим страницам в WordPress, а так как это не дает 404 ошибок (WordPress пытается найти такие статьи и генерирует свою 404 страницу), то никакой кеш тут не помогает - каждый запрос генерирует новое кеширование. Пример запросов (десятки в секунду):
domain.com/DSADAJKFJASFJASFLKJ
2) IP меняются постоянно, практически перестали использовать повторы (каждый новый запрос с нового IP).
3) Рефереры были фейковые (все разные), бывают используют пустой, после того как те стали банится моими настройками.
4) Бывает долбят просто какую-то страницу с запросом (к примеру сортировка товаров по рейтингу).
5) Долбят /wp-admin/admin-ajax.php POST/GET запросами - это сильно вешает сервер. Заблокировать полностью файл не могу, так как frontend использует запросы на него от реальных посетителей. Получается заблочить через .htaccess если используют пустой реферер. Если нет - непонятно как отличий от нормальных пользователей.
6) Домен подключен к Cloudflare, но как я понял с такими типами атак (где все ip разные и определить что действия сомнительные трудно) он не особо поможет.

Собственно вопрос - как я понимаю настроить бан для таких атак автоматически очень сложно (тем более как только они видят что идет бан - тут же меняют запросы, рефереры и т.д.), поэтому возникает другой запрос - как правильно сконфигурировать и настроить новый сервер (куда я перенесу сайты со старого где сейчас атаки), чтобы такие атаки не вешали сервер, и он даже под ними работал нормально? Как я понимаю PHP7 и Apache FPM и NGINX должны с этим помочь? Что еще посоветуете установить и настроить? (Аккселераторы к PHP, базам данных?) Сильно ли поможет переход на чистый NGINX без Apache?

Какие настройки Apache/Nginx стоит указать (лимиты подключений и тд) - чтобы сервак не падал и у всех все работало? (не было 503/502 ошибок).

Сами сайты которые атакуют после создания практически не обновляются новой информацией (поэтому полное глубокое кеширование возможно), но имеют некоторые динамические функции (к примеру лайки публикаций), которые должны оставаться работать.

Подскажите какие программные связки стоит использовать чтобы сделать все это шустрым несмотря на нагрузку? Хватит ли указанного железа сервера?
  • Вопрос задан
  • 1593 просмотра
Пригласить эксперта
Ответы на вопрос 4
@EvgenyMorozov
На вашем месте я бы полностью перешел на Nginx + php-fpm.
На nginx можно ограничить количество запросов в секунду к сайту с помощью этого модуля, также с помощью Nginx можно жестко закешировать страницы, и еще можно ограничить доступ с нежелательных ip-адресов (допустим из Африки, Китая и других ненужных стран).
Ответ написан
dimasmagadan
@dimasmagadan
если сайт позволяет, настройте более агрессивное кэширование. Отдавайте все как статику хотя бы во время атак.
Это можно сделать как плагинами (например тот же Wp Super Cache), так настройками nginx.

Ниже советы, как если б вы уже настроили все на отдачу статикой.

1) Начинает долбить рандомные запросы к несуществующим страницам в WordPress, а так как это не дает 404 ошибок (WordPress пытается найти такие статьи и генерирует свою 404 страницу), то никакой кеш тут не помогает - каждый запрос генерирует новое кеширование. Пример запросов (десятки в секунду):
domain.com/DSADAJKFJASFJASFLKJ

а зачем вы кэшируете такие страницы по отдельности?
отдавайте одну статическую 404ю страницу для всех несуществующих страниц

5) Долбят /wp-admin/admin-ajax.php POST/GET запросами - это сильно вешает сервер. Заблокировать полностью файл не могу, так как frontend использует запросы на него от реальных посетителей. Получается заблочить через .htaccess если используют пустой реферер. Если нет - непонятно как отличий от нормальных пользователей.

несколько вариантов:
1 добавить nounce (и сделать, чтоб оно работало корректно с кэшированными страницами)
2 перестать использовать admin-ajax.php на фронте. заменить на REST API/кастомный эндпоинт.
да это будет не по стандартам WP и потребует некоторой переделки кода/плагиов, но это будет более производительно, хотя бы за счет срабатывания несколько другого набора хуков у рест апи (rest api vs ajax). Плюс запросы к стандартному admin-ajax слабо кэшируются
а с кастомным эндпоинтом вообще можно только нужные части движка подгружать

6) Домен подключен к Cloudflare, но как я понял с такими типами атак (где все ip разные и определить что действия сомнительные трудно) он не особо поможет.

как минимум, оставьте только нужные вам страны, остальные блокируйте.
во время атаки выкрутите Basic Protection Level в максимальный режим (не помню, с какого тарифного плана это доступно)
Ответ написан
@MechanID
Админ хостинг провайдера
Посмотрите в сторону haproxy как фронтенда - там есть очень гибкий язык ACL который позволяет делать всевозомжные рейтлимиты, сброс неактивных конекшенов и тд, увернн что как минимум часть атак он вам поможет отбить.
Ответ написан
Комментировать
Суть проблемы: под обычной нагрузкой все летает, даже при большой посещаемости. Но на сайты переодически происходит DDOS атака от конкурентов, как я понимаю с бот-нет сетей контролируемая вручную - как только я нахожу способ заблокировать текущий вариант атаки, они меняют ее на другой.

На сервере настроен fail2ban правила в котором я переодически меняю, чтобы подстроиться под изменяющуюся атаку.

Сейчас сайты находятся на старом сервере с примерно таким же железом, но более старым софтом (Apache FCGI, PHP5, без Nginx):.....
Не надо лепить лыжи из соломы. Становись под защиту. Похлеще чем у тебя атаки сдерживают.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы