Если Ваш сайт, написанный на базе популярного движка (WordPress, Joomla, Magento и др.), стал сильно тормозить, а в логах доступа сервера Вы видите множество обращений к странице логина или к странице администрирования, знайте — ваш сайт «нашли» боты-брутфорсеры и пытаются подобрать пароль администратора.Если с Вашим паролем всё нормально (он длинный и набран цифрами и буквами в разных регистрах), то Вы можете быть уверены, что брутфорсер его не подберёт. Но сам факт того, что происходит подбор, а тем паче то, что при этом страшно грузится сервер и расходуется трафик (особенно если на вашем хостинге он платный) откровенно говоря, напрягает.
Ниже я расскажу как избавиться от этой проблемки очень простым и бескровным способом.
Сперва предыстория. Проблемой я озаботился спустя некоторое время после того, как перешёл с «самодельного» движка на WordPress (впрочем, это мог бы быть любой другой более-менее распространённый движок). Запилил первый сайт и уже через неделю увидел в логах огромное количество запросов к странице логина. Поиски в интернете выводили на множество «рецептов», подавляющее большинство которых заключается в переименовании файла wp-login.php и его правке (поскольку адрес самой страницы неоднократно встречается в самом файле wp-login.php и других файлах движка.
Но этот способ означает правку ядра WordPress. А это влечёт за собой невозможность получать регулярные автоматические обновления ядра, а также несовместимость с некоторыми плагинами. К тому же способ абсолютно не спасает против тех роботов, которые ищут «дыры» в админке и плагинах, обращаясь с хитроумными параметрами по адресам вида /wp-admin/* В общем, этот способ сразу был отвергнут.
А идея моя заключается вот в чём.
Нужно завести специальную куку, такую, чтобы при её отсутствии сам сервер (Apache или Nginx) перехватывал обращения к странице логина или админке и выдавал вместо кода страниц код состояния 404, означающий полное отсутствие по этим адресам каких-либо страниц). А при наличии куки сервер должен просто обходить эту проверку и сайт должен работать как ни в чём не бывало. Брутфорсеры не тупые, они не будут бесконечно «долбать» отсутствующий URL и отступят.
Куку я планировал устанавливать автоматически с помощью секретного скрипта, который кроме всего прочего (для моего удобства) должен также переносить меня на страницу логина.
Теперь дело за реализацией.
Я привожу кусок конфига для Nginx, поскольку я пользуюсь только этим сервером, но, зная идею, Вы самостоятельно можете написать конфигурацию для Apache или другого сервера.
1 2 3 4 5 6 7 8 9 10 11 12 |
server { listen 80; server_name mysite.ru; root /var/www/mysite.ru/; index index.php; # ... Вот он наш кусок ... if ($cookie_mysecretcookie != "secretcookievalue") { rewrite ^/(wp\-admin/|wp\-login\.php) /not-found redirect; } # .... Конец куска .... } |
Теперь файл PHP с секретным именем, который будет данную куку устанавливать:
1 2 3 4 5 6 |
<?php // Ставим секретную куку на месяц setcookie('mysecretcookie', 'secretcookievalue', time() + 3600 * 24 * 30, '/', 'mysite.ru', null, true); header('Location: http://mysite.ru/wp-admin/index.php'); |
Обратите внимание, что кука устанавливается на 1 месяц, значит, в течение месяца Вы можете заходить в админку даже не запуская этот секретный файл.
Вот и всё. Просто, правда? Разумеется, этот рецепт может быть повторен абсолютно для любого движка, Вам нужно будет только поменять пути и названия файлов.
Что-то непонятно? Спросите в комментариях!
Источник: http://epsiloncool.ru/programmirovanie/php/zashhita-sajta-ot-brutforsa-bez-pravki-koda
Leave a Reply