Сегодня просмотрел статистику плагина Limit Login Attempts (Ограничение попыток авторизации в WordPress) и ужаснулся. За 2 недели заблокировано 16 587 IP адресов за неудачные попытки авторизации.
Хорошо конечно, что заблокировано, но серверу от этого не легче. Запросы все равно приходится обрабатывать. А когда их такое количество, то сервер начинает падать.
Проблему с ботами надо срочно решать. Такой поток обращений создает неслабую DDOS атаку.
Решил применить грубую силу и запретить доступ к авторизации всем, кроме меня. Дома у меня статический IP, поэтому особых неудобств я испытывать не буду.
Приступив к реализации столкнулся с проблемой. Общепринятый метод блокировки через .htaccess у меня не сработал. Сервер блокировал всех и меня вместе с ними.
Умная мысль пришла позже. У меня на сервере стоит связка nginx + Apache – это и вызывало проблему. Благо, не я один такой, поэтому довольно быстро нашел на буржуйском форуме рабочее решение.
В результате, делюсь с вами рабочим вариантом.
Для блокировки доступа к страничке авторизации WordPress по IP необходимо в файл .htaccess добавить следующий код:
# закрываем доступ к wp-login.php
<FilesMatch "wp-login.php">
SetEnvIf Remote_Addr ^186\.157\.61\.44 testrule # поменяйте IP на свой
Order Deny,Allow
Deny from all
allow from env=testrule
</FilesMatch>
Теперь, всем нежеланным гостям будет выдана такая ошибка:
Нагрузка на сервер сразу снизилась примерно на 50%. Проблема решена.
А как быть, если IP не статичный?