Ограничить доступ к wp-admin можно на уровне веб-сервера, хостинга или дополнительной авторизации. Для небольшого сайта с постоянным IP удобнее всего разрешить вход только с доверенных адресов. Если IP меняется, подойдут Basic Auth или доступ к сайту через VPN. Настраивать ограничение нужно вместе с проверкой wp-login.php: именно по этому адресу обычно открывается форма входа в WordPress.
Сначала определите, что именно нужно закрыть
Каталог wp-admin — не единственная точка входа. Неавторизованного посетителя WordPress обычно перенаправляет с /wp-admin/ на /wp-login.php. Если ограничить только каталог, форма входа останется доступной напрямую. Поэтому IP-фильтр или дополнительный пароль стоит применять и к wp-login.php.
При этом не следует без проверки закрывать весь каталог от всех посетителей: файл wp-admin/admin-ajax.php используется WordPress и плагинами для запросов с публичной части сайта. Если заблокировать его, могут перестать работать отдельные формы, фильтры и другие функции. Необходимость исключения зависит от способа настройки и конкретного сайта.
Выберите правило по ситуации:
- Постоянный внешний IP — разрешите доступ только с него на уровне Apache, Nginx или панели хостинга.
- Меняющийся IP или несколько устройств — используйте VPN с фиксированным адресом выхода либо дополнительный пароль Basic Auth.
- Нужен контроль доступа для команды — настройте сетевое ограничение и оставьте в WordPress отдельные учётные записи с подходящими ролями. Роль пользователя сама по себе не ограничивает доступ к странице входа.
Ограничение по IP на Apache
Если сайт работает на Apache и хостинг разрешает директивы авторизации, правило можно добавить в файл .htaccess внутри каталога wp-admin. До изменения скачайте исходный файл и убедитесь, что у вас есть доступ к панели хостинга или файловому менеджеру: ошибочное правило может закрыть админку.
Пример для Apache 2.4: замените адрес в примере на свой публичный IP. Если администраторов несколько, добавьте для каждого отдельную строку Require ip.
Require ip 203.0.113.10
<Files "admin-ajax.php">
Require all granted
</Files>
Адрес 203.0.113.10 здесь демонстрационный — использовать его для реального ограничения нельзя. Узнайте внешний IP у своего интернет-провайдера или в панели сети. Если провайдер периодически меняет его, после смены адреса правило перестанет пропускать вас.
Это правило ограничивает файлы в wp-admin, но не закрывает wp-login.php, который находится в корне WordPress. Добавьте такое же ограничение для него в конфигурации Apache или настройках хостинга. Синтаксис и место для правила зависят от конфигурации сервера; если хостинг не принимает директивы в .htaccess, попросите поддержку установить ограничение на уровне виртуального хоста.
В Apache 2.2 использовался другой синтаксис контроля доступа. Не переносите старые примеры с Order, Allow и Deny в конфигурацию Apache 2.4 без проверки: используйте документацию хостинга для установленной версии.
Ограничение по IP на Nginx и через хостинг
Nginx не читает файлы .htaccess. Правила нужно добавлять в конфигурацию сайта, а затем проверять её и перечитывать конфигурацию сервера. Как именно это делается, зависит от хостинга и существующих правил обработки PHP. Если у вас нет доступа к конфигурации Nginx, настройку должна выполнить поддержка.
Попросите ограничить доступ по IP к /wp-admin/ и /wp-login.php, сохранив доступность /wp-admin/admin-ajax.php, если его использует сайт. Не вставляйте отдельный блок location в конфигурацию наугад: в Nginx порядок и типы location-блоков имеют значение, а неверное правило обработки PHP может нарушить работу сайта.
Если в панели хостинга есть функция ограничения доступа к каталогу по IP, она обычно безопаснее ручного редактирования серверной конфигурации. Уточните, распространяется ли правило на форму входа и можно ли настроить исключение для admin-ajax.php.
Дополнительный пароль через Basic Auth
Basic Auth добавляет перед страницей браузерное окно с отдельным логином и паролем. Это второй барьер до формы WordPress, поэтому пароль от него должен отличаться от пароля учётной записи администратора. Настраивайте защиту на хостинге или на веб-сервере, защищая каталог wp-admin и отдельно wp-login.php.
Если дополнительная авторизация закрывает весь каталог, проверьте, как она влияет на admin-ajax.php. Некоторым сайтам нужно оставить этот файл доступным без Basic Auth; возможность исключения зависит от сервера и настройки хостинга. Basic Auth передаёт учётные данные в кодируемом, а не зашифрованном виде, поэтому сайт должен работать по HTTPS. Храните пароль в надёжном менеджере и не используйте его повторно на других сервисах.
В панели хостинга функция может называться «Защита каталога паролем» или «Password protected directories». Если панель позволяет указать только каталог, уточните у поддержки, как оставить доступ к нужным публичным запросам и защитить wp-login.php. После включения защиты сразу проверьте вход и работу публичных функций сайта.
Проверьте ограничение, не закрыв себе доступ
Не проверяйте новое правило только из текущего браузера: он может сохранить авторизацию, а ваш IP уже может быть добавлен в список разрешённых. Откройте сайт в приватном окне и проверьте его с устройства или сети, адрес которой не разрешён.
- С разрешённого IP откройте
/wp-login.php, войдите в WordPress и перейдите в/wp-admin/. - С другой сети проверьте, что вход действительно заблокирован или сначала запрашивает дополнительный пароль — в зависимости от выбранного способа.
- Проверьте публичные страницы сайта и функции, которые могут использовать
admin-ajax.php. - Если доступ пропал у администратора, удалите или исправьте правило через файловый менеджер, FTP/SFTP либо панель хостинга. После проверки убедитесь, что новые настройки сохраняются и не перезаписываются конфигурацией сервера.
Если сайт находится за прокси или CDN, сервер может видеть IP прокси, а не посетителя. В таком случае правило по IP нужно настраивать с учётом конфигурации прокси и доверенного способа определения адреса клиента. Не используйте заголовок вроде X-Forwarded-For как источник IP без корректной настройки сервера: клиент может подделать такой заголовок.
Что не заменяет ограничение доступа
Смена адреса страницы входа, отключение регистрации или плагин, который ограничивает число попыток входа, не равнозначны запрету доступа к панели по IP или дополнительному паролю. Эти меры решают другие задачи. Для небольшой команды обычно достаточно серверного ограничения с надёжной учётной записью WordPress; если IP нестабилен, практичнее использовать VPN или Basic Auth, сохранив резервный способ восстановить доступ через хостинг.