403 Forbidden при доступе к wp-login.php — как исправить | Мастерская — статьи по WordPress и серверам | de-bor.ru

Частный web-мастер Денис Борисов
WordPress-сайтов

403 Forbidden при доступе к wp-login.php — как исправить

WordPress: ошибки и фиксы · 2026-08-15 · обновлено 2026-08-15 · 8 мин чтения
403 Forbidden только на wp-login.php при работающем сайте обычно означает, что доступ к странице входа блокируется отдельным правилом защиты. Виновником может быть плагин безопасности, правило веб-сервера, Cloudflare WAF или fail2ban. Нужно найти, кто режет доступ именно к файлу входа, и снять блокировку.

Симптом характерный: главная и внутренние страницы открываются, а при переходе на /wp-login.php браузер отдаёт «Forbidden — You don't have permission to access this resource». В большинстве случаев отказ выдаёт веб-сервер, WAF или защитный плагин. Если блокировку устанавливает плагин безопасности WordPress, запрос может быть отклонён ещё до обычной обработки страницы.

Почему 403 появляется только на wp-login.php

Основные причины:

  1. Плагин безопасности WordPress. Wordfence, All-In-One Security и Solid Security (ранее iThemes Security) после нескольких неудачных попыток входа блокируют адрес на уровне правила: в списке блокировок лежит либо конкретный IP, либо маска, закрывающая только wp-login.php и wp-admin.
  2. Правила веб-сервера. .htaccess, конфигурация Nginx и аналогичные механизмы. Запрет по IP, по User-Agent или «Deny from all» для подпапки — такое правило мог добавить плагин защиты или оно осталось после ручной правки, переезда хостинга.
  3. Cloudflare/WAF/CDN. Само наличие Cloudflare не означает, что wp-login.php будет заблокирован: блокировка появляется только при срабатывании настроенного механизма безопасности — Managed Rules, кастомного правила или другого security feature, закрывающего страницы входа.
  4. Серверные средства защиты. fail2ban, ModSecurity и аналогичные механизмы могут блокировать запросы по IP или по определённым признакам запроса. Конкретное поведение зависит от настроенной конфигурации. На shared-хостинге блокировку может устанавливать серверная система защиты провайдера.
Отличие от общей ошибки 403 — если Forbidden отдаёт весь сайт, причины другие: права на файлы, сломанный .htaccess, блокировка папки. Мы разбирали их в статье «Ошибка 403 Forbidden WordPress — как исправить». Здесь сайт жив, проблема точечная — и решается точечно.

Как исправить — пошаговая инструкция

Шаг 1. Подтвердите, что 403 только на wp-login.php

Проверьте с сервера или через терминал, чтобы исключить кэш браузера:

curl -sI https://ваш-сайт.ru/wp-login.php | head -1
# HTTP/1.1 403 Forbidden

Параллельно проверьте главную страницу и любой пост:

curl -sI https://ваш-сайт.ru/ | head -1
# HTTP/1.1 200 OK

200 на страницах и 403 на wp-login подтверждают точечную блокировку. Если 403 везде — переходите к общей статье по ссылке выше.

Смотрите не только код ответа. По заголовкам и телу страницы 403 часто можно определить, кто сформировал отказ — Wordfence, Cloudflare, веб-сервер или хостинг:

curl -sS -D - -o /dev/null https://ваш-сайт.ru/wp-login.php

Отдельно посмотрите тело ответа:

curl -sS https://ваш-сайт.ru/wp-login.php | head

В заголовках обращайте внимание на Server и cf-ray (Cloudflare), в тексте 403 — на упоминание плагина, WAF или веб-сервера. Так вы сразу сузите поиск до конкретного механизма.

Шаг 2. Проверьте блокировки в плагине безопасности

Wordfence. Если админка недоступна, временно переименуйте каталог wp-content/plugins/wordfence через FTP/SFTP или файловый менеджер хостинга. Wordfence официально рекомендует этот способ для восстановления доступа. Если доступ к админке есть — зайдите в Wordfence → Firewall → Blocking: там можно найти свой IP среди блокировок и снять блокировку кнопкой Unblock. После восстановления доступа верните каталогу исходное имя и включите плагин обратно.

All-In-One Security. Откройте настройки блокировки входа и проверьте список временно заблокированных IP. Если админка недоступна, временно отключите плагин через файловый менеджер или FTP, переименовав его каталог, после чего проверьте доступ к wp-login.php.

Solid Security (ранее iThemes Security). Если админка недоступна, временно переименуйте каталог плагина wp-content/plugins/better-wp-security через FTP/SFTP или файловый менеджер: плагин перестанет применяться, и блокировка не будет действовать. Это способ временного отключения установленного плагина, а не удаление настроек — после проверки верните каталогу исходное имя.

Не удаляйте записи из базы данных наугад — внутренние таблицы плагинов безопасности отличаются в зависимости от версии и времени установки, а прямая правка БД без понимания механизма может не дать результата или навредить. Сначала определите, какой именно уровень отдаёт 403.

Шаг 3. Проверьте .htaccess

Откройте .htaccess в корне сайта и поищите упоминания wp-login, wp-admin, Deny или Require:

# Через SSH или файловый менеджер
grep -n -iE 'wp-login|wp-admin|Deny|Require|mod_security' .htaccess

Команда предназначена для сервера с SSH. В файловом менеджере хостинга эти строки нужно искать вручную, и правило может оказаться не в корневом .htaccess, а в конфигурации веб-сервера или в .htaccess подпапок.

Если нашли правило вроде:

RewriteRule ^wp-login\.php - [F,L]

— закомментируйте его решёткой в начале строки и сохраните файл. Это лишь пример возможного запрета. Директива Require all denied, если встретится, зависит от контекста Apache и версии конфигурации — перед правкой убедитесь, что понимаете, откуда она взялась.

После изменения .htaccess сразу повторите запрос. Если результат не изменился, проверьте другие уровни блокировки и серверный error log.

Бэкап перед правкой — сохраните копию .htaccess перед изменением. Правило мог поставить не вы, и после снятия блокировки вход может открыться без защиты от брутфорса. Об этом — в шаге 6.

Шаг 4. Проверьте Cloudflare WAF

Если сайт за Cloudflare (часто на VPS), зайдите в панель и посмотрите события файрвола:

Cloudflare Dashboard → Security → Events

Там видно заблокированные запросы: IP, URI/path, страну и источник срабатывания. Ищите блокировки по URI, содержащему wp-login.php. Типичные виновники:

  • Managed Rules, включая Cloudflare Managed Ruleset и OWASP Core Ruleset (блокируют запросы с признаками атаки);
  • кастомное правило из раздела Security → WAF → Custom rules — Custom Rules могут фильтровать по IP, URL path и другим параметрам и выполнять действие Block, Challenge или Skip;
  • блокировка по стране, если ваш IP вне разрешённой географии.

Если блокирует собственное правило Cloudflare, скорректируйте его условие. Если запрос ошибочно блокируется Managed Rules или другим механизмом WAF, используйте соответствующее исключение или Skip rule для доверенного трафика — конкретный способ зависит от того, какой именно механизм сработал. Подробнее про Cloudflare и админку — в статье «Cloudflare ломает админку WordPress — как исправить».

Шаг 5. Проверьте fail2ban и логи веб-сервера на VPS

На сервере посмотрите активные jails:

sudo fail2ban-client status

Найдите jail, который отвечает за блокировку HTTP/WordPress, и проверьте его статус:

sudo fail2ban-client status ИМЯ_JAIL

Если IP заблокирован этим jail, он появится в Banned IP list:

Banned IP list: ...

Снимите блокировку:

sudo fail2ban-client set ИМЯ_JAIL unbanip ВАШ_IP

Заодно проверьте, не режет ли доступ Nginx напрямую — deny-правила в server-блоке:

sudo grep -RniE 'wp-login|deny|location' /etc/nginx/sites-available/

Конфигурации могут лежать не только в sites-available — их расположение зависит от дистрибутива и настроек сервера.

Если причина не найдена, смотрите error log веб-сервера в момент запроса к wp-login.php. Для Nginx:

sudo tail -f /var/log/nginx/error.log

Для Apache путь зависит от конфигурации, часто используется:

sudo tail -f /var/log/apache2/error.log

Эти пути существуют не на каждом сервере — точное расположение логов подскажет конфигурация вашего дистрибутива.

Шаг 6. Включите защиту обратно правильно

После снятия блокировки вход работает, но сайт снова беззащитен. Правильный порядок:

  1. Зайдите в админку со своего IP.
  2. Включите плагин безопасности, обновите белый список — добавьте свой IP в исключения.
  3. Настройте разумный лимит попыток входа и продолжительность временной блокировки, учитывая реальный сценарий использования сайта. Слишком агрессивные лимиты могут блокировать обычных пользователей и администраторов.

Для Wordfence отдельно: настройки Brute Force Protection поддерживают временную блокировку после превышения заданного числа неудачных попыток. Как настроить защиту без ложных блокировок, мы разбирали в статье «Как защитить WordPress от брутфорса: полная настройка».

Проверка результата

После каждого шага проверяйте запрос обычным GET, не HEAD:

curl -sS -o /dev/null -w "%{http_code}\n" https://ваш-сайт.ru/wp-login.php

Команда curl -sI выполняет HEAD-запрос — её можно оставить как дополнительный вариант, но страницу входа стоит проверять именно GET. Для обычного прямого GET-запроса wp-login.php ожидается 200 OK. Если сайт или защитный механизм перенаправляет запрос, возможен ответ 3xx. Главное — отсутствие 403 и возможность открыть страницу входа.

Полный чек
  • /wp-login.php отдаёт 200 или ожидаемый 3xx вместо 403
  • Форма логина открывается с вашего IP в обычном окне браузера
  • WP-ADMIN после авторизации открывается без ошибок

Когда способ не сработает

Блокировка на стороне хостинга. На shared-хостинге блокировку может устанавливать серверная система защиты, например ModSecurity или собственный WAF хостинга. Конкретный механизм зависит от провайдера и тарифа. Зайдите в панель хостинга — там может быть уведомление о блокировке; снять её можно в панели или через поддержку.

Серверной защитой управляет провайдер, а не вы. На shared-тарифах ModSecurity и аналогичные механизмы настраивает хостинг. Если 403 стабильно на запросах к wp-login.php, а плагины и конфигурация чистые — запросите исключение или диагностику в поддержке.

Блокировка по географии, IP или другим характеристикам запроса. Защитный плагин, WAF или CDN может резать целые страны, а ваш IP оказался в подсети. Проверьте в плагине список заблокированных стран — WP Cerber и Solid Security (ранее iThemes Security) умеют это настраивать.

403 возвращается после снятия. Определите источник блокировки по логам и событиям безопасности: при повторной блокировке IP виновато правило, которое продолжает действовать (например, fail2ban снова заблокировал адрес после следующей ошибки входа), WAF, ModSecurity, плагин безопасности или другое серверное правило.

Частые вопросы

Почему 403 только на wp-login.php, а сайт работает?
wp-login.php — стандартная страница входа WordPress, поэтому защитные плагины и WAF могут применять к запросам к ней отдельные правила. Сайт при этом отдаётся нормально, потому что не попадает под правила защиты входа.
Можно ли зайти в админку, если wp-login.php заблокирован?
Обычно нет: /wp-admin/ при отсутствии авторизации перенаправляет пользователя на страницу входа, поэтому блокировка wp-login.php фактически может сделать админку недоступной. Если защитное правило блокирует только отдельный URL или IP, сначала нужно снять именно эту блокировку.
Плагин блокирует меня после нескольких неверных паролей. Это нормально?
Нормально, если лимит разумный: несколько попыток с временной блокировкой. Если блокировка происходит после одной обычной ошибки или длится дольше ожидаемого, проверьте настройки конкретного защитного механизма.
Снял блокировку — и через день 403 вернулся. Что делать?
Проверьте журналы безопасности и логи сервера. Если 403 возвращается после вашей обычной попытки входа, правило осталось активным, а снятие было временным — например, fail2ban снова заблокировал IP после следующей ошибки. Если блокировка появляется без ваших действий, это может быть следствием автоматических атак, повторных запросов от вашего IP, работы WAF или некорректного правила. При подозрении на компрометацию дополнительно проверьте сайт на наличие вредоносного кода.
403 на wp-login при переносе на новый хостинг — откуда?
При переносе сайта причиной может оказаться перенесённое правило .htaccess, конфигурация плагина безопасности или различие в настройках веб-сервера на новом хостинге. Проверьте .htaccess, конфигурацию веб-сервера и настройки плагина безопасности. При необходимости временно отключите плагин для диагностики, а после восстановления доступа включите его обратно.

Итог: если wp-login.php возвращает 403, а остальные страницы работают, сначала определите источник блокировки. Проверяйте защитный плагин WordPress, .htaccess и конфигурацию веб-сервера, Cloudflare/WAF и серверные системы защиты. Не удаляйте записи из базы данных наугад: сначала определите механизм, который отдаёт 403.

Заблокирован вход в WordPress?

Сниму блокировку и настрою защиту входа за 1 час. Диагностика через удалённый доступ или подскажу пошагово.

Написать в Написать в

Сопровождение и поддержка сайта

Сопровождение и поддержка сайта

Исправлю ошибки WordPress, восстановлю сайт.

от 5.400 ₽/мес

Подробнее
Техническая оптимизация

Техническая оптимизация

Ускорю сайт, настрою кэш, устраню узкие места.

7.200

Подробнее

Разрабатываю WordPress-сайты

Лендинги, многостраничные сайты, интернет-магазины на WooCommerce — всё на WordPress с удобной панелью управления.

Сайт под ключ: регистрация домена и хостинга, установка WordPress, настройка шаблона и модулей.

Поддерживаю WordPress-сайты

Обновление плагинов и тем, резервное копирование, мониторинг работоспособности — сайт работает без сбоев.

Оперативное исправление ошибок, создание новых разделов, доработка функционала и наполнение контентом.

Продвигаю WordPress-сайты

SEO-оптимизация, настройка Яндекс Метрики и Вебмастера, подключение Google Search Console.

Оптимизация позволяет «поднять» сайт в поисковых выдачах, увеличить целевой трафик и привлечь новых клиентов.

Чистка от вирусов WordPress

Если сайт взломали, появился подозрительный код или спам-рассылка — найду и удалю вредоносный код, закрою уязвимости и настрою защиту от повторного заражения.

После чистки проверю все файлы и плагины, обновлю WordPress до актуальной версии и настрою автоматическое резервное копирование.

Диагностика сайта

Проверю ваш сайт по ключевым параметрам и подготовлю отчёт с рекомендациями:

  • Скорость загрузки и производительность;
  • Безопасность и уязвимости;
  • SEO-состояние и индексация;
  • Мобильная адаптация;
  • Технические ошибки и код.
Заказать диагностику
Михайлова Анастасия

Денис МАСТЕР своего дела. Вёл целый проект, работали с ним на протяжении 4х месяцев. Отзывчивый, понимающий с полуслова специалист. Стоимость услуг радует, а качество работы приводит в восторг.

Денис спасибо Вам от лица нашей строительной компании и от всего нашего персонала.

Михайлова Анастасия

Игорь Караваев

Обратился к Денису для восстановления сайта на WordPress после сбоя. Сделал, как и обещал, за сутки — сайт снова работает без ошибок. Профессионал своего дела, доходчиво объясняет, вежлив и тактичен. Однозначно рекомендую!

Игорь Караваев

Яна Веркулич

Денис, спасибо огромное за работу)) Очень тепло вспоминаю Вас и все что Вы сделали для моей работы и моего сайта.

Денис Профессионал с большой буквы, решает любые вопросы, отличный специалист))

Рекомендую к сотрудничеству, еще раз спасибо)

Яна Веркулич

Бюро Переводов

Денис оперативно и грамотно справляется со всеми поставленными задачами. Внес правки на англоязычную и русскоязычную версии сайта, учел все пожелания. Будем обращаться еще!

Бюро Переводов

Анастасия Виричева

Денис мастер своего дела, рекомендую его как специалиста.
Понимает, что нужно сделать и справляется с поставленной задачей в короткое время.

Делал сайт для салона красоты, просто и функционально.

Анастасия Виричева

Владимир

Очень много времени мучались с сайтом на OpenCart. «Специалисты» не могли нормально разобраться в проблеме, возникавшей при выполнении элементарной задачи.

Денис сделал это в два счета, также расписал подробно, в чем была проблема и как она решена. На 200% доволен. Даже не хочется его рекомендовать, потому что будет постоянно занят))

Владимир

Ксения Петровская

Денис оперативно ответил и помог решить проблему, которую я даже описать нормально не могла)) Мы сами что-то накрутили с корпоративной почтой — письма то уходили, то нет, в общем всё сломали.

Денис всё починил, теперь у нас нормальная почта, домен работает, письма приходят и уходят. Цена как заявлена — оплатили по факту проверки. Спасибо большое!

Ксения Петровская

Александр Кривуля

Заказал у Дениса доработать сайт на WordPress. При этом трудно себе представлял, что сам хочу. Благодаря профессионализму Дениса и его умению всё грамотно и просто объяснять, предлагать разные варианты решений — цель была достигнута.

Умение общаться доходчиво и терпеливо с клиентами — огромный плюс. Я очень доволен. Однозначно рекомендую!

Александр Кривуля

Кондитер мания

Прекрасный специалист, ответил и устранил ошибку на сайте за пару часов, сохранила контакт, будем по необходимости обращаться. Рекомендую!

Кондитер мания

Бесплатная настройка хостинга и домена

Регистрация хостинга на 1 месяц и домена .ru/.рф на 1 год входит в стоимость разработки сайта.

Подробнее