Более полутора месяцев борюсь с переменным успехом с DDOS. Что это ддос я узнал не сразу.
Сначала появились проблемы с загрузкой сайта, 503 ошибка, логи показывали большую нагрузку на CPU:
На хостинге джино.ру у меня премиум-аккаунт (VIP-хостинг), за который я плачу (за все подключенные услуги) 1260 руб в мес. Что это мне дает:
На первом скриншоте видно, как легко у меня нагрузка переходит рубеж 30%.
По логам вот что я увидел:
Т.е., очень много запросов к файлу /wp-admin/admin-ajax.php
Тех.поддержка посоветовала закрыть доступ к админке ко всем кроме себя самого, это можно например сделать, разместив в .htaccess админки код
# закрываем доступ всем, кроме себя
order deny,allow
deny from all
allow from 164.215
или, цитируя техподдержку, ещё более надежно:
Вам необходимо создать файл .htaccess, в директории доступ к которой ограничивается, в тело файла поместить следующий код:
AuthName «Need authorization»
AuthType Basic
AuthUserFile /home/users2/s/shtirlitz/.htpasswd
require valid-userСгенерировать пароль для .htpasswd можно по ссылке: http://webdevtools.ru/passwd
Файл .htpasswd необходимо разместить в корне файлового менеджера.
Но этот совет не помог, точнее, он мне не подходил. Дело в том, что тот самый файл /wp-admin/admin-ajax.php нужен для нормального использования ajax-скриптов на сайте, в т.ч. плагина wp-recall, о котором я рассказывал.
Закрыть доступ в админку — значит закрыть возможность юзерам общаться между собой, хоть они и не заходят в эту админку. Плюс, сам файл якобы нужен для корректной работы сайта, не знаю, правда, в чем это заключается.
Зато нагрузка на сайт понижалась до приемлемой.
Вообще юзать что-то из папки с админкой — отлично характеризует движок wordpress в целом, имхо, — заметил один комментатор в инете…
И вот такой код тоже не помог:
# Если темы или плагины вашего сайта используют AJAX, в файл .htaccess необходимо добавить следующую информацию (после закрытия доступа по ip всем кроме себя):
Allow acces to wp-admin/admin-ajax.php
<Files admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>
А между тем в ответ на мои обвинения (что сайт не держит нормально онлайн) в техподдержке отписали, что «сохраняется нагрузка на CPU выше допустимых лимитов«, «Рекомендуем использовать PHP 5.3» и «За Период обращений c 27/Nov/2013 по 28/Nov/2013 Запросов: 29223«.
Обновил php, это ничем не помогло.
И я начал искать людей, которые помогли бы. Один сказал, что это старая проблема движка, но потом сослался на проблемы с ддосом, второй тоже подвердил это. Получается, виноват не плагин, который очень используют, а запросы к админке. Мне насоветовали поставить кучу плагинов. В пик борьбы с нагрузкой ставились несколько плагинов в целях безопасности:
Limit Login Attempts
Lockdown WP Admin
Wordfence Security
Better WP Security
All in one WP Security
Stealth Login Page
Одни блокировали частые доступы в админку, другие вводили капчу для админки. Третьи блокировали все подозрительные IP (404 ошибки, частый вход, неверный пароль для входа), которых было куча! Комплексные плагины, выделенные вверху жирным шрифтом проделали бОльшую часть работы: я сменил логин администратора, установил базовый набор против брутфорса и других атак, даже закрыл админку хитрым путем, по которому все плагины работают, а вот зайти в неё никому кроме меня не получится, если не знать специальный адрес, все желающие отправлялись на локалку 127.0.0.1 (плагин личных сообщений не работает через админку).
Тем не менее, это не помогало. Дело было не во взломе админки, т.к. защита уже была надежная.
Ещё я оптимизировал движок, поставив WP File Cache, попутно узнав,как много жрут плагины, например, WP-RecentComments и тот же Wp-Recall. Но WP File Cache снизил нагрузку в два раза, а я сам и пользователи заметили, как шустро стал работать сайт.
Что не мешает сайту до сих пор выходить за пределы 30%-ой нагрузки…
А вообще, плагины по сути повторяют свои функции, поэтому мне пришлось сделать выбор, убрав достойный плагин, о котором замолвлю словечко, Better WP Security (кликабельно):
Вверху специальная панель. В самое первой консоли можно увидеть 21 совет, как улучшить безопасность: сменить пароль, логин и ID администратора, убрать инфу о версии WP и плагинов. Можно запланировать регулярную высылку бэкапов БД на почту, защитить админку от перебора, да и вообще закрыть её в ночное время, когда вы точно не пользуетесь ею или изменить адрес, например, на сайт.ру/admin или как пожелаете.
Кликнув по последней кнопке Logs узнаете, кто к вам ломится в админку, какие выходят 404 ошибки, кто заблокирован и какие файлы были изменены в последнее время.
Сейчас по местному времени у меня 17:25, вот статистика обращений к сайту от хостера:
Согласно счетчику яндекс-метрики к этому времени у меня 432 посетителя и 1650 просмотров.
А вот полная статистика за 1.5 дня от того же хостера:
Из 93 тыс. запросов 70% идут к этому коварному файлу admin-ajax.php. 1789 юзеров типа за это время сконнектилось с файлами моего сайта.
1260 рублей за днищехостинг, куда же мир катится. Плачу 1800 за дедик с и7-3770 и 16гб оперативы.
Вордпресс не могёт вытянуть один запрос в пять секунд! Что же делать? Очевидно надо поставить еще пару плагинов!
Научи распозновать «днищехостинг» от нормальных, VDS/VPS не предлагать.
про вордпресс ирония понятна, но у меня 43 запроса на большой странице выполняются за 0.5 с