Защита от Flood (Brute Force) атак на wordpress (разные советы)
Многие вебмастера, у которых есть сайты на WordPress или Joomla (в том числе и я), сейчас испытывают проблемы из-за массовой атаки на данные CMS. Если выразиться точнее, то речь идет о Syn Flood (Brute Force) атаке — автоматическом подборе паролей в админку. Об этом уже писали на Хабре, а также многие хостеры отправляли предупреждение своим клиентами. Даже запросы «wordpress ddos 2013» и «wordpress flood attack» выдаются в Google как подсказка. Эксперты говорят, что это самая массовая атака на WordPress, которая вообще наблюдалась. Я, признаться, не думал, что дойдет до моих сайтов, но это случилось. Пароли там, вроде бы, достаточно сложные, но из-за массового количества запросов при их подборе, админки, сайты и сами серверы просто «лежат». Ситуация (пока что?) не коснулась «отдельных сайтов» на обычных тарифах по типу как у Hostenko, а задела лишь VPS сервера. Сегодня поделюсь некоторыми советами, которые могут помочь.
Общая защита wordpress сайта
Собственно, про безопасность wordpress сказано достаточно много, в интернете вы сможет найти массу публикаций по теме. В данном блоге есть пост про определение безопасности блога с помощью плагина WP Security Scan. Из общих классических советов могу вкратце выделить:
- регулярное обновление системы и модулей (особенно, если там были исправлены критические уязвимости);
- использование префикса таблиц базы данных отличного от «wp_»;
- скрытие версии вордпресс;
- использование имени администратора отличного от admin, а самого этого пользователя лучше удалить вообще из БД;
Есть и другие рекомендации, по типу перемещение файла конфига в другую директорию, но эти самые простые. Собственно в данном посте также есть информация как ограничить доступ в админку вордпресс. Для этого в папке /wp-admin/ создаете файл .htaccess, в котором пишете:
AuthUserFile /dev/null AuthGroupFile /dev/null AuthName "Access Control" AuthType Basic order deny,allow deny from all allow from 91.250.120.20 |
Здесь вместо 91.250.120.20 — нужно указать IP адрес. Определить IP адрес помогут разные сервисы например 2ip.ru. В некоторых статьях есть примеры без первых 4 строк кода (думаю, они не обязательны). Учитывая то, что Flood (Brute Force) атака направлена на админку wordpress, это решение должно вам помочь.
Советы и помощь хостеров
Когда у вас возникают проблемы с сайтами или серверами первым делом нужно обращаться в тех.поддержку своего хостера. Вы платите деньги не просто за размещение, а и обслуживание — поэтому смело этим пользуйтесь. Если ваш хостер не сильно стремиться вам помочь — просто перенесите ваши сайты к другому. Сейчас на рынке хватает адекватных компаний.
В моем случае проблема Flood (Brute Force) атак на wordpress коснулась двух хостеров — HostPro и FastVPS. Оба проявили себя с лучшей стороны, за что им большое спасибо! В первом HostPro в 4 часа ночи уточнили мой IP и внесли все необходимые изменения. Во втором FastVPS сначала выслали инструкцию по ликвидации проблемы, а потом из-за того что у меня не все получилось, сами решили вопрос.
На будущее в HostPro советовали следовать основным базовым правилам защиты WordPress, о которых я говорил выше, закрывать доступ в wp-admin для своего IP, а также использовать некоторые полезных плагины (об этом дальше).
Дополнительная авторизация в админке
В FastVPS предложили установить еще один логин/пароль на страницу входа в блог — пользователь сначала будет вводить эти данные, а только потом WP доступы. Алгоритм:
1. Создаете файл .htpasswd в корневой директории.
2. Идете в этот сервис где указываете желаемый логин и пароль доступа, и потом получаете сгенерированный текст для файла .htpasswd.
3. В файл .htaccess из корневой директории добавить строки:
<Files wp-login.php> AuthName "Access Denied" AuthType Basic AuthUserFile полный_путь_до_корня_сайта/.htpasswd require valid-user </Files> |
Здесь «полный_путь_до_корня_сайта» — абсолютный путь по типу: /var/www/имя_пользователя/data/www/адрес_сайта/.htpasswd. Узнать его можно, выполнив команду в каком-то из PHP файлов на хостинге:
echo $_SERVER['DOCUMENT_ROOT']; |
4. Сохраняете и пробуете зайти в админ панель. Если у вас появляется ошибка 404 или «Too many redirects», пригодится добавление следующей строчки в htaccess:
ErrorDocument 401 default |
Вставляйте ее ДО основных правил WP. Такое поведение обусловлено специфическими настройками сервера. Если ничего не получается, напишите в тех.поддержку хостера. Мне также встречалась и другие реализации задачи, когда, например, htaccess добавлялся в каталог wp-admin, а htpasswd загружался подальше от корня, но я их не тестировал.
Ограничения в nginx
Тот же FastVPS подсказал как закрыть доступ на уровне nginx. Для этого в файле конфига /etc/nginx/nginx.conf под каждый домен добавляете секцию:
location /wp-login.php { allow 91.250.120.20; deny all; } |
Опять же IP нужно поменять на свой. Предварительно рекомендуется сделать резервную копию файла настроек. Кстати, по этому же хостеру возможно вам пригодиться статья про добавление сайта на сервер FastVPS без панели ISP Manager.
WordPress плагины защиты блога
Если до вас еще не добралась Flood (Brute Force) атака, то можно воспользоваться превентивными мерами в виде Wordoress плагинов. Кроме упомянутого ранее WP Security Scan я бы советовал присмотреться еще к таким решениям:
- Limit Login Attempts — основная задача ограничение попыток входа в админку.
- Lockdown WP Admin — как я понял, он скрывает панель входа в систему, если пользователь не залогинен.
- Protected wp-login — добавляется секретный ключ, без которого вы не сможете залогиниться даже, если указываете правильный логин и пароль.
- Wordfence Security — мощный и функциональный плагин безопасности Wordoress, у которого просто таки уйма функций.
- All In One WP Security & Firewall — еще одно мега крутое и комплексное решение с кучей опций.
К плагинам я пока присматриваюсь, возможно, позже напишу о них более детально. Тут главное все сделать правильно и не переборщить: скажем та же блокировка «назойливых IP» вполне может навредить поисковым роботам. Хотя, если проверка настроена только лишь на панель системы wp-admin, то это точно «заденет» лишь злоумышленников. Ограничивать доступ через htaccess также следует аккуратно — во-первых, проверяйте работоспособность после своих изменений. Кроме того, если захотите поработать в блоге во время отпуска или с другого компьютера, следует помнить, что войти сможете только с вашего IP. Поэтому нужно иметь возможность обратиться в тех поддержку либо помнить параметры доступа по ФТП.
Если будут какие дополнения к посту про защиту от Flood (Brute Force) атак на wordpress — пишите в комментариях. Кстати, вас эта проблема задела?
P.S. При оптимизации под поисковики одна из задач вебмастера — убрать дубли страниц на сайте. Специальный альтернативный метод позволит сделать это без использования файла robots.txt.
Меня пока не задела. Хотя на хостинге ukraine.com.ua на прошлой неделе была какая-то ddos-атака, но проблем не наблюдал.
Каждый раз читая подобные статьи о безопасности возникает мысль в голове «нужно защититься», на этом и заканчивается, благо резервные копии регулярно делаю. Жду пока жаренный петух не клюнет =)
elimS, когда хостер прислал предупреждение о защите тоже подумал, что меня это не коснется. Но чуть позже все же пришлось разбираться с проблемой, т.к. задело.
У ограничения по IP доступа есть минус существенный: заходишь только с одного компа. К тому же если динамический IP — каждый раз нужно лезть на ftp.
Проще скрыть один раз wp-login.php и отдавать всем остальным 403 ошибку.
Виталий, для динамического IP это вообще не вариант — согласен на 100%.
Почему же не вариант? Узнаем сетку провайдера и прописываем.
Вот цитата с хабра, например:
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
где xxx. xxx. xxx. xxx — это ваш IP. Для задания разрешенных диапазонов IP-адресов вы можете заменить три последние цифры. Например, написав вместо них «0/12», вы зададите диапазон IP-адресов одной сети, что избавит вас от необходимости вводить в список все разрешенные IP-адреса отдельно.
elimS, ну если так, то да) Я как-то и забыл, что можно прописать диапазон адресов.
Виталий, Tod, и у меня динамический. Так когда началась вся эта кутерьма, то Я ограничил вход в админку по ip, поставил прокси сервак на свой же хостинг и ай-пи адрес привязал к админке. Вход в прокси-сервер закрыл паролем. Скриптов прокси серваков в Гугле есть на любой вкус, ставить их — 5 минут.
Погодите, я всегда думал, что DDOS атака производиться на сервер, а не на CMS. Ну оно походу так и есть. DDOS проводиться с целью «повесить» сервис, а не подобрать пароли. В случае атаки отправляется больше количество пакетов, либо меньшее количество, но пакеты обладают большим размером.
Так что у вас не DDOS был получается
GEEKUZ, вы правы, вообще там брут-форс атака, то есть именно подбор пароля.. просто эффект получается как DDoS, поэтому так статью и назвал.
Ты тоже на FastVPS :) Отличный саппорт, уже несколько лет у них размещаюсь. В отличии от peterhost’a, которые просто закрыли доступ к админке, FastVPS предложил защиту через htpasswd. Кореш до сих пор ждет пока откроют
Bigxam, да, есть кое-что на FastVPS :) Возились с тех.поддержкой над проблемой около часа с перерывами, но все пофиксили.
На блог заходят боты с пары десятков IP, better wp security блокирует подбор паролей, но так как заходят с разных IP практически одновременно, то резкий перегруз сервера и результат получается как DDOS и как следствие ложится не только блог, но и магазин, и сайт ( всё что на одном аккаунте хостинга ) в общем грустно. Спасибо автору, буду курить статью, думать.
Сергей, сразу пишите хостеру — толковый поможет решить проблему.
Кстати, как вариант, можно на месяц съехать на Битрикс, благо перенос несложный, а месяц использования бесплатный. Это конечно вариант для тех, кому возиться не лень и место на хостинге позволяет держать несколько сайтов и баз данных. А там видно будет, либо проблема исчезнет, либо найдется приемлемое решение. При необходимости можно повторить перенос, переустановить Битрикс и ещё месяц жить спокойно. Да, заморочно, но вариант. Перенос можно также сделать на Друпал, МаксСайт и ещё пару движков. А там время покажет.
Советую проанализировать логи apache, особенно на post запросы и загрузку страниц, на которую ваш сайт отдает 404-ю ошибку (создает достаточно большую нагрузку). Есть хостеры которые с помощью своих автоматических механизмов выявляют такие айпишники и сами их блокируют, у меня например такой.
Еще можете заблокировать post-запросы. Вот тут я писал о том как это делается: http://elims.org.ua/blog/nagruzka-na-server-i-post-zapros-s-edit-v-konce/
Надеюсь автор не сочтет этот комментарий за спам =)
Сергей, с Вордпресс на Битрик я бы не переехал и с доплатой)) Вообще защита от Flood (Brute Force) т.е. от подбора паролей не сложный. Я заменил все упоминания ddos на этот термин, т.к. он более правильный. Повторюсь — сразу пишите хостеру, он не просто предоставляет место под сайт, а и фактически отвечает за его работоспособность. Вы за это платите, поэтому «штормите» тех.поддержку.
elimS, спасибо за подсказку.
Вчера была атака. сайт отрубили…
Все эти плагины ерунда. Закачиваете в директорию инсталятор касперского, активируете в админке и никакой вирус не тронет ваш блог. Иногда можно в админке др веб на ночь поставить, всю гадость убивает сразу.
А лучше всего закидывать линукс и активировать его в админке. Тогда вообще вирусы не страшны, их в линуксе нет)
Лучше плагинами комплексной защиты пользоваться, вручную много что делать приходиться
При удачной настройке iptables nginx попросту блокирует атакующие адреса и они не нагружают системные ресурсы сервера, ну а для решения серьезных проблем нужная хорошая аппаратная защита. Могу порекомендовать ребят из Simplyway. отлично справляются с ддос атаками